小编Vol*_*orm的帖子

不区分大小写的#define

是否可以使用预处理器发出不区分大小写的#define语句?

例如,我想将foobar的任何外壳转换为spameggs,即:

FooBar -> spameggs
foobar -> spameggs
fooBar -> spameggs
Foobar -> spameggs
FOOBAR -> spameggs
FOOBAr -> spameggs (an odd possibility I know)
etc
Run Code Online (Sandbox Code Playgroud)

这背后的原因是我想#define一些fortran子程序有不同的名称,它们当然不区分大小写.请注意,我并不真正关心保留大写方案(在最后一个例子中看起来有点无稽之谈).

c-preprocessor preprocessor-directive

5
推荐指数
1
解决办法
4335
查看次数

Valgrind检测strlen中的无效读取

我正在使用Valgrind来检测我的库中的内存泄漏/错误,这是我第一次使用它.似乎暗示有一些无效的读取std::string.

这是错误消息的开头

==16214== Invalid read of size 1
==16214==    at 0x402701D: strlen (mc_replace_strmem.c:282)
==16214==    by 0x40E53AA: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==16214==    by 0x42FD03E: LHAPDF::Fortran_PDF_Base::initAlphasPDF() (Fortran_PDF_Base.C:290)
Run Code Online (Sandbox Code Playgroud)

其余的只是更多的回溯.作为我的代码的行是结构的构造函数,它接受两个std::strings作为参数.

我不相信std::string可以做错什么,那么可能的问题是什么呢?

编辑 - 结构构造函数:

AlphaS_Info() {}
AlphaS_Info(bool fixed, Order order, std::string method, std::string symbol,
            double alfasQ, int alfasQParm, double Q0, double mc, double mb, double mt) :
  m_fixed(fixed), m_order(order), m_method(method), m_symbol(symbol),
  m_mc(mc), m_mb(mb), m_mt(mt), m_alfasQ(alfasQ), m_Q0(Q0), m_alfasQParm(alfasQParm) {}
Run Code Online (Sandbox Code Playgroud)

调用构造函数:

p_info->p_asinfo = new LHAPDFTOOLS::AlphaS_Info(fixed, …
Run Code Online (Sandbox Code Playgroud)

c++ memory valgrind

4
推荐指数
1
解决办法
2887
查看次数

返回fortran中未知长度的字符串

对于相当简单的问题道歉,我似乎无法找到任何好的fortran文档.

我正在尝试编写一个从单元读取的函数,修剪输出并附加空终止符,如:

character(*) function readCString()
  character*512 str
  read(1, *) str
  readCString = TRIM(str)//char(0)
  return
end function readCString
Run Code Online (Sandbox Code Playgroud)

但是,我知道这不起作用,但它编译.分段错误最近不是我的朋友.没有函数关键字之前的"字符(*)",它将无法编译,并且代替星号的任何值也会中断,很可能是因为:

TRIM(str)//char(0)
Run Code Online (Sandbox Code Playgroud)

与我代替恒星的数字长度不同.我对fortran很新,但我试图将一些fortran代码与C接口(因此为null终止符).

谢谢你的帮助.

string fortran

3
推荐指数
1
解决办法
9264
查看次数

链接后更改符号名称

是否可以采用静态对象并以不会破坏函数调用的方式重命名符号?

例如,如果我们有一个包含两个函数的静态对象:

void A()
{
  //Do stuff
}
Run Code Online (Sandbox Code Playgroud)

void B()
{
  A();
}
Run Code Online (Sandbox Code Playgroud)

假设这些是外部声明的C函数,那么.so将包含两个符号 - A和B.有没有办法重命名A - > funcA和B - > funcB?

(关于函数调用的问题的第二部分是基于我对链接的天真,如果你只是更改名称,函数调用是否会中断?)

PS平台是linux,可能是用gcc编译的,但是如果有交叉编译方式那么我会很高兴的!

c symbols

3
推荐指数
1
解决办法
174
查看次数

错误报告知道它在代码中的位置

我有一个名为"err"的流,它位于命名空间Errors中.这就是开发人员如何以用户友好的方式报告错误.因此,当出现问题时,开发人员将编写错误消息:

Errors::err << "Oh no. That was a bad thing.";
Run Code Online (Sandbox Code Playgroud)

是否可以使用预处理器附加[__FILE__:__LINE__]到错误消息而不更改当前的错误报告样式?即上面的命令现在(在预处理魔术之后)将其输出到错误文件:

不好了.那是件坏事.[file.cc:20]

我自己试过这个,但是C预处理器似乎不喜欢命名空间,我觉得我不能在代码中的任何地方替换"错误" - 如果开发人员决定使用using Errors::err或者这将是一个更大的问题using namespace Errors.

在我想要实现的范围内,C-Preprocessor是否与编码风格根本不兼容?如果有的话还有其他任何方法(也许是基于Makefile的?)来做我想做的事情?

c++ c-preprocessor

3
推荐指数
1
解决办法
163
查看次数

将两块地块放在一个操纵处,同时保持地块可见

我想看一些依赖于参数n的函数的实部和虚部.独立(与正的设定值),我得到完美漂亮的图形,但在操纵时,把他们,他们变得非常小.

这是我正在使用的确切代码; 删除操作和图形显示的大小,但有了它,它们太小,不易清晰.

Manipulate[
 Plot3D[Im[Sqrt[-1 + (x + I y)^2 n]], {x, -2, 2}, {y, -1, 1}, 
   AxesLabel -> Automatic]
  Plot3D[Re[Sqrt[-1 + (x + I y)^2 n]], {x, -2, 2}, {y, -2, 2}, 
   AxesLabel -> Automatic]
 , {n, 1, 10, 1}]
Run Code Online (Sandbox Code Playgroud)

为什么这样做,我该如何解决?

wolfram-mathematica

3
推荐指数
1
解决办法
7005
查看次数

C++中的可更改返回数据类型

我正在编写一个矩阵类,我希望它能够存储任何不同的(数字)数据类型 - 从boolean到long.

为了访问数据我正在使用括号运算符.是否可以使该函数返回不同的数据类型,具体取决于类中存储的数据类型.更重要的是,我不完全确定如何在同一变量名下存储类中的不同数据类型.这可能是不可能的.

我认为将数据存储为任何类型的唯一方法是将其存储为void并将数据类型存储为额外变量.但是,作为一个空白返回会导致问题,不是吗?因为我想要返回作为我存储在函数中的数据类型.

谢谢.

c++ templates

2
推荐指数
2
解决办法
508
查看次数

将列表中的所有值映射到= 2,为0

我有一个mathematica列表,我想用1替换所有2和其他所有2.

例如.

{0,1,2,3,2,3,4,5,2,2,6}
Run Code Online (Sandbox Code Playgroud)

- >

{0,0,1,0,1,0,0,0,1,1,0}
Run Code Online (Sandbox Code Playgroud)

我认为可以使用替换全部,但是有什么规则可以实现这一点?

谢谢!

wolfram-mathematica

2
推荐指数
2
解决办法
288
查看次数

迭代在一行

我有一些形式的代码:

for i in range(nIterations):
    y = f(y)
Run Code Online (Sandbox Code Playgroud)

f其他地方定义的函数在哪里.希望该代码的想法是,它运行之后yf适用于它的nIterations时间.

在python中有一种方法可以将它写在一行中吗?

python

0
推荐指数
1
解决办法
4636
查看次数