我刚学会了X-Macros.您看过X-Macros的实际用途?他们什么时候成为工作的合适工具?
浏览Linux内核源代码时,我发现了一段代码,其中括号括起来的语句块被视为表达式a laisp(或ML),即表达式,其值是最后一个语句的值.
例如:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
Run Code Online (Sandbox Code Playgroud)
我一直在研究ANSI C语法,试图弄清楚这段代码如何适合解析树,但我还没有成功.
那么,有没有人知道这种行为是由标准规定还是只是GCC的特殊性?
更新:我已尝试使用标志-pedantic,编译器现在给我一个警告:
warning: ISO C forbids braced-groups within expressions
Run Code Online (Sandbox Code Playgroud) 赫伯特希尔特说:
在某些情况下,应使用实函数代替类函数宏,例如:其中代码大小要最小化,或者参数不能多次评估.
他的意思是"一个论点不能被评估多次?"