This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
C++ name mangling in C
- From: daniel at poradnik-webmastera dot com
- To: gcc-help at gcc dot gnu dot org
- Date: Sat, 09 Aug 2014 21:50:57 +0200
- Subject: C++ name mangling in C
- Authentication-results: sourceware.org; auth=none
Hi,
C language does not use name mangling like C++. This can lead to
subtle bugs, when function prototype is declared differently in
different files. Simple example:
/* file1.c */
int test(int x, int y)
{
return y;
}
/* file2.c */
#include <stdio.h>
extern int test(int x);
int main()
{
int n = test(2);
printf("n = %d\n", n);
return 0;
}
When this code is compiled using C++ compiler, such error will be
reported at linking phase as "undefined reference to 'test(int)'".
Unfortunately in C compilation and linking will succeed, so bug will
appear at runtime. But such bugs may be very hard to find.
My code base is too big to clean up all this mess and move
declarations to header files manually in relatively short time.
Therefore I was looking for a way to detect such bugs with some tool.
I thought about forcing C++ mangling when compiling C code, but looks
that gcc does not have any command line option to this. Please correct
me if I am wrong.
If there is no such option, I would like to open an enhancement to add
it. I thought about it for some time and looks that this new option
should do 3 things: enable C++ name mangling, enable extern "C"
directive and define the __cplusplus macro. Any comments on this
proposal is also welcome.
Regards,
Daniel