
我以前从未见过这个,但它实际上对于我一直在做的一些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 test.c
和
gcc -O0 -DHASH = func2 -o test test.c
我得到了输出1和2.我认为重要的是要注意我在代码中的任何地方都没有#defined HASH.
总结以上是内存溢出为你收集整理的C/C++传递在编译行上带参数的宏全部内容,希望文章能够帮你解决C/C++传递在编译行上带参数的宏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)