在c中声明vs定义变量

这个问题在这里已经有了答案:

  • 定义和声明有什么区别? 25个答案

  • 编译器是否为已声明(但未定义)的变量留出内存?

    不,编译器只是记下这个变量的名称和类型。 没有内存分配给声明。

    int i; 可以像使用i (未优化)那样表现为定义,并且在其他编译单元中不存在其他i定义,并且将为其保留存储空间。 (因为存储是为定义保留的)


    定义是何时为变量分配存储空间。 声明并不意味着存储已分配。

    声明用于访问在不同源文件或库中定义的函数或变量。 定义类型和声明类型之间的不匹配会产生编译器错误。

    这里有一些不是定义的声明的例子,在C:

    extern char example1;
    extern int example2;
    void example3(void);
    

    从C标准(n1256):

    6.7声明
    ...
    5声明指定了一组标识符的解释和属性。

    标识符的定义是对该标识符的声明:
    - 对于一个对象,导致为该对象保留存储空间;
    - 对于功能,包括功能体; 101)
    - 对于枚举常量或typedef名称,是标识符的(唯一)声明。

    “编译器是否为已声明(但未定义)的变量留出了内存?”

    不。编译器仅为变量定义分配内存(而不是变量声明)。

    您可以使用简单的比喻来更好地理解逻辑,对于单个变量允许多重声明,但多重定义不允许。

    链接地址: http://www.djcxy.com/p/40621.html

    上一篇: Declaring vs defining variables in c

    下一篇: Does curly brackets matter for empty constructor?