【发布时间】:2020-07-31 09:56:40
【问题描述】:
我隐约记得 GCC 有一个扩展程序可以让您编写如下内容:
total += { if ( b == answerb ) {
printf( "b = %d (correct)\n", b );
return 1;
} else {
printf( "b = %d (incorrect, answer was %d)\n", b, answerb );
return 0;
};
外部大括号内的代码将运行,返回值分配给total。
这存在(如果确实存在的话)的主要目的是您可以在类似于内联函数的宏中编写 = 右侧的代码,但也允许您使用符号进行预处理器技巧,例如就像在宏参数上使用 # 和 ## 从宏参数构造变量名和字符串一样,这是内联函数无法做到的:
#define SCORE( test, correct ) \
{ if ( test == correct ) { \
printf( #test "= %d (correct)\n", test ); \
return 1; \
} else { \
printf( #test " = %d (incorrect, answer was %d)\n", test, correct ); \
return 0; \
};
total = 0;
total += SCORE( a, answera );
total += SCORE( b, answerb );
这真的存在吗?如果是这样,它叫什么,所以我可以进一步研究它?它是如何工作的?它是 C/C++ 标准的一部分吗?
【问题讨论】:
标签: gcc macros gcc-extensions