变量声明VS定义[英] Variable declaration vs definition

本文是小编为大家收集整理的关于变量声明VS定义的处理方法,想解了变量声明VS定义的问题怎么解决?变量声明VS定义问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在阅读一些关于externs的信息. 现在,作者开始提及变量声明和定义. 通过声明,他提到的情况:如果声明了变量 没有分配它的空间. 现在这让我感到困惑,因为我认为<强烈>大多数时代 当我在C中使用变量时,我实际上都定义并声明它们是对的吗? 即,

int x; // definition + declaration(at least the space gets allocated for it)

我认为当你声明变量但没有 定义它是使用时的:

extern int x; // only declaration, no space allocated

我是否正确?

推荐答案

基本上,是的,你是对的.

extern int x;  // declares x, without defining it

extern int x = 42;  // not frequent, declares AND defines it

int x;  // at block scope, declares and defines x

int x = 42;  // at file scope, declares and defines x

int x;  // at file scope, declares and "tentatively" defines x

在c标准中写入,声明指定一组标识符的解释和属性以及对象的定义,导致为该对象保留的存储器 .还有一个标识符的定义是该标识符的声明.

其他推荐答案

这是我如何查看它在互联网上找到的位和碎片.我的观点可能是歪斜的.
一些基本的例子.

int x;
// The type specifer is int
// Declarator x(identifier) defines an object of the type int
// Declares and defines

int x = 9;
// Inatializer = 9 provides the initial value
// Inatializes 

C11标准6.7状态 标识符的定义是该标识符的声明:

- 对于对象,导致存储存储为该对象;

- 对于函数,包括功能体;

int main() // Declares. Main does not have a body and no storage is reserved

int main(){ return 0; } 
  // Declares and defines. Declarator main defines                  
  // an object of the type int only if the body is included.

以下示例

int test(); Will not compile. undefined reference to main
int main(){} Will compile and output memory address.

// int test();
int main(void)   
{
    // printf("test %p \n", &test); will not compile 
    printf("main %p \n",&main);
    int (*ptr)() = main;

    printf("main %p \n",&main);

 return 0;
}

extern int a;  // Declares only.
extern int main(); //Declares only.

extern int a = 9;  // Declares and defines.
extern int main(){}; //Declares and  defines.                                     .

其他推荐答案

在声明期间,内存位置由该变量的名称保留,但在定义期间,内存空间也被分配给该变量.

本文地址:https://www.itbaoku.cn/post/358950.html