如何确保文件仅在构建中处理一次

时间:2017-10-25 14:06:40

标签: c++

如果在构建中多次处理源文件,是否有办法抛出错误?我知道你可以使用#pragma once#ifndef类型的东西但只保护它不被包含在一个编译单元中一次。我想确保它在整个构建中只包含/编译一次,在Visual Studio的解决方案中有多个项目。

我知道普通的.cpp文件通常只处理一次。但是如果其他文件#include是.cpp文件,它可以被多次处理(我知道这不是典型的,但它最好地解释了这种情况)。所以,我试图防止意外的多重包含文件。

2 个答案:

答案 0 :(得分:0)

  

所以,我试图防止意外的多重包含文件。

至少您的链接器会抛出有关ODR规则违规的错误消息,不用担心。

  

但如果其他文件#included .cpp文件,则可以多次处理

是的,它会被多次处理,并提供多个定义,这些定义分布在不能再链接在一起的翻译单元上。

答案 1 :(得分:0)

使用 COUNTER 宏怎么样?不确定跨项目的行为

#if __COUNTER__ > 0
#error I was there already
#endif