=========== Begin complete code =========== #include <stdio.h> static int y = -1234;
int main(void) { extern int y; printf("%d\n", y); return 0; } =========== End complete code =========== command line: gcc -W -Wall test.c Output: test.c:3: warning: 'y' defined but not used As you can see "y" is defined (in line 3), then declared in line 7 and used in line 8. The program also executes correctly. The use of an "extern" storage class specifier is a bit unusual but perfectly legal (See ISO/IEC 9899:1999 chapter 6.2.2, paragraph 4). If anything a warning about this slightly obscure construct might be in OK, but not about an unused variable. I would have liked to verify with a newer GCC version but haven't got any available here, sorry. -- Summary: Incorrect warning "defined but not used" Product: gcc Version: 3.4.4 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ahelm at gmx dot net GCC host triplet: i686-pc-cygwin GCC target triplet: i686-pc-cygwin http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40661