在C中,为什么我初始化为0 int变量被"nm"报告为未初始化?

Shi*_*gon 9 c variables initialization nm

我有以下C代码:

   //declared at the beginning of the CAStar.c file:
    int TERRAIN_PASSABLE = 1;
    int TERRAIN_IMPASSABLE = 0;
    int TERRAIN_SOME_WHAT_PASSABLE = 2;
Run Code Online (Sandbox Code Playgroud)

我注意到,对于这些变量中的任何一个,如果它们具有非零值,则"nm"命令将它们报告为类型"D"(初始化):

_TERRAIN_PASSABLE          |00000008|   D  |
_TERRAIN_SOME_WHAT_PASSABLE|00000004|   D  |
Run Code Online (Sandbox Code Playgroud)

但是,初始化为0的那些报告为"B"(未初始化):

_TERRAIN_IMPASSABLE        |00000000|   B  |
Run Code Online (Sandbox Code Playgroud)

为什么"初始化为0"和"用0以外的其他东西初始化"之间的区别?

cod*_*ior 5

这或多或少是关于BSS如何工作以及如何使用它.B表示变量将被放置在BSS部分(你是对的,它是未初始化的数据部分).D表示符号位于初始化数据部分.

例如读取文章了解更多一点关于BSS如何工作,以及它的用途.