This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Multiple declaration of the same variable

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

Parents
  • "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!

Reply
  • "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!

Children