Thread: gcc 10.2.0 behavior View Single Post
2020-12-08, 23:04   #3
bsquared

"Ben"
Feb 2007

22·23·37 Posts

Quote:
 Originally Posted by Nick I tend to program defensively and avoid C's concept of "tentative definitions". If a variable declaration initializes the variable then the compiler must regard it as a definition. If a variable declaration says "extern" instead then the compiler must view it as merely a declaration (or have they changed the rules again?)
I would think that has remained the same, but I don't keep up to date on these things.

For clarity, here is an example of what I'm talking about.

Code:
#ifndef HEADER1_H

/* defines */

/* typedefs */

/* function declarations */

/* globals */
int foo;
int bar;

#endif
Now, if two source files, say main.c and worker.c both #include header1.h, only one set of the globals should be defined. At least, that is how it has worked up to gcc 10.2.0.

If I have to update everything using externs to declare the globals and then define them once (probably in main.c), then so be it, but if there is a cheaper, hackier way to do what I want (compile the program as-is) then I'd like to at least consider it.