For example:
code1.c / .cpp
int a; // ... and so on
code2.c / .cpp
int a; int main(void) { return 0; }
go to compile:
$gcc code1.c code2.c # this is fine $ $g++ code1.cpp code2.cpp # this is dead /tmp/ccLY66HQ.o:(.bss+0x0): multiple definition of `a' /tmp/ccnIOmPC.o:(.bss+0x0): first defined here collect2: ld returned 1 exit status
Is there any global variable linkage difference between C & C++?
It's not strictly legal. int a;
is a tentative definition in C. You are allowed multiple tentative definitions and at most one non-tentative definition per translation unit of each object with external linkage in C, but only one definition across all translation units in a program.
It is a commonly implemented extension to allow tentative definitions across multiple translation units in C so long as not more than one translation unit contains a non-tentative definition, but it's not strictly standard.
In C++ int a;
is just a definition - there's no concept of tentative - and it's still illegal to have multiple definitions of an object across the translation units of a program.
For the C case, you may wish to look at this question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With