C++ name mangling in C

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux