c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事;所以今天一定要把它弄明白!
其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码、有利于整理思路、使代码脉络更加清晰...
总之,好处多多学起来还不难就对了,还在等什么快来看看吧!
 
首先,我们要建一个头文件,命名为abc.h
 
然后就是内容了,其大致格式如下:
#ifndef __ABC_H__  //ifndef 实际上就是“if not define”  如果没有定义 
#define __ABC_H__
//以上是为了防止头文件被多次包含,可以省略 但最好有
//后面的文件名可以随意  但必须是大写+下滑线形式  还要保证名字唯一  所以这里建议是文件名的大写形式 
 
/*-------------[将要写入的代码]--------------*/ 
//以下是头文件,可有可无
#include <math.h>
 
//以下是宏定义,可有可无
#define MAX 100
#define MIN 0
 
//以下是结构声明,可有可无
typedef struct{
  int a;
}ABC;
 
//以下是函数声明,可有可无
void abcfun(int a,int b);
 
//以下是函数定义,可有可无
uint add(uchar a, uchar b)
{
  return a+b;
}
...
/*----------------------------------------------*/
 
#endif   //这里与上面的 #ifndef 是一对预编译
 
在c语言中头文件的作用是什么?
 
1,头文件可以定义所用的函数列表,方便查阅你可以调用的函数;
2,头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。
3,头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。
4,他并不是C自带的,可以不用。
5,调用了头文件,就等于赋予了调用某些函数的权限,如果你要算一个数的N次方,就要调用Pow()函数,而这个函数是定义在math.c里面的,要用这个函数,就必需调用math.h这个头文件。
6,在嵌入式开发中,我们可以试着将那些固定的初始化操作,全部扔进头文件中,然后随心所欲的调用它们。
 
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变量名该节
  “……名字是由字母和数字组成的序列,但其第一个字符必须是字母。下划线被看做是字母……由于库例程的名字通常以下划线开头,因此变量名不要以下划线开头……”
 
  首先是楼主那几个函数是系统文件自代函数,所以一般系统变量或函数名前会加上下划线以示区分    .  和头文件的下划线是 两码事
 
 
 

C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)的更多相关文章

  1. C语言中头文件和cpp文件解析

    务必提前预读这里的内容:http://www.cnblogs.com/stemon/p/3999844.html 回到cpp文件与头文件各写什么内容的话题上: 理论上来说cpp文件与头文件里的内容,只 ...

  2. C语言中头文件——你乱吗????

    如果尔等之辈问本大神,为什么需要头文件呢?本大神告诉你:想要知道为什么需要头文件的话,你就应该知道C语言编译的过程: 本大神为你们准备了基本知识: C语言文件的编译与执行的四个阶段并分别描述: C++ ...

  3. C语言中头文件<stdio.h>中的#ifndef _STDIO_H_

    先了解这里的相关知识:http://www.cnblogs.com/stemon/p/4000468.html 头文件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都in ...

  4. C语言中头文件尖括号和引号的区别

    用include 引用头文件时,双引号和尖括号的区别: 1.双引号:引用非标准库的头文件,编译器首先在程序源文件所在目录查找,如果未找到,则去系统默认目录查找,通常用于引用用户自定义的头文件. 2.尖 ...

  5. C语言头文件怎么写?(转载)

    ---恢复内容开始--- c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码,还在 ...

  6. C++中头文件与源文件的作用详解

    一.C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件―― .cpp 文件和 .h 文件.其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码:而 .h 文件则被称作 ...

  7. C/C++ 中头文件相互包含引发的问题

    转自:http://blog.csdn.net/hazir/article/details/38600419 今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟 ...

  8. C++ 中头文件(.h)和源文件(.cc)的写法简述

    用C++编写比较大型的项目时,文件的分割管理确实确实是非常必要的 .下面就非常简洁明了地谈谈头文件(.h)和源文件(.cc)应该怎么写. 头文件(.h):写类的声明(包括类里面的成员和方法的声明).函 ...

  9. c中头文件在cpp文件里引用和.h文件引用的思考

    我们在编敲代码中头文件是常常使用的. 可是头文件是应该包括在.H文件里还是在.cpp文件里.在这个其中有什么样去差别呢. 假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a. ...

随机推荐

  1. c++中STL中的next_permutation函数基本用法

    对于next_permutation函数是针对于排列组合问题的库函数,它的排序方式是按照字典的方式排列的·: 如以下代码对于next_permutation函数的初步解释: #include<c ...

  2. hdu-4513吉哥系列故事——完美队形II--最长回文

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  3. AnnotationConfigApplicationContext

    package com.test; import java.io.IOException; import java.io.InputStream; import java.net.URL; impor ...

  4. 初识 iOS 自动化测试框架 WebDriverAgent

    微信跳一跳最近很火,外挂代练什么的也越来越多.作为一只程序猿,对外挂的原理产生了强烈的好奇心,于是埋头研究了一阶段,注意到了 WebDriverAgent 这套 Facebook 出品的自动化测试框架 ...

  5. UBoot添加命令的方法

    1. 具体实现步骤 ① 在./common文件夹下新建cmd_led.c,并在此文件中添加如下内容 #include <common.h> #include <command.h&g ...

  6. robot framework 的AutoItLibrary常用关键字

    1.run 的用法,以及激活当前窗口

  7. 时间比较早晚java

    package demo; import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale; publi ...

  8. tencent intern learning

    gslb全局负载均衡   (负载均衡的问题就是某些session保存在某台服务器中,这个用户就只能用那台服务器服务了) jwt vs 传统cookies & session  (jwt类似于公 ...

  9. [Android]JsonObject解析

    android和服务器进行交互的时候往往会有数据的传输,而数据中有一种类型就是Json型,这两天在研究API接口的问题,服务器返回的数据类型都是Json型的.例如: 1.接收到的json字符串分为两种 ...

  10. apache配置多端口对应多个虚拟目录

    经常需要在本地调试网站,却又不喜欢在http://localhost/网站的文件夹名 且几个比较重要的项目我想直接用端口号以示区分,想达到的效果如下: http://localhost/ 默认80端口 ...