Visual Studio 2008没有捕获语法错误

时间:2010-08-25 17:53:37

标签: visual-studio-2008 visual-c++ syntax

Visual Studio 2008没有捕获语法错误。例如:Tpc_feed(void);编译好。 这个:Tpc_feed(void);;;;;;;编译得很好,但这个Tpc_feed(void)会发现错误。额外的分号是不是语法错误?我使用的是Windows 7 32位和VS C ++ 2008

3 个答案:

答案 0 :(得分:7)

从技术上讲,这是一个语法错误,但无论如何大多数编译器都允许它。除非您使用-pedantic进行编译,否则GCC甚至会默认允许它。

无论如何,这是违反标准的,所以你应该摆脱额外的东西。

答案 1 :(得分:1)

没有返回类型,它们都不应该编译为C ++。假设添加了一个返回类型,成员函数声明中允许使用额外的分号,但如果声明在类/结构之外,则禁止它们。

我不相信VC ++有一个标志来强制它们被标记为错误。

编辑:实际上(返回并重新检查事物),在成员函数定义之后允许不必要的分号,但我认为你是对的,并且不允许跟随成员函数声明

答案 2 :(得分:0)

正如其他人已经说过的那样,它不是一个有效的C ++。无论如何,许多编译器支持它的原因是它使创建宏更容易/更直观,考虑到这一点:

// Declares a function, and because the semicolon belongs to the declaration, the macro adds it
#define MY_FUNCTION_DECL(returnType, arguments) returnType myFunction arguments;

// Calling macros looks like functions, the semicolon looks natural
MY_FUNCTION_DECL(void, (int, int, int));  // There are two semicolons now

这个例子有点奇怪,因为我现在正在制作它,但它应该代表接受更多分号为有效的背后的想法。