包含文件的正确/推荐方法是什么?我在收录时遇到了麻烦(VS2005编译器......)。
我知道正确的方法是这样的:
#include "source.cpp"
或者这个:
#include <source.cpp>
# include "source.cpp"
可能会导致问题(#后添加空格)吗?我的一些队友使用这种方式,我们遇到了一个未解决的问题。
包含源文件的重点是我正在开发和IDE,它不允许在其编辑器中定义函数,因为它们将成为当地的职能。
答案 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和horizontal-tab(包括已替换注释或可能是其他的空格) 翻译阶段的空白字符3)。
SELECT SUM(Amount * InPrice) AS TotalItemsOrdered
FROM tblMaterial
INNER JOIN tblTask
ON tblMaterial.OwnerId = tblTask.Id
和#
/ "filename"
都是预处理令牌,因此您可以根据需要在它们之间添加任意数量的空格。