加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:12:11 所属栏目:百科 来源:网络整理
导读:我想知道是否可以将在编译行上带参数的宏传递给 gcc或其他C/C++编译器. 我以前从未见过这个,但它实际上对于我一直在做的一些OpenCL开发很有用,我想用一个可以在编译时替换的宏替换一个函数名. 以下是一个例子: int y,x = 0;y = HASH(x); 如果可以在编译行上
我想知道是否可以将在编译行上带参数的宏传递给 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=%dn",y);
  return 0;
}

我写了上面的代码,我用以下代码编译:
gcc -O0 -DHASH = func1 -o test test.c

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读