I have two C source code files; one file contains a declaration like the following:
volatile unsigned char flag=0;
The other C file contains a reference such as:
extern unsigned char flag;
Is this correct and safe, or should the volatile keyword be repeated whenever referencing the variable? i.e.
extern volatile unsigned char flag;
No, it's not correct.
All declarations of the same variable need to use the exact same type, and volatile is part of the type (extern is not)
A good practice for checking extern declarations is to put them in a header file that is also included in the compilation unit where the definition exists. Then the compiler will check them for correctness.
Notice what happens if you do that on this example.
prog.c:2:22: error: conflicting type qualifiers for ‘flag’ extern unsigned char flag; ^ prog.c:1:24: note: previous definition of ‘flag’ was here volatile unsigned char flag=0;
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