使用预处理器宏插入单行注释

Ble*_*der 2 c macros gcc c-preprocessor

是否可以//使用预处理器宏(或魔术)模拟单行注释()?例如,这可以编译gcc -std=c99吗?

#define LINE_COMMENT() ???

int main() {
    LINE_COMMENT()  asd(*&#@)($*?><?><":}{)(@
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Leu*_*nko 5

不是.这是标准的摘录,显示了C程序的翻译阶段:

  1. 源文件被分解为预处理标记和空白字符序列(包括注释).源文件不应以部分预处理标记或部分注释结束.每个注释都被一个空格字符替换.保留换行符.是否保留或替换为新行以外的每个非空白字符序列是由实现定义的.

  2. 执行预处理指令,扩展宏调用,并_Pragma执行一元运算符表达式.如果通过标记连接(6.10.3.3)生成与通用字符名称的语法匹配的字符序列,则行为未定义.甲#include预处理指令导致从第1阶段至第4阶段处理指定的头或源文件,递归.然后删除所有预处理指令.

如您所见,扩展宏之前删除了注释,因此宏无法扩展为注释.

显然,您可以定义一个接受参数并扩展为空的宏,但它比注释稍微限制一些,因为它的参数必须只包含有效的cpp标记字符(例如,没有@或不匹配的引号).对于一般评论目的不是很有用.