I have the following C code:
//declared at the beginning of the CAStar.c file:
int TERRAIN_PASSABLE = 1;
int TERRAIN_IMPASSABLE = 0;
int TERRAIN_SOME_WHAT_PASSABLE = 2;
I've noticed that for any of these variables, if they have a non-zero value, they are reported by the "nm" command as type "D" (initialized):
_TERRAIN_PASSABLE |00000008| D |
_TERRAIN_SOME_WHAT_PASSABLE|00000004| D |
However, those initialized to 0 are reported as "B" (uninitialized):
_TERRAIN_IMPASSABLE |00000000| B |
Why the difference between "initialized with 0" and "initialized with something else but 0" ?
This is more or less about how BSS works and how it is used. B means that variable will be placed in BSS section (and you are right it is uninitialized data section). D means that the symbol is placed in initialized data section.
Read for example this article to know bit more about how BSS works and what it is used for.