C语言:使用.h和.c文件遇到的问题总结 |
您所在的位置:网站首页 › c语言调用外部文件 › C语言:使用.h和.c文件遇到的问题总结 |
全局变量是什么?
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的 .c 和 .h源文件。 extern的使用,include的使用表明变量或者函数是定义在其他其他文件中的,仅仅是一种“暗示”。 ·如果需要调用其他.c文件中的函数or变量,在文件中声明前加extern即可,不加extern而直接声明也可以,因为声明全局函数or变量默认前面带有extern。 ·如果不想让其他.c文件引用本文件中的变量,加上static即可。 ·在“写全局变量”的.c.h的地方写extern,在其他引用的.c里面直接用。 ·尽量应该避免不同.c文件里面函数名称相同的问题。 ·include相当于把include .h文件直接带入到本源文件里,比如在b.c文件里include "a.h",就相当于把a.h文件里所有定义的变量和函数全部拷贝了一份放入了b.c里,一个项目里,一个.h文件可能会被多个.c源文件包含,这样编译的时候就会报重复定义的错误。而且尽量不要在.h里定义变量,这是一个不好的习惯。 ·区分声明和定义。 在.h和.c里面放什么?本质上没有任何区别。一般: .h文件是头文件,内含函数声明、宏定义、结构体定义等内容 ·如果在C文件中声明宏,结构体,函数等,那么要在另一个C文件中引用相应的宏,结构体,就必须重复的声明。所以把他放在.h里面。 .c文件是程序文件,内含函数实现,变量定义等内容。 是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。你可以强制编译器把任何后缀的文件都当作c文件来编。 .h文件引用问题?现在有A.h B.c C.c (main)三个文件 A.h声明结构体,函数。 B.c里面放需要的函数和一些数据。 C.c(main)调用A中函数和C中数据,执行程序。 需要在C里面#include"B.c"且#include"A.h" 需不需要再B里面#include"A.h"? 如果B中引用: [Error] redefinition of 'XXX' 重复引用导致报错,只需要include一次。 为了避免对这个问题的过分讨论,可以添加#ifndef条件编译。 //A.h #ifndef A_H #define A_H #endif现在只有[Error] 'XXXX' does not name a type。 条件编译能够避免重复引用,涉及多个.c或者.h的时候避免出错。 显示does not name a type?[Error] 'XXX' does not name a type 参考他人的博客,头文件互相包含时会出现这种错误,但是我只有A.h一个头文件,不可能是这种错误。 语句是不能写在函数外面全局变量之中的,需要写在函数里面。 我错误的在函数外面对已经声明的变量进行了赋值操作,把操作语句放在函数里面就不会报错。 补充:在全局范围内声明变量时,同样只能进行初始化,不可以对其赋值。 全局数组?可以是,和正常数组一样。 ·全局数组的初始化值不一样,并且需要具体长度。 ·数组名是数组的首地址,是一个指针常量,很多时候我们可以将数组名当指针来用,但在全局变量的外部引用中,全局数组和全局指针变量的引用方式还是有区别的。 ·如果将全局数组按指针声明的方式来引用,编译可能不会报错,但在执行的时候会出现意想不到的问题,最常见的应该就是段错误。(这个没查到具体的不同的例子哈哈哈) 参考: https://blog.csdn.net/u011328417/article/details/98876517 https://blog.csdn.net/qq_27664167/article/details/82859852 “且将新火试新茶,诗酒趁年华。” |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |