Fab*_*cio 2 c compiler-construction
我有这个功能
TOKENP scan_line() {
TOKENP cur, last = 0;
while(cur = scan_opd())
last = cur;
if (cur = scan_comm())
#if ENABLE_COMMENT_AS_TOKEN
add_token(cur);
#endif
return last;
}
Run Code Online (Sandbox Code Playgroud)
如果#if指令为false,则将其编译为
if (cur = scan_comm())
return last;
Run Code Online (Sandbox Code Playgroud)
要么
if (cur = scan_comm());
return last;
Run Code Online (Sandbox Code Playgroud)
?
它将被编译,就好像禁用的行不存在一样,所以:
if (cur = scan_comm())
return last;
Run Code Online (Sandbox Code Playgroud)
您应该使用大括号来明确您的意思.
if (cur = scan_comm())
{
#if ENABLE_COMMENT_AS_TOKEN
add_token(cur);
#endif
}
return last;
Run Code Online (Sandbox Code Playgroud)