关于C++预处理器的几个问题: C++预处理器的几个问题: 如何使预处理器进入预处理代码的新行? 如何使预处理器在预处理代码中插入制表符或多个空格? 如何使预处理器在预处理代码中插入注释?

关于C++预处理器的几个问题: C++预处理器的几个问题: 如何使预处理器进入预处理代码的新行? 如何使预处理器在预处理代码中插入制表符或多个空格? 如何使预处理器在预处理代码中插入注释?,c++,c-preprocessor,C++,C Preprocessor,关于3,从代码中删除注释是预处理器的责任,我认为不允许将它们留在代码中。无论如何,这将是一个特定于你正在使用的C++编译器的标志,所以你应该指定你的环境。 如何使预处理器进入预处理代码的新行 为什么? 如何使预处理器在预处理代码中插入制表符或多个空格 为什么? 如何使预处理器在预处理代码中插入注释 为什么? 预处理器是一个预处理器,它在代码转换为机器代码之前运行。要添加的空格和注释对应用程序的输出没有影响 如果您试图控制gcc-E或类似的输出,那么您就找错了方向。您做错了。。。预处理器不是为了这

关于3,从代码中删除注释是预处理器的责任,我认为不允许将它们留在代码中。无论如何,这将是一个特定于你正在使用的C++编译器的标志,所以你应该指定你的环境。 如何使预处理器进入预处理代码的新行

为什么?

如何使预处理器在预处理代码中插入制表符或多个空格

为什么?

如何使预处理器在预处理代码中插入注释

为什么?

预处理器是一个预处理器,它在代码转换为机器代码之前运行。要添加的空格和注释对应用程序的输出没有影响


如果您试图控制gcc-E或类似的输出,那么您就找错了方向。

您做错了。。。预处理器不是为了这个目的。

问题2和3没有多大意义,正如其他人所概述的那样

关于问题1,我假设您的意思是多行宏,可以这样做:

#define FOO line 1 \
    line 2  \
    line 3  \
    ...     \
    line n

请注意最后一行缺少\项

1正如蒂姆指出的那样,使用反斜杠

我认为你做不到

三,

编辑

2注意事项

1并不是在所有编译器中都有效


2不要这样做,这很愚蠢。

我不知道,但我看到了3个问题。这些问题没有意义。例如,为什么要插入注释?这不是答案。它属于注释,不是为了语法,我们的宏在GCC4.1.1中不起作用。而且,我想,在许多其他环境中,在VS2010中,它们只能半工作——宏实际上变成了注释,但它们被预处理器去除了。因此,实际上没有插入任何内容,这违背了整个邪恶混乱的目的。但是,至少宏不会在那里导致错误。事实上,它在GCC中不起作用是GCC的问题。标准中没有规定不应该这样做的理由。它在VS2010中确实有效如果你设置keep comments标志,它只会导致一个源文件不可编译,因为它在预处理后仍然有注释。但是,如果您获取预处理器的输出,然后再次编译它,它就会工作。我一开始看不出这整个邪恶的混乱有什么目的,所以我不知道这个目的怎么会被打败。皮格本,它也失败了,这让我很警惕。十年来,我在Comeau发现了一个bug,但在VC中却发现了几十个。@PigBen:标准中没有定义为什么应该这样做的理由。即使你找到了一个,至少有两个流行的编译器被它卡住了,不管它是否标准,它都是无用的。
#define COMMENT /##/ this is a comment
#define CPPCOMMENT(c) /##/ c
#define CCOMMENT(c) /##* c *##/

COMMENT
CPPCOMMENT(This is a c++ comment)
CCOMMENT(This is a c comment)