【发布时间】:2019-03-06 18:09:26
【问题描述】:
我想创建这个...
int main(void) {
int i;
for(i = 0; i < 10; i++){
//Not an important Code
}
return 0;
}
以更奇特的方式,创造疯狂的想法!
可以这样改写吗?
#define A f
#define B or
int main(void) {
int i;
AB(i = 0; i < 10; i++){
//Not an important Code
}
return 0;
}
我需要知道是否可以创建类似由不同 #defines
组成的简单 for 的指令【问题讨论】:
-
算了。尝试对关键字进行懒惰的实现是徒劳的,并且会使您发明的代码难以阅读。
-
避免预处理魔法;它使代码不可读。您可以将宏替换文本中的标记与
##—#define C(a, b) a ## b连接起来,然后C(A, B)或多或少会做你想做的事;您只需在连接之前评估表达式:#define E(a) a—#define C(a, b) E(a) ## E(b)和C(A,B)。但这很令人反感,尤其是对于拆分关键字。 -
@JonathanLeffler 我尝试了你的想法,但它对我不起作用。 Gcc 响应:粘贴 ")" 和 "E" 没有给出有效的预处理标记 #define C(a, b) E(a)##E(b)
-
好的;如您所知,我没有测试它。这是可行的(通过宏定义的标记的串联);有关于如何做到这一点的答案(有些是我过去写的)。这不是一个好主意 - 这是带回家的。 (工作宏集:
#define A f——#define B or——#define E(a, b) a ## b——#define C(a, b) E(a, b)——``——C(A,B)——输出,for。) -
@JonathanLeffler 你能提供链接吗? :)
标签: c compilation macros preprocessor