正确使用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 ...
随机推荐
- Dojo Tree设置默认选中项并且获得它
先上用来生成Tree的JSON数据 [ { "id": "Root", "name": "资源目录" }, ...
- C#集合之Hashtable
Hashtable是一个键值对集合,其泛型版本是Dictionary<K, V>,下面说下常用的一些方法; 1.Add(),向Hashtable添加元素,需要注意的是因为它是键值对集合,所 ...
- ### 学习《C++ Primer》- 6
Part 6: 拷贝控制(第13章) // @author: gr // @date: 2015-01-08 // @email: forgerui@gmail.com 一.拷贝.赋值与销毁 拷贝构造 ...
- 第二十四篇、iOS 10版本适配
随着iOS10发布的临近,大家的App都需要适配iOS10,下面是我总结的一些关于iOS10适配方面的问题,如果有错误,欢迎指出. 1.系统判断方法失效: 在你的项目中,当需要判断系统版本的话,不要使 ...
- 检测PC端和移动端的方法总结
正在苦逼的实习中,昨天公司让做一个页面,涉及到检测终端的问题,如果是手机设备,就跳转到指定的网页上,以前写响应式布局只要用@media screen来实现布局的差异化适应,但是现在不仅仅是布局,还要针 ...
- nodejs学习[持续更新]
1.退出node process.exit(0) 2.把API从上往下全部看一遍,先混个眼熟. 3. end
- c++学习笔记1(c++简介)
c++和c的不同: 1,c++是c的扩充. 2,在解决问题时思维方式的不同.(c++采用面向对象思维,c面向结构思维) 面向结构思维:将一个大程序拆分成一个个很小的结构.每个结构完成一个或多个功能,所 ...
- 使用thinkPHP实现数据更新一例【原创】
在上一篇文章中我们实现了数据的删除和批量删除,这一篇文章我们将实现数据的更新. 首先依然是预期效果图: 点击修改后进入modi.html页面,然后进行修改,如此处修改了真实姓名这一属性: 点击保存: ...
- OS X平台上MySQL环境搭建
参考资料: http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html http://blog.csdn.net/just ...
- sharepoint 脚本 强迫以管理员权限运行
#region 关键代码:强迫以管理员权限运行 $currentWi = [Security.Principal.WindowsIdentity]::GetCurrent() $currentWp = ...