【发布时间】:2016-02-23 14:22:11
【问题描述】:
我想知道是否可以将带有编译行参数的宏传递给 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。
【问题讨论】:
-
我可能忽略了一些事情,但是是什么阻止了你做
-DHASH=hashfcn1? -
你是对的。我对支持带有不同数量参数的哈希函数有点兴趣,但除了一个之外,其他都是硬编码的常量,但是通过添加另一个函数很容易支持。