正确的#include指令格式

时间:2015-09-29 07:45:08

标签: c++ include c-preprocessor

包含文件的正确/推荐方法是什么?我在收录时遇到了麻烦(VS2005编译器......)。

我知道正确的方法是这样的:

#include "source.cpp"

或者这个:

#include <source.cpp>

# include "source.cpp"可能会导致问题(#后添加空格)吗?我的一些队友使用这种方式,我们遇到了一个未解决的问题。

包含源文件的重点是我正在开发和IDE,它不允许在其编辑器中定义函数,因为它们将成为当地的职能。

4 个答案:

答案 0 :(得分:3)

OtherType

这些是正确的(即使不推荐,空间也不会导致任何问题),请参阅此帖子:Include .cpp file?

在某些时候,我已经在我的代码中包含.cpp文件,以执行某种其他代码的静态导入。但这绝对不推荐,因为它会导致很多问题。例如,如果同一个cpp文件被包含两次,那么该文件创建的#include "source.cpp" # include "source.cpp" 个对象也将被创建两次......所以它们不应该像它们应该的那样static。此外,编译器可能会丢失,因为某些函数定义了两次......

答案 1 :(得分:2)

回答你的问题:不,这个空间不会引起问题。在引入预处理指令和指令名称的#之间使用空格(空格和制表符)是完全合法的。 VS2005具有足够的现代性来纪念它。

然而,非常奇怪的是,您显然包含源文件.cpp)而不仅仅是头文件。虽然技术上没有什么不妥,但很可能不是你真正想做的事情。您没有指定要获得的错误,但双重定义错误将是包含源文件(并单独编译)导致的典型错误类。

答案 2 :(得分:2)

根据GCC手册中的C preprocessor documentation,您可以在预处理指令中使用#之后的空格(例如#include):

  

预处理指令是程序中以行为开头的行   ##后跟一个作为指令名称的标识符。   例如,#define是定义宏的指令。   在'#'之前和之后也允许空格。

因此,在您的情况下,空间肯定不是问题,并且以下所有内容都是正确的:# include <file.h>#include <file.h># include <file.cpp>#include <file.cpp>,但你应该避免使用最后两个并始终包含头文件

话虽如此,我建议你不要在#之后使用任何空格 - 你的代码会更具可读性,因为#include几乎所有时间都使用的是什么,以及许多代码格式化程序将格式化您的代码。

C ++标准也就此问题说明了相同内容,请参阅:16.3 Macro replacement [cpp.replace]

答案 3 :(得分:1)

该标准为预处理程序指令(16/4)中的空格指定了以下规则:

  

预处理中唯一出现预处理标记的空白字符   指令(从介绍之后开始   #   在终止换行之前预处理令牌   character)是space和horizo​​ntal-tab(包括已替换注释或可能是其他的空格)   翻译阶段的空白字符3)。

SELECT SUM(Amount * InPrice) AS TotalItemsOrdered FROM tblMaterial INNER JOIN tblTask ON tblMaterial.OwnerId = tblTask.Id # / "filename"都是预处理令牌,因此您可以根据需要在它们之间添加任意数量的空格。