【发布时间】:2010-12-18 13:39:51
【问题描述】:
我正在尝试做一些在概念上与此类似的事情,但似乎无法让它发挥作用(最后显示错误)任何想法?
#include <stdio.h>
int main( int argc , char const *argv[] )
{
int abc_def_ghi = 42;
#define SUFFIX ghi
#define VAR(prefix) prefix##_def_##SUFFIX
printf( "%d\n" , VAR(abc) );
return 0;
}
// untitled:8: error: ‘abc_def_SUFFIX’ undeclared (first use in this function)
【问题讨论】:
-
const argv?我第一次看到这样的事情!这个想法看起来不错,但我不确定我是否喜欢它:它使main不符合标准并阻止我做我从未做过的事情;) -
这不是不合格的。
argv可以声明为等同于char* argv[](C99 5.1.2.2.1),并且添加const不会改变任何东西,除了main()允许使用它(没有演员表) .请记住,指向非 const 的指针可以转换为指向 const 的指针,这没有问题 - 直到这些指针的值比较相等(6.3.2.3/2)。 -
好的,谢谢迈克尔。反过来(删除
const)会使其不符合要求。我开始喜欢它了! -
嗨,抱歉打扰了,我应该把它拿出来的。使用 TextMate 时,键入 main 后跟 tab 会为 main 方法填充一个脚手架,这就是它的一部分。
标签: c macros token c-preprocessor stringification