`
talentluke
  • 浏览: 604715 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C变量声明和定义的区别

 
阅读更多
#include <stdio.h>
int a;
a=9;
void main(void)
{
printf("wjf\n");
int a;
a=6;
printf("a=%d,b=%d,c=%d,d=%d",a);
}


"main.c", line 3: cc0077: {D} error: this declaration has no storage class or
          type specifier
  a=9;
对变量的一般赋值不能放在函数外(只有在定义全局变量时的初始化才被允许),修改如下:

int a;
a=9;

改为

int a=9;
在函数外赋值 就变成了 函数外有了赋值语句。
c/c++ 程序结构不允许。
赋值语句要写在子程序里或主程序main()里。

在函数外,你可以用初始化;在全局中,语句的执行顺序是没有保证的,所以只能在声明的时候定义.

 

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)

变量的声明有两种情况:

1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。

2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。

前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”,从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int a 它既是声明,同时又是定义。然而对于 extern a 来讲它只是声明不是定义。一般的情况下我们常常这样叙述,把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。很明显我们在这 里指的声明是范围比较窄的,即狭义上的声明,也就是说非定义性质的声明,例如:在主函数中:

int main() {
extern int A;
//这是个声明而不是定义,声明A是一个已经定义了的外部变量
//注意:声明外部变量时可以把变量类型去掉如:extern A;
dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变量

外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多 次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。系统会根据外部变量的定义(而不是根据外部变量 的声明)分配存储空间的。对于外部变量来讲,初始化只能是在“定义”中进行,而不是在“声明”中。所谓的“声明”,其作用,是声明该变量是一个已在后面定 义过的外部变量,仅仅是为了“提前”引用该变量而作的“声明”而已。extern 只作声明,不作任何定义。

(我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。)

用static来声明一个变量的作用有二:

(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。

(2)外部变量用static来声明,则该变量的作用只限于本文件模块。



摘自http://myswirl.blog.163.com/blog/static/51318642201011372125656/
很多初学者,对变量的定义和声明分不请,CC++ 中略有不同,再加上conststaticextern 就更加混乱,下面就此问题给予详细讲解并举例说明。

变量的定义:为变量分配存储空间,同时指明变量的类型和名字。另外变量的初始化,就是在变量的定义处给出值。

变量的声明:它主要向程序声明变量的类型和名字。

static修饰符:static int a;将变量的作用域限制在一个源文件内,对其他源文件a是不可见的。

严格的规则 :变量有且只能有一次定义,但是可以声明多次,使用变量前必须定义或声明。一个项目中可以有多个源文件,但在所有的源文件中只允许出现一次对某个变量的定义。

举例说明:

**************************************************************************

int i;          // 定义

int i=2;       // 定义

static int i;  //定义

extern int i=8; // 定义

extern int i;      // 这就是单纯的声明

*************************************************************************
问题1:如果外部变量的定义各指定一个初始值?大多数系统都会拒绝接受该程序。

C语言中变量声明和定义 - myswirl - myswirl
 
问题2:如果一个外部变量在多个源程序中定义却未指定初始值?某些系统可能会接受,例如VC6.0
同样的程序在VC++无法编译通过。
C语言中变量声明和定义 - myswirl - myswirl
 如果要在所有的C语言实现中避免上述问题,惟一的解决办法就是每个外部变量只定义一次

问题3:同一变量名在不同文件中声明为不同的类型?需要程序员自己检查。
C语言中变量声明和定义 - myswirl - myswirl

解决上述问题,只需接受一个简单的规则:每个外部变量只在一个头文件中声明,需要用到外部变量的地方都应该包括这个头文件,特别指出,定义该外部变量的模块也应该包括这个头文件。


分享到:
评论

相关推荐

    C语言和C++在声明和定义之间的区别是什么

    ### C语言和C++在声明和定义之间的区别 在编程领域,尤其是在学习和使用C语言与C++时,理解和区分“声明”与“定义”的概念至关重要。这两种语言虽然有着密切的联系,但在处理声明和定义方面存在一些重要的差异。...

    51单片机C语言变量定义.pdf

    标题《51单片机C语言变量定义》和描述《51单片机C语言变量定义》揭示了本文档主要围绕51单片机使用C语言进行编程时变量定义的具体知识点展开。51单片机通常指的是基于Intel 8051微控制器架构的一系列微控制器,广泛...

    C/C++语言中全局变量重复定义问题的解决方法

    在C语言中使用extern 关键字来定义全局变量的时候,我们需要在.h文件和.c文件中重复定义,这种重复,导致了出错几率的增加。 今天,在整理自己的代码的时候,考虑到我写的代码从一至终都是在一个cpp文件里面。于是,...

    C语言静态变量和静态函数

    C_语言静态变量和静态函数,可以让您对C语言静态变量和静态函数有更清晰的认识

    C语言面试题大汇总之华为面试题:1、局部变量能否和全局变量重名;2、如何引用一个已经定义过的全局变量;3、全局变量可不可以定义在可被多个.C文件包含的头文件中 为什么;4、语句for( ;1 ;)有什么问题 它是什么意思……

    本文涵盖了C语言面试题大汇总之华为面试题,涉及到局部变量、全局变量、extern关键字、for循环、while循环、静态变量、静态函数、内存分配、typedef和struct等知识点,对于C语言学习和面试有重要参考价值。

    一些关于变量 c 的 C 语言代码示例,展示了变量的声明、定义和使用

    变量的定义和声明: 声明: 指定变量的名称和数据类型,以便编译器为其分配内存。 定义: 同时声明和初始化变量。 数据类型: C 语言提供了多种基本数据类型,如 int、float、char、double 等。 变量的类型决定了它...

    C语言变量命名规则

    - C语言提供了一些预定义的变量,如`argc`和`argv`,它们在处理命令行参数时使用。 - 宏定义(通过`#define`创建)可以创建符号常量,它们的命名规则类似,但不遵循变量命名规则,因为它们本质上是文本替换。 4. ...

    C++函数声明和定义

    总之,C++的函数声明和定义以及变量声明和定义是程序编译和链接过程中的重要概念,它们保证了编译器和链接器能够正确处理代码中的函数调用和跨文件的变量引用。了解这些概念及其工作原理对于编写高效、可维护的C++...

    C语言变量名命名规则

    ### C语言变量名命名规则详解 #### 一、程序风格 C语言的程序风格对于保持代码的一致性和可读性非常重要。以下是一些常见的风格指南: 1. **阶梯层次组织程序代码**: - 代码的缩进通常采用每层次4个空格的方式...

    C语言变量声明与初始化:基础与进阶指南

    ### C语言变量声明与初始化:基础与进阶指南 在C语言编程中,变量作为程序中最基本的数据存储单元,其正确的声明与初始化是确保程序高效、稳定运行的关键。本文将全面解析C语言中的变量声明与初始化技巧,涵盖基础...

    c语言中全局变量和局部变量的探讨

    ### C语言中全局变量和局部变量的探讨 #### 引言 C语言作为一种高效、灵活的编程语言,在软件开发领域有着广泛的应用。然而,对于初学者来说,掌握C语言的一些核心概念仍然存在一定的难度,尤其是在处理函数的递归...

    程序设计-变量的声明与定义.pptx

    变量声明是在代码中告诉编译器变量的存在,包括其名称、数据类型以及(在某些情况下)其作用域。例如,在C语言中,我们可以声明一个整型变量`int num;`。这个声明告诉编译器`num`是一个整型变量,但并未为它分配实际...

    c语言全局变量和局部变量问题汇总

    全局变量与局部变量是C语言中非常重要的概念,掌握它们的区别和使用场景对于提高编程技能至关重要。通过合理利用这两种变量,我们可以编写出更安全、更高效的代码。同时,正确处理变量的作用域可以帮助避免潜在的...

    C语言的变量PPT课件.pptx

    3.1.1 示例3-1展示了全程生存期和动态生存期的区别,通过for循环打印变量值,可以直观地看到全局变量和局部变量在生命周期上的差异。 3.1.2 变量的作用域: 作用域决定了变量在哪部分代码中可以被访问。全局作用域...

    C语言中变量定义的位置

    1. **变量声明和定义**:在C语言中,声明变量告诉编译器变量的类型,而定义变量则分配内存空间并初始化。例如,`int i;` 是声明,`int i = 0;` 是定义。如果只声明不定义,那么后续的使用会导致编译错误,因为编译器...

    C 语言变量,函数重定义问题

    // 变量声明 char add1[] = "www.shellbox.cn"; char add2[] = "www.scriptbox.cn"; int i = 10; // 函数声明 void test1(); void test2(); #endif // TEST_H_ ``` 这种保护机制可以避免由于多次包含同一头文件而...

    也谈二级C语言之变量的定义与特点.pdf

    从提供的文件信息中,我们可以看到文件标题为“也谈二级C语言之变量的定义与特点.pdf”,文件描述与标题相同,表明文档内容与C语言中变量的定义和特性有关。标签指出了文档的领域为C语言、开发技术、编程技术、参考...

    结构类型定义和结构变量说明

    以上内容详细解释了结构类型定义和结构变量说明的相关知识点,包括结构体类型的定义、结构变量的声明、结构体内嵌结构体、结构体变量的初始化与赋值等。这些内容对于理解和掌握C语言中的结构体非常重要。

    C语言变量类型C语言变量类型.doc

    C语言中的变量类型是编程的基础,它决定了变量的存储方式、生命周期和作用域。下面将详细解释这些变量类型: 1. **auto** 变量: - `auto` 是默认的变量类型,通常用于函数内部定义的变量。它们在函数执行时分配...

    c语言中 static 变量声明作用

    C语言中static变量声明的作用 在C语言中,static关键字有三个主要作用:隐藏、保持变量内容的持久和默认初始化为0。下面我们将详细解释每个作用。 1. 隐藏作用 static关键字的首要功能是隐藏。它可以使变量或函数...

Global site tag (gtag.js) - Google Analytics