您的位置:首页 > 编程语言 > C语言/C++

关于C语言头文件的一些认识

2014-04-26 23:35 155 查看
c语言头文件怎么写?

大致格式:
#ifndef __ABC_H__
#define __ABC_H__
//以上是为了防止头文件被多次包含,可以省略,最好有,名字任意,保证唯一即可

//以下是宏定义,可有可无
#define MAX 100
#define MIN 0

//以下是结构声明,可有可无
typedef struct{
int a;
}ABC;
//以下是函数声明,可有可无
void abcfun(int a,int b);
...

#endif

c语言头文件的作用?

1,头文件可以定义所用的函数列表,方便查阅你可以调用的函数;

2,头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。
3,头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。
4,他并不是C自带的,可以不用。

5,调用了头文件,就等于赋予了调用某些函数的权限,如果你要算一个数的N次方,就要调用Pow()函数,而这个函数是定义在math.c里面的,要用这个函数,就必需调用math.h这个头文件。

C语言头文件中,下划线具体是什么意思?请问有没有高手指点一下?

下划线没有什何特别的意思,就是一个变量的一部分,就是你定义char str[10],char
_str[10],他们俩是不同的变量名,然后都是一个字符串变量,一般头文件里或者宏定义都在变量前加一个下划线,这都是习惯问题,以示和普通函数里变量的区别,

学C的时候老师好像说过,系统自己的变量一般都以下划线开头,以示区分。

#If define

#ifdef(#ifndef),#else,#endif,#if等都属于预处理条件编译的命令。预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。
1、
先来看一下,一个简单的应用,就是在头文件中使用,#ifndef #define
.....................#endif
这三条指令。头件的中的#ifndef(if not
define),这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。

还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:
#ifndef <标识>#define <标识>
............
#endif

<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:delay.h
#ifndef _DELAY_H_#define _DELAY_H_
......
#endif

这一个在一般的小型程序中经常用到,在做单片机的的程序时,经常把一些可以独立的模块写成头文件,方便程序的阅读和移植。

我看了老长时间的书,终于明白
为什么是:#ifndef _DELAY_H_#define
_DELAY_H_
而不是: #ifndef DELAY.H
#define DELAY.H
//////////////////////////
因为,后者,定义一个名称,是用于一个程序中或者头文件中的,名称定义
前者,是关于头文件包含的,不是名称定义的。用下划线代替“.”,是没有办法的办法,只有这样才能防止混乱。
前者的意思是,如果没有包含了这个头文件,就包含它。
后者的意思是,如果没有定义这个名称,就定义它。

其实就是换一种写法 以区分两种意思。
两者是不一样的意思。

摘自那本两个老外写的经典权威《C程序设计语言(第二版)》 第2章 2.1变量名该节

“……名字是由字母和数字组成的序列,但其第一个字符必须是字母。下划线被看做是字母……由于库例程的名字通常以下划线开头,因此变量名不要以下划线开头……”

首先是楼主那几个函数是系统文件自代函数,所以一般系统变量或函数名前会加上下划线以示区分.和头文件的下划线是2回事。

个人总结
模块化箱式设计——函数——函数出现
调用时的作用域问题——被调用的在前,调用的在后
嵌套调用,前面的调用后面的,后面的调用前面的——通过声明扩展作用域——声明出现
声明独立与c文件分离——头文件出现。

原文链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: