当一行中只有一个`#`,且没有其他内容时,C++预处理器会做什么?

12 浏览
0 Comments

当一行中只有一个`#`,且没有其他内容时,C++预处理器会做什么?

这是一行有效的C++代码吗?它应该表示什么意思?\n

#

\n那么这一行呢?\n

# // a comment

\n最近的编译器似乎会在没有错误或警告的情况下忽略它。\n它是“什么都不做”吗?我有一个头文件,在使用g++ 7.4.0编译时,当存在这样的行时,其中的“兼容性”部分会出错。它似乎不会影响那些在非活动的#if分支中排除这行的编译器。\n注意:Debian Bionic上的gcc 7.4.0(截至本篇写作)在Travis CI上会因为这样的行而出错。

0
0 Comments

C++预处理器在一行中只有一个`#`时会做什么——什么都不做?

对于这个问题的出现原因,我们可以从给出的内容中整理出以下几个要点:

1. 在C++中,预处理器是在编译之前对代码进行处理的一部分,它可以执行一些指令、宏替换等操作。

2. 在C++中,代码被分为多个翻译阶段,其中第三阶段是注释的删除阶段,第四阶段是预处理指令的执行阶段。

3. 当一行中只有一个`#`时,它被认为是一个预处理指令,被称为“空指令”。

4. 根据C++标准规定,空指令没有任何效果,即不执行任何操作。

5. 在给定的例子中,注释首先在翻译阶段3中被删除,然后在阶段4中执行空指令,但是由于空指令没有任何效果,所以最终什么都不会发生。

基于以上要点,我们可以得出以下解决方法:

1. 对于这种情况,不需要进行任何特殊处理,因为空指令不会影响代码的执行或结果。

2. 只要代码符合C++标准,任何一个符合标准的实现都应该接受这样的代码。

当一行中只有一个`#`时,C++预处理器不会做任何操作,这是符合C++标准的行为,不需要进行特殊处理。

代码示例:

#

这段代码是有效的,并且应该被符合标准的编译器接受。

0