TheFuzz
TheFuzz

Reputation: 2623

Visual studio 2008 not catching a syntax error

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 syntax errors? I'm on Windows 7 32 bit and VS C++ 2008

Upvotes: 1

Views: 289

Answers (3)

Jerry Coffin
Jerry Coffin

Reputation: 490278

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.

Upvotes: 1

Karel Petranek
Karel Petranek

Reputation: 15164

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.

Upvotes: 0

zildjohn01
zildjohn01

Reputation: 11515

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.

Upvotes: 7

Related Questions