目录
- 前言
- 原则
- 结构
-
- 类型不完整的原因和解决方法:
- 定义了不定长数组
- 结构体的定义放在了头文件里面
- 解决方法1(当采用使用时包含特定头文件时):
- 解决方法2(当一个头文件包含所有头文件时):
前言
在使用C语言的过程中,我们会使用头文件来包含很多的声明和变量,但是在这种情况下面。当然在一般的情况下面,我们只需要哪里使用就在哪里包含,所以也并不成为一个问题。但是在一些情况下面,我们尤其需要注意用法。
原则
1.首先,我们需要注意一个最突出的原则,那就是我们使用的一切文件都必须先声明,然后才能使用。
2.其次,为了保证每一个变量都有特殊的名称,我们不能重复定义函数。
结构
推荐结构
#include "stdio.h"
#include "temp.h"
int print_temp_fun(char * temp_arry,int temp_a);
int globel_int =0 ;
void main()
{
char * str= "hello,world";
int a = 10;
print_temp_fun(str,a );
}
int print_temp_fun(char * temp_arry,int temp_a)
{
printf("temp_arry is %s,temp_ais %d\n",temp_arry,temp_a);
}
#ifndef _TEMP_H_
#define _TEMP_H_
extern int globel_int;
int print_temp_fun(char * temp_arry,int temp_a);
#endif
图方便的结构
假设我们有三个.h 文件.:
a.h
b.h
c.h
我们使用这三个头文件的概率很高,难道我们每一次都需要写include a.h,b.h,c.h吗?
当然不需要,我们可以这样写:
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include "a.h"
#include "b.h"
#include "c.h"
#endif
甚至,我们可以把所有的.h文件发给到这个里面,然后直接包含这一个头文件,从而包含所有的头文件。这样做当然方便,但是也会出现一些问题。
- 可能会导致所有文件包含的文件过多,编译慢,代码太大。
- 可能会导致在定义之前就使用了:如,在编译过程中出现不完整的类型。
类型不完整的原因和解决方法:
我们在编译时,可能会出现这个状况,下面来讲解一下原因:
定义了不定长数组
int a[];
解决方法:在实际使用过程中,我们尽量不要定义不定长数组,不定长数组是一个很危险的东西,我们尽量采用malloc或者直接用指针都是更安全的选择。
结构体的定义放在了头文件里面
首先我要说明,结构体放在头文件里面并不会导致问题的出现,但是我们要注意定义结构体的头文件,应该被先包括进来。
typedef struct temp
{
int a ;
}temp_a;
temp_a temp_st;
错误的情况:
#include "b.h"
#include "a.h"
注意在这种情况下,编译器会直接把b.h和a.h两个文件先后复制到b.c里面,这种情况下会导致的问题就是结构体的定义放在了使用之后。这里我们要注意先后顺序。
解决方法1(当采用使用时包含特定头文件时):
#include "a.h"
#include "b.h"
我们要时刻注意先定义后使用的操作流程。
解决方法2(当一个头文件包含所有头文件时):
在我们编写大型工程的情况时,各种头文件的包含可能会存在比较纠结的时候,在这种情况下的话我们将所有的.h文件都包含到一个头文件里面去。但是这种时候,又会出现原来的问题,结构体的定义可能会找不到。
这时候我们可以选择将结构体的定义放到包含头文件之前的情况下。
例如
#ifndef _PUBLIC_H_
#define _PUBLIC_H_
typedef struct temp
{
int a ;
}temp_a;
#include "a.h"
#include "b.h"
#endif
我们可以直观的感受到,包含这个头文件的文件,在a.h,和b.h里面也都是可以直接定义该结构体的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)