如果在文件末尾未关闭大括号,则引发编译错误(C ++)

时间:2016-02-23 07:52:28

标签: c++ visual-studio-2010 visual-c++ compiler-errors

如果C ++编译器在没有关闭所有大括号的情况下到达文件末尾,是否有办法引发警告或错误?我们从不使用将范围溢出到另一个文件中的标题,并且如果偶然发生,则希望收到编译器警告。编译器MSVC 2010,但其他人也可能会感兴趣。

// Utilities.hpp
namespace example
{

class Utilities
{
}

//<EOF> -> should warn or error

编辑:我愿意在每个文件的末尾添加一个marker / pragma / Macro,我知道大括号应为0。

2 个答案:

答案 0 :(得分:2)

合理的方法是

#define AT_GLOBAL_SCOPE namespace { }

因为它只能出现在全局或命名空间范围内。所以不幸的是,它不会从另一个命名空间中捕获那个丢失},但它会捕获类大小写,以及缺少括号和分号。

答案 1 :(得分:1)

原则上,编译器本身并不知道 - 预处理器与编译器完全分开,不同的文件是&#34;未知&#34;,它只是一个长流源代码,就编译器而言。

这里的一个问题是对源代码的理解&#34;在不同的层次上是不同的。将#include ...插入到源流中的预处理器除了&#34之外,其他方式并不真正了解{}的任何内容;它们不是字母数字&#34; [影响如何处理宏等)。并且考虑到你可以[即使它可能是一个坏主意]:

 #define START {
 #define END }

 start
   ... 
   ...
 end

(C预处理器可以用于除C代码之外的其他内容,因此它不是&#34;意味着&#34;了解它正在编译的语言)

我想你可以编写一个小工具来解析代码并只计算{并向下计算},并检查是否相等[你必须关心引号和注释,但其他一切应该算一算]。但是当然,编译器最终会以某种方式告诉你,所以我不确定它有多大用处。这假设宏中没有不均匀的大括号。