正确使用c语言中的头文件
我们在使用c编程的时候经常会遇到头文件,前段时间我自己做了个小项目的时候,也遇到了关于头文件的问题。
预处理器发现#include 指令后,就会寻找后跟的文件名并把这个文件包含的内容包含到当前文件中。被包含文件的文本将替换源文件中的#include 指令,就像您把被包含文件中的全部内容键入到源文件的特定位置一样(摘抄自 cprimer plus)。简单来说就是,编译器把 #include 后跟随的文件内容都写到源文件中,写的位置就是 #include放的位置。
#include指令有两种形式
1:#include<stdio.h> 文件名放在尖括号里面
在unix系统中,尖括号告诉预处理器在一个活多个标准的目录中寻找文件。如果做开发,比如,我使用keil和mdk,编译器也遵循这样的原则,放在默认目录中,不用人工处理。
2:#include”mystuff.h” 文件名放在双引号中
有两种形式:
<1>:#include”hot.h”收索当前的工作目录
<2>:#include”/usr/biff/p.h”收索/usr/biff所在的目录
对于unix系统,使用双引号意味着先搜索本地目录,但是具体收索那个牡蛎依赖于编译器。有些编译器收索源代码所在的目录,还有些收索工程文件所在的目录。
对于我使用的mdk,我是将文件所在的文件夹添加到工程能够搜索的目录中。
在写c程序的时候,我们经常会把函数写在一个.c文件中,然后在另外的.c文件中引用函数,使得整个程序更加整洁,方便。
但是在头文件使用的时候经常出现重定义的错误,我使用的解决办法是:
首先把hello.c拆分为两个文件hello.c和hello.h。hello.h中包含hello.c所需要的头文件和.c中出现的函数名。例如在hello.c中有
void add (int x,int y)
{
z=x+y;
return y;
}
就在hello.h中添加 void add(int x,int y);和hello.c所需的头文件#include<stdio.h>
在拆分后的hello.c添加#include”hello.h”,然后把hello.c和hello.h放在同一个文件夹即可。当有文件需要add函数时直接在头文件中添加#include”hello.h”即可。
当多个文件引用hello.h时候,例如当plus.c中引用hello.c,jump.c需要使用plus.c和add.c。就会出现重定义的错误(引用hello.c和plus是z指将hello.h和plus.h头文件添加到jump.c中)
这时候就引用防重定义。假设要放重引用hello.h 在开头添加
#ifndef __HELLO_H__
#define __HELLO_H__
结尾添加
#endif
既把你要重定义的文件的开头添加
#ifndef __HELLO_H__
#define __HELLO_H__
HELLO就是你文件的名字改成大写 H就是你文件类型
再在结尾加上
#endif
即可。
正确使用c语言中的头文件的更多相关文章
- C语言中的头文件
1.头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找 2.头文件#include "":一般表示用户自己定义使用的头文件,编译器 ...
- 转:C语言中的头文件可以自己写吗?
转自:http://www.eefocus.com/computer00/blog/08-09/155791_9ebdc.html 一些初学C语言的人,不知道头文件(*.h文件)原来还可以自己写的. ...
- 整理一下C++语言中的头文件
对于每一个像我一样的蒟蒻来说,C++最重要的东西就是头文件的使用了.由于初学,直到现在我打代码还是靠一些事先写好的的头文件,仍然不能做到使用自己需要的.最近看了几位大佬打代码,心中突然闪过要把自己冗长 ...
- 理解C++中的头文件和源文件的作用【转】
一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C+ ...
- Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象
15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...
- Windows 驱动程序工具包中的头文件
MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff554695(v=vs.85).aspx Windows 驱动程序 ...
- MinGW中的头文件路径级环境变量设置
整理自 MinGW中的头文件路径 C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...
- C++的IO处理中的头文件以及类理解(2)<sstream>头文件
C++的IO处理中的头文件以及类理解(2)<sstream>头文件 头文件<sstream>中定义的类型都继承iostream头文件中定义的类型.除了继承得来的操作,sstre ...
- VC中添加头文件以及库
原文:http://blog.csdn.net/lwb102063/article/details/52068389 附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tool ...
随机推荐
- 关于sql row_number,rank,dense_rank,ntile函数
row_number排序最好用它,它依次排名,不出现相同名次,如:1,2,3,4,5 rank出现相同排名,且跳过相同的排名号排下一名,如:1,1,3,4,5, dense_rank出现相同排名,不跳 ...
- VBA实现随意输入组合码,查询唯一标识码
记录背景: 需要在excel中查询出组合码,对应的唯一标识码. 举例 组合码:4+5+6+9+1*2 标识码:A1 界面随意输入组合码:1*2+4+5+6+9 输出标识码:A1 VBA实现: P ...
- ajax跨域请求的解决方案
一直打算改造一下自己传统做网站的形式. 我是.Net程序员,含辛茹苦数年也没混出个什么名堂. 最近微信比较火, 由于现在大环境的影响和以前工作的总结和经验,我打算自己写一个数据,UI松耦合的比较新潮的 ...
- CSS FIXED porn javhd
CSS position property - W3Schools W3Schools › cssref › pr_class_position Definition and Usage. The p ...
- The method getContextPath() is undefined for the type ServletContext
我出错时,到网上说得是版本问题,我找到对应的包javax-servlet5.1.12.jar,把它删了,居然不报错了,原来是和包servlet-2_5-api.jar冲突了
- 13_CXF和Spring整合发布服务
[服务端] 第一步:建立一个Web项目 第二步:填充CXF jar包 第三步:创建接口及服务类 [工程截图(对比之前的WebService_CXF_Server00)] [applicationCon ...
- JS中undefined和null的区别
在写JS脚本的时候,经常会碰到“为空”的判断,其中主要有null和undefined的判断.这两个为空判断的主要区别是: 1) null是JS的关键字,是语法特性.undefined是全局对象的属性, ...
- C#调用金数据API
首先,吐槽一下金数据的API文档 http://help.jinshuju.net/articles/api-intro.html写的很粗糙啊...反正我是没太看明白 拿表单api举例,只告诉你了个地 ...
- Android分类前言
柚子园项目搁置后,半年多时间里都在开发微信公众平台和在公司实习,用的都是python,django,bottle,已经很久没有开发android了.技术的东西,不用就容易生疏甚至忘掉.刚好现在需要写毕 ...
- C语言的数据类型
复习之余,做点笔记<C语言之数据类型> 一.整数数据类型 (1)整数数据类型 整数类型 char 字符型变量 1字节(8Bit) short 短整型 2字节(16Bit) i ...