我想知道是否可以将在编译行上接受参数的宏传递给 gcc 或其他 C/C++ 编译器。
我以前从未见过这个,但它实际上对我一直在做的一些 OpenCL 开发很有用,我想用一个可以在编译时替换的宏替换函数名。
下面是一个例子:
int y, x = 0;
y = HASH(x);
如果能在编译行把HASH定义为一个宏就好了,这样当我编译程序的时候,我可以根据需要重新定义HASH。例如,如果我可以执行 gcc -DHASH(X)=(hash_fcn1(X)) program.c -o program
就好了,但我以前从未见过这种事情。
我用 clBuildProgram 尝试过,但没有成功。
我意识到我可以让另一个程序传递程序并用正确的函数名替换 HASH,但我想知道是否有一种简单的方法可以在不使用 sed、awk 或我选择的语言的字符串替换或正则表达式库。
另一个解决方案是在命令行上定义一个平面宏,然后在实际的源文件中有一系列的守卫来控制宏在源文件中的定义方式,例如就像在其他帖子中一样 how to compare string in C conditional preprocessor-directives .
最佳答案
#include <stdio.h>
int func2(int x) {
return x+1;
}
int func1(int x) {
return x+2;
}
int main()
{
int x = 0;
int y = HASH(x);
printf("x=%d\n", y);
return 0;
}
我写了上面的代码并编译了: gcc -O0 -DHASH=func1 -o 测试 test.c 和 gcc -O0 -DHASH=func2 -o 测试测试.c
我得到了输出 1 和 2。我认为需要注意的重要一点是我没有在代码中的任何地方#defined HASH。
关于C/C++ 传递在编译行上接受参数的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837828/