该文件被编译两次了吗?

c++ compilation

84 观看

2回复

48 作者的声誉

假设#include <something.h>包含在A.cpp和B.cpp中

如果我在A.cpp中运行某些功能“ A”,在主B.cpp中运行功能“ B”,

“ something.h”是否已编译两次?还是一次?

作者: mathcom 的来源 发布者: 2017 年 9 月 15 日

回应 2


-1

197 作者的声誉

由于它是标头,因此不会“编译”。它包含在您的代码中。

为了避免出现一些尴尬的情况,您必须像这样保护标题:

#ifndef SOMETHING_H_
#define SOMETHING_H_

/* your code goes here */

#endif /* something.h */
作者: cydef 发布者: 2017 年 9 月 15 日

0

185396 作者的声誉

错误的问题。从技术上讲,编译的不是源文件,而是翻译单元

阅读更多有关C ++的书籍以及一些参考站点。

另请阅读有关各个编译阶段的更多信息,其中包括预处理

因此,假设您的编译器是Linux 上的GCC,则可以使用以下命令编译A.cpp源文件(还包括其中使用的标头,即翻译单元)

 g++ -Wall -Wextra -g -c A.cpp -o A.o

在其中-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 点处包括标头的预处理形式

作者: Basile Starynkevitch 发布者: 2017 年 9 月 15 日
32x32