开发者

Visual studio 2008 not catching a syntax error

开发者 https://www.devze.com 2023-01-12 21:32 出处:网络
Visual studio 2008 isn\'t catching syntax errors. for example: Tpc_feed(void); compiles fine. this: Tpc_feed(void);;;;;;; compiles fine, but this Tpc_feed(void) catches an error. Are the extra semi-co

Visual studio 2008 isn't catching syntax errors. for example: Tpc_feed(void); compiles fine. this: Tpc_feed(void);;;;;;; compiles fine, but this Tpc_feed(void) catches an error. Are the extra semi-colons not synta开发者_运维百科x errors? I'm on Windows 7 32 bit and VS C++ 2008


Technically, it's a syntax error, but most compilers allow it anyway. GCC even allows it by default unless you compile with -pedantic.

In any case, it's against the standard so you should get rid of the extras.


Without a return type, none of them should compile as C++. Assuming a return type is added, the extra semicolons are allowed on member function declarations, but if the declarations are outside a class/struct they're prohibited.

I don't believe VC++ has a flag to force them to be flagged as errors.

Edit: Actually (going back and re-checking things), an unnecessary semi-colon is allowed following a member function definition, but I think you're right, and it's not allowed following a member function declaration.


As others have already said, it's not a valid C++. The reason why many compilers support it anyway is that it makes creating macros a bit easier/more intuitive, consider this:

// 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

This example is somewhat weird as I made it up right now but it should represent the idea behind accepting more semicolons as valid.

0

精彩评论

暂无评论...
验证码 换一张
取 消