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
This is a C98 or C90 language 'feature' called tentative declaration.
"This is a C98 or C90 language 'feature' called tentative declaration."
Not quite: it's called a tentative Definition.
And it certainly pre-dates C90 - it's in my K&R of 1988, based on the Draft-Proposal of the ANSI standard.
You are correct, 'C98' was a typo, also for 'Definition'; quite a long time back.
Thanks to all, after your answers and internet searching, I realized that it is really the same as Tentative Definition.