C语言预处理器与头文件

目录

一、预处理器

1、预处理器

2、预定义宏

3、参数化的宏

二、头文件

1、头文件

2、引用头文件的语法

3、头文件格式


一、预处理器

1、预处理器

预处理器是一个文本替换工具,它会指示编译器在实际编译之前完成所需的预处理。

所有的预处理器命令都以# 开头。

指令描述
#define定义宏
#include包含一个源代码文件
#undef取消已定义的宏
#ifdef如果宏已经定义,则返回真
#ifndef如果宏没有定义,则返回真
#if如果给定条件为真,则编译下面代码
#else#if 的替代方案
#elif如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码(可用于条件编译
#endif结束一个 #if……#else 条件编译块
#error当遇到标准错误时,输出错误消息
#pragma使用标准化方法,向编译器发布特殊的命令到编译器中

2、预定义宏

ANSI C 定义了许多宏。在编程中可以使用这些宏,但是不能直接修改这些预定义的宏。

描述
DATE当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量。
TIME当前时间,一个以 "HH:MM:SS" 格式表示的字符常量。
FILE这会包含当前文件名,一个字符串常量。
LINE这会包含当前行号,一个十进制常量。
STDC当编译器以 ANSI 标准编译时,则定义为 1。

实例

#include <stdio.h>
 
main()
{
   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );
 
}

当上面的代码(在文件 test.c 中)被编译和执行时,它会产生下列结果:

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

3、参数化的宏

实例1:取平方

int square(int x) {
   return x * x;
}

等价于

#define square(x) ((x) * (x)) //x一定要加括号

实例2:取较大值

#define MAX(x,y) ((x) > (y) ? (x) : (y))

二、头文件

1、头文件

引用头文件相当于复制头文件的内容,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。

2、引用头文件的语法

编译器自带的头文件:

#include <file>

程序员编写的头文件:

#include "file"

3、头文件格式

(1)避免头文件被多次引用,将文件内容放在条件编译语句中。

#ifndef HEADER_FILE
#define HEADER_FILE
​
#include <...>
#include "..."
#define宏定义
​
typedef自定义类型
构造类型的声明(如结构体,枚举等)
全局变量的声明(必须加extern)
函数的声明(建议加extern)
​
#endif

头文件中只能写全局变量的声明,不能定义全局变量,否则在链接时会造成重定义错误。(除非定义成static全局变量,仅在当前文件可见)

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值