C语言:使用.h和.c文件遇到的问题总结

您所在的位置:网站首页 c语言调用外部文件 C语言:使用.h和.c文件遇到的问题总结

C语言:使用.h和.c文件遇到的问题总结

2024-07-14 23:31| 来源: 网络整理| 查看: 265

全局变量是什么? 

在所有函数外部定义的变量称为全局变量(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