首页 > 代码库 > C语言变量的定义和声明

C语言变量的定义和声明

  今天犯了一个低级的错误,在头文件中定义了一个变量,而该头文件被多个源文件调用,导致该变量重复定义。然后我就把改变量改成static类型的了,这下编译倒是不出错了,就是结果跟我想象的不一样,在一个文件中改了,而在另一个文件用的时候,结果为0.

  然后发现这个错误好低级,正确的用法是在源文件中定义,在头文件中声明,而别的源文件想用,就引用该头文件。

  我们来说说定义和声明的关系:

  定义:指有这么个东西,而且就放在这。

  声明:仅仅指有这么个东西,它是在别的文件中定义的。

  所以定义只能一次,而声明是可以多次的,在编译器编译的时候,只有变量定义的文件所生成的中间文件会有该变量的信息,其它声明该变量的文件中,不会有该变量。

  其实还遗留了一个问题,为什么在头文件中用static修饰变量就不会报重复定义的错误了?

  这是因为每个包含该头文件的源文件中都会有一个属于它们自己的变量,注意:虽然只在头文件中定义了一次,实际的结果是每个包含该头文件的源文件都会定义一个相同名字的变量,但是有多少源文件引用,就定义了多少个变量,而且每个源文件只能访问属于它自己的变量(因为是static的)。

C语言变量的定义和声明