假设#include <something.h>
包含在A.cpp及B.cpp这个文件编译两次?
,如果我在A.cpp与功能“B”在B.cpp在主运行某些功能“A”,
是“ something.h“编译了两次?或一次?
假设#include <something.h>
包含在A.cpp及B.cpp这个文件编译两次?
,如果我在A.cpp与功能“B”在B.cpp在主运行某些功能“A”,
是“ something.h“编译了两次?或一次?
因为它是一个头,这不是“编译”。 它列为你的代码的一部分。
,避免一些尴尬的局面,你必须保护你的头是这样的:
#ifndef SOMETHING_H_
#define SOMETHING_H_
/* your code goes here */
#endif /* something.h */
错误的问题。什么是编译在技术上是一个源文件,而是一个translation unit。
阅读C++更加几本书,还有一些reference网站。
了解也更多有关各种compilation phases,其中包括preprocessing。
因此,假设你的编译器是GCC在Linux上,你将与
g++ -Wall -Wextra -g -c A.cpp -o A.o
编译A.cpp
源文件(也它使用的头,所以翻译单元),其中-Wall
要求几乎所有的警告, -Wextra
询问更多的人,-g
询问调试信息(在Linux DWARF格式),-c
要求仅用于编译,-o A.o
询问对象文件是A.o
你可以请编译器使用-H
选项显示每个包含的标题。
你可以使用
g++ -Wall -Wextra -g -C -E A.cpp > A.ii
那么你可以看看与寻呼机(或编辑)到生成A.ii
文件得到预处理形式。
当然预处理将包括一个报头的预处理形式在点是#include
-d
在'something.h'的代码在这种情况下被编译两次,是的。这听起来像一个XY问题 - 你有这个更大的问题吗? –