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

Discussion in 'C++' started by Êé´ôÅí, Oct 18, 2008.

  1. Êé´ôÅí

    Êé´ôÅí Guest

    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, 2008
    #1
    1. Advertising

  2. 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
     
    Erik Wikström, Oct 18, 2008
    #2
    1. Advertising

  3. 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, 2008
    #3
  4. 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
     
    Erik Wikström, Oct 18, 2008
    #4
  5. 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, 2008
    #5
  6. 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?
     
    Juha Nieminen, Oct 19, 2008
    #6
  7. 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
     
    Erik Wikström, Oct 19, 2008
    #7
  8. Êé´ôÅí

    James Kanze Guest

    Re: This is a wrong code.I just want to know how it affect thecompiler,because the error message is quite strange.

    On Oct 19, 12:26 pm, Erik Wikström <> wrote:
    > 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?


    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:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Oct 19, 2008
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Yan
    Replies:
    0
    Views:
    1,152
  2. Ram
    Replies:
    0
    Views:
    2,876
  3. Peter

    Re: just want to know

    Peter, Jun 25, 2003, in forum: C Programming
    Replies:
    1
    Views:
    660
    Alan Balmer
    Jun 25, 2003
  4. spudnik
    Replies:
    0
    Views:
    259
    spudnik
    Jul 22, 2010
  5. Simon Egginton

    LOOK! i just want to know does anyone know...

    Simon Egginton, Jul 26, 2004, in forum: Javascript
    Replies:
    3
    Views:
    183
    Dr John Stockton
    Jul 26, 2004
Loading...

Share This Page