[an error occurred while processing this directive]
Node:C++ comments,
Next:Which language,
Previous:Missing C++ headers,
Up:Compiling
Q: My C program compiles OK with Borland's C, but GCC complains
about "parse error before `/' " at a line where I have a "//"-style
comment.
A: That's because // isn't a comment neither in ANSI C nor in K&R C.
Borland and Microsoft C compilers support it as an extension. GCC also
supports this extension (beginning with version 2.7.0), but using the
-ansi or -traditional switches to GCC disables this
extension. In general, it's a bad practice to use this extension in a
portable program until such time as the ANSI C standard includes it. If
it's a C++ program, then rename it to have a suffix which will cause gcc
to compile it as such (see list of language-specific suffixes), or use -x
c++ switch. If it's a C program, but you want to compile it as C++
anyway, try -x c++; it can help, but can also get you in more
trouble, because C++ has its own rules. For example, the following
program will print 10 if compiled as a C program, but 5 if compiled as
C++14:
#include <stdio.h>
int
main ()
{
printf ("%d \n", 10 //*
/ 2 // */ 1
);
return 0;
}
If you must have both -ansi and C++-style comments, use
-lang-c-c++-comments preprocessor switch. Gcc doesn't accept
the -lang-XXX switches on its command line, so you will have to
use the -Wp option, like this:
gcc -c -Wp,-lang-c-c++-comments myprog.c
Alternatively, you can add -lang-c-c++-comments to the *cpp:
section of your lib/specs file (but that will cause gcc to
pass it to cpp unconditionally).
Bottom line: until the future ANSI/ISO C standard includes this as part
of the C language, it's best to change those // comments to
C-style ones, if you really mean to write a C program. The following
SED command will convert a C program with C++-style comments
into a valid C source, provided you don't have the string "//" in a
character string:
sed "s?//\(.*\)?/*\1 */?" file.c > newfile.c
SED can be found with the DJGPP archives on SimTel.NET, in the
v2gnu directory.
If you want the compiler to print a warning message about usage of
//-style comments in a C program, add the -ansi
-pedantic options to the GCC command line. If you don't want to use
-ansi for some reason (e.g., because it rejects some other code
that you want to keep), try using -Wp,-lang-c89 instead; this
tells the preprocessor to stick to the rules of the C89 standard.