We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I builded a small project as follows:
============================= int a; int a; // Yes the same variable declared in the same way
main() { ...// anything } =============================
this project is successfully compiled. No warnings. Why ? What is really performed: 1. Only one variable. 2. Two variable occupying different memory but for further using only one is accessible.
How to check such a possible duplicate declaration in very large project with many files included if there is no warnings for this case?
(If Variable name is the same but declarations are different [int and char for an example] error occurs as expected)
This was tested on uVision 2.30 Keil C51 7.02
"I'm sure Mr. Smoked Sardine can answer whether it is correct by the C standard..."
It is - look up "tentative definitions".
This is the same effect that allows you to #include a header that declares a symbol in the same file that actually defines it; eg,
file.h
extern int my_global; // declarations int my_functions( int its_parameter );
file.c
#include "file.h" // declarations int my_global; // definition int my_functions( int its_parameter ) { // define body here... }
There is no problem that file.c effectively contains both the declarations and the definitions; in fact, it brings the positive benefit that the compiler can now warn you of any mismatch!
"Now, when using 'insignificant' names such as 'a' you will, of course, risk..."
Hopefully, it was purely for the sake of illustration...
PC-Lint will warn you about repeated declarations of this kind.
(Also with different messages if you change the type, or the storage class, or...)