By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,494 Members | 976 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,494 IT Pros & Developers. It's quick & easy.

This is a wrong code.I just want to know how it affect the compiler,becausethe error message is quite strange.

P: n/a

today I forgot to include some header,then I found the error message by the compiler is quite strange.

so I want to know exactly the inner details of the compiler impletation,if possible.

and I want to know what does the standard say about this situation.
here is the code just to demonstrate the error.
int main()
{
new int; // this is OK
new someClass; // yeah,I know this is wrong because someClass is not declared.

return 0;
}

the Visual C++ 6.0 compiler said:

D:\test1\test1.cpp(12) : error C2061: syntax error : identifier 'someClass'
D:\test1\test1.cpp(15) : error C2143: syntax error : missing ';' before '}'
D:\test1\test1.cpp(15) : error C2143: syntax error : missing ';' before '}'
....
D:\test1\test1.cpp(15) : fatal error C1003: error count exceeds 100; stopping compilation
where the "..." represent 97 messages of "error C2143: syntax error : missing ';' before '}' "

so I guess something made the compiler drop into a infinitive recursion .

but I dont know why.

please tell me if you just know the reason.

if you dont have time,just ignore this.

thanks very much.
Oct 18 '08 #1
Share this Question
Share on Google+
8 Replies


P: n/a
On 2008-10-18 16:17, 书呆* wrote:
today I forgot to include some header,then I found the error message by the compiler is quite strange.

so I want to know exactly the inner details of the compiler impletation,if possible.

and I want to know what does the standard say about this situation.
here is the code just to demonstrate the error.
int main()
{
new int; // this is OK
new someClass; // yeah,I know this is wrong because someClass is not declared.

return 0;
}

the Visual C++ 6.0 compiler said:

D:\test1\test1.cpp(12) : error C2061: syntax error : identifier 'someClass'
D:\test1\test1.cpp(15) : error C2143: syntax error : missing ';' before '}'
D:\test1\test1.cpp(15) : error C2143: syntax error : missing ';' before '}'
...
D:\test1\test1.cpp(15) : fatal error C1003: error count exceeds 100; stopping compilation
where the "..." represent 97 messages of "error C2143: syntax error : missing ';' before '}' "

so I guess something made the compiler drop into a infinitive recursion .

but I dont know why.
Because VC++ 6 is old and buggy and I would not use unless I had no
other choice. A more recent version of the compiler only emits one error
message.

--
Erik Wikström
Oct 18 '08 #2

P: n/a
Erik Wikström 写道:

Because VC++ 6 is old and buggy and I would not use unless I had no
other choice. A more recent version of the compiler only emits one error
message.
Then is that message " error C2143: syntax error : missing ';' before '}'"

Oct 18 '08 #3

P: n/a
On 2008-10-18 17:47, 书呆* wrote:
Erik Wikström 写道:
>>
Because VC++ 6 is old and buggy and I would not use unless I had no
other choice. A more recent version of the compiler only emits one error
message.

Then is that message " error C2143: syntax error : missing ';' before '}' "
As a rule, you can only trust the first error message a compiler (any
compiler) emits, all after might be the result of the compiler being
thrown of by the first error.

--
Erik Wikström
Oct 18 '08 #4

P: n/a
Erik Wikström 写道:
On 2008-10-18 17:47, 书呆* wrote:
>Erik Wikström 写道:
>>Because VC++ 6 is old and buggy and I would not use unless I had no
other choice. A more recent version of the compiler only emits one error
message.
Then is that message " error C2143: syntax error : missing ';' before '}' "
As a rule, you can only trust the first error message a compiler (any
compiler) emits, all after might be the result of the compiler being
thrown of by the first error.
I very appreciate your help.
I got it.
Thank you again.
Oct 18 '08 #5

P: n/a
Erik Wikström wrote:
As a rule, you can only trust the first error message a compiler (any
compiler) emits, all after might be the result of the compiler being
thrown of by the first error.
Which raises the question: Why do compilers bother with the rest of
the errors? Why not just stop with the first error?
Oct 19 '08 #6

P: n/a
On 2008-10-19 12:04, Juha Nieminen wrote:
Erik Wikström wrote:
>As a rule, you can only trust the first error message a compiler (any
compiler) emits, all after might be the result of the compiler being
thrown of by the first error.

Which raises the question: Why do compilers bother with the rest of
the errors? Why not just stop with the first error?
Because sometimes they are reliable and fixing more than one error
between recompiles is nice. After using a compiler for some time you can
generally tell which errors are due to earlier errors and which are
genuine errors.

--
Erik Wikström
Oct 19 '08 #7

P: n/a
On Oct 19, 12:26*pm, Erik Wikstrm <Erik-wikst...@telia.comwrote:
On 2008-10-19 12:04, Juha Nieminen wrote:
Erik Wikstrm wrote:
As a rule, you can only trust the first error message a
compiler (any compiler) emits, all after might be the
result of the compiler being thrown of by the first error.
Which raises the question: Why do compilers bother with the
rest of the errors? Why not just stop with the first error?
Would you use such a compiler?
Because sometimes they are reliable and fixing more than one
error between recompiles is nice. After using a compiler for
some time you can generally tell which errors are due to
earlier errors and which are genuine errors.
Resynchronizing after an error is one of the most difficult
things in compiler construction; you want to absorb (and throw
out) enough input to avoid follow-up errors, but you don't want
to miss any real errors after the detected error. In this case,
the compiler was obviously not throwing out enough, keeping both
the partially parsed new expression, and the next token. In the
end, the only thing that stopped it was a hard wired maximum
number of errors. (Most compilers do this as well, as a safety
net. After all, what's the use of going on if the actual error
was that you fed an Ada program to the C++ compiler?)

--
James Kanze (GABI Software) email:ja*********@gmail.com
Conseils en informatique oriente objet/
Beratung in objektorientierter Datenverarbeitung
9 place Smard, 78210 St.-Cyr-l'cole, France, +33 (0)1 30 23 00 34
Oct 19 '08 #8

P: n/a
James Kanze wrote:
On Oct 19, 12:26 pm, Erik Wikstrm <Erik-wikst...@telia.comwrote:
>On 2008-10-19 12:04, Juha Nieminen wrote:
>>Erik Wikstrm wrote:
As a rule, you can only trust the first error message a
compiler (any compiler) emits, all after might be the
result of the compiler being thrown of by the first error.
>>Which raises the question: Why do compilers bother with the
rest of the errors? Why not just stop with the first error?

Would you use such a compiler?
>Because sometimes they are reliable and fixing more than one
error between recompiles is nice. After using a compiler for
some time you can generally tell which errors are due to
earlier errors and which are genuine errors.

Resynchronizing after an error is one of the most difficult
things in compiler construction; you want to absorb (and throw
out) enough input to avoid follow-up errors, but you don't want
to miss any real errors after the detected error. [...]
Well, probably even more important, you don't want to miss a
closing brace or parenthesis.

Schobi
Oct 20 '08 #9

This discussion thread is closed

Replies have been disabled for this discussion.