[cfe-dev] Why this extern "C" fails ?

Renato Golin renato.golin at linaro.org
Mon Jul 29 07:52:17 PDT 2013


On 29 July 2013 14:56, Arji Cot <arjicot at gmail.com> wrote:

> --------------
>
> #include <iostream>
>
> int main() {
>   {
>     extern "C" { int a = 42; }
>     { std::cout << a << "\n"; }
>   }
>   return (0);
> }


Hi Arji,

As Olafur said, extern symbols should be in a global scope, and that "a"
couldn't even be seen from the next line, and you'd see another error from
the compiler if you removed the extern.


main.cpp:5:12: error: expected unqualified-id
>     extern "C" { int a = 42; }
>            ^
> 1 error generated.
>
> It's not enough to me to explain why this is not working.
>

Every compiler error assumes familiarity with the language, at least enough
to go and look at the definition of the terms involved in the error message
(extern "C" in this case) in a book, on the web or the standard, which
should give you enough information on how to fix the bug.

Compilers are famous for not giving enough information on error messages,
and Clang stands out as being one of the best on that side, but no compiler
will ever teach you the language via error messages.

One rule of thumb is to use a different compiler and see if it also gives
you an error, maybe a different error, or a better error message, or none
at all. If you find that other compilers can handle your code and Clang
cannot, maybe Clang is wrong (in which you should fill a bug), or maybe the
other compiler is wrong at accepting your code, (in which you should file a
bug in the other compiler). However, if the error is the same (which it is
in GCC), than there's little you can ask the Clang community to do
something.

As for learning C++, I suggest you buy Stroustroup's "The C++ Programming
Language", read it cover to cover, and have it as your faithful companion
for such cases, or use comp.lang.c++ for when you can't find the answer
yourself, but Clang's list is really not the place for that level of
discussion.

cheers,
--renato
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130729/970bb803/attachment.html>


More information about the cfe-dev mailing list