CC++传递在编译行上带参数的宏

CC++传递在编译行上带参数的宏,第1张

概述我想知道是否可以将在编译行上带参数的宏传递给 gcc或其他C/C++编译器. 我以前从未见过这个,但它实际上对于我一直在做的一些OpenCL开发很有用,我想用一个可以在编译时替换的宏替换一个函数名. 以下是一个例子: int y, x = 0;y = HASH(x); 如果可以在编译行上将HASH定义为宏,那将是很好的,因此当我编译程序时,我可以根据需要重新定义HASH.例如,如果我能做gcc 我想知道是否可以将在编译行上带参数的宏传递给 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 test.c

gcc -O0 -DHASH = func2 -o test test.c

我得到了输出1和2.我认为重要的是要注意我在代码中的任何地方都没有#defined HASH.

总结

以上是内存溢出为你收集整理的C/C++传递在编译行上带参数的宏全部内容,希望文章能够帮你解决C/C++传递在编译行上带参数的宏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1218381.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存