Visual Studio 2008没有捕获语法错误。例如:Tpc_feed(void);
编译好。
这个:Tpc_feed(void);;;;;;;
编译得很好,但这个Tpc_feed(void)
会发现错误。额外的分号是不是语法错误?我使用的是Windows 7 32位和VS C ++ 2008
答案 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
这个例子有点奇怪,因为我现在正在制作它,但它应该代表接受更多分号为有效的背后的想法。