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. Advertisements

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

  3. Erik Wikström 写é“:
    Then is that message " error C2143: syntax error : missing ';' before '}' "
     
    书呆彭, Oct 18, 2008
    #3
  4. 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, 2008
    #4
  5. Erik Wikström 写é“:
    I very appreciate your help.
    I got it.
    Thank you again.
     
    书呆彭, Oct 18, 2008
    #5
  6. 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. 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, 2008
    #7
  8. Êé´ôÅí

    James Kanze Guest

    [/QUOTE]

    Would you use such a compiler?
    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, Oct 19, 2008
    #8
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.