在 C 语言中,如果声明了一个对象。例如,声明int x;
为自动变量。没有用任何值初始化它,它是否仍被视为声明而不是定义?
因为 ChatGPT 认为,当声明一个对象时,编译器有时会留出一些与其(对象)关联的内存。因此,这是一个隐含的定义。请仅在您完全确定 C 语义的情况下回答。
在 C 语言中,如果声明了一个对象。例如,声明int x;
为自动变量。没有用任何值初始化它,它是否仍被视为声明而不是定义?
因为 ChatGPT 认为,当声明一个对象时,编译器有时会留出一些与其(对象)关联的内存。因此,这是一个隐含的定义。请仅在您完全确定 C 语义的情况下回答。
像本例这样在文件范围中声明且没有初始化器的对象被视为临时定义。可能会出现其他相同的声明,每个声明也都是临时定义。
如果不存在定义(即具有初始化器的定义),则该暂定定义以及可能出现的任何其他定义都被视为初始化为 0 的该标识符的“完整”定义。
C 标准第 6.9.2p2 节对此进行了详细说明:
在块范围(即在函数主体中)的这种声明是该对象的唯一声明,同时也是一种定义,因为这种声明为该对象留出了存储空间。
所有定义也是声明,如第 6.7p5 节所述:
定义不仅声明了实体,还分配了内存(用于变量)或提供了实现(用于函数)。主要特点:
int x = 5;
)。extern int x;
int x = 42;
int x;
int add(int a, int b);
int add(int a, int b) { return a + b; }
int x;
文件和块范围内的声明和定义(文件范围内的暂定定义)也是如此。C 标准中多处提到了声明和定义: