【C语言】中常见预编译指令的使用以及头文件的定义

1.#ifdef…

#define PART1 1
#ifdef PART1 <标识符>
...//程序段1
#else
...//程序段2
#endif

其中#else 也可以省略,一般可以利用这样的写法只编译我们需要用到的程序段,方便调试程序。

2.#if…#elif…

再或者可以这样:

//DEBUG 1,2,3
#define DEBUG 2
//根据DEBUG的值选择性编译
#if(DEBUG==1)
...//程序段1
#elif(DEBUG==2)
...//程序段2
#elif(DEBUG==3)
...//程序段3
#endif

对于上面的程序,编译器会根据DEBUG的值选择性编译,只会编译程序段2,在程序开发中会经常用这种方法进行程序的调试,十分方便。

3.#ifndef

ifndefif not defined的简写,属于宏定义的一种;基本的程序格式如下:

#ifndef <标识符>   //先测试该**标识符**是否被宏定义过
#define <标识符>
  程序段1; //如果该标识符没有被宏定义过,定义该标识符,并编译程序段 1
  ...
#else
  程序段2; //如果该标识符已经定义过了则编译程序段2的语句,不再编译程序段 1
  ...
#endif     //必须和#ifndef配合使用,否则会报错

4.C语言中头文件的定义

假如现在我在某个工程下写了一个temp.c的文件,并且想建立一个对应的头文件来直接调用其中的函数,那首先得新建一个文件,文件名命名为 temp.h,一般头文件的定义格式如下:

#ifndef <标识符>
#define <标识符>
......//程序段
......
#endif

对于 标识符 来说,一般命名为头文件名的大写,并在最前面加下划线,文件名中的“.”也用下划线代替,如下:

#ifndef _TEMP_H
#define _TEMP_H
......        //包含 C 函数声明和宏定义等
#endif

5.C语言中头文件引用

使用预处理指令 #include 可以引用用户和系统头文件。

#include <stdio.h>

这种形式用于引用系统头文件,比如上面引用的系统标准输入输出库stdio.h,它在系统目录的标准列表中搜索名为stdio.h 的文件。

#include “temp.h”

这种形式用于引用用户头文件,比如上面我们自己定义的头文件temp.h,它在包含当前文件的目录中搜索名为 temp.h 的文件。

所以说习惯用#include <file.h> 这种方式引用各种头文件的话,在编译的时候就有可能会报错,有些头文件它在系统目录的标准列表中是搜索不到的,如果采用#include "file.h"这种方式可能编译就不会报错(报错也有可能是其他原因,不一定就是引用方式有问题)。

以上是参考网上的说法加个人拙见,水平有限,如果有不对的地方还请指正。

6.typedef的用法

通常用来定义一个数据类型,如下:

typedef  unsigned char  U8;
U8 i=100;

在这里用U8表示数据类型unsigned char,这样既直观又简洁;
它不仅可以定义一般的数据类型,像结构体等等这些都可以,如下:

#include <iostream>
typedef struct BOX
{
	int wedth;
	int heigh;
	int area;
};

int main()
{
	BOX  box1;
	box1.wedth = 20;
	box1.heigh = 10;
	box1.area = box1.wedth*box1.heigh;
	printf("%d\n",box1.area);
	return 0;
}

输出结果:

200

7.#define

我们通常使用#define 来进行宏定义操作,在程序中如果大量的使用某一变量,不妨将它进行一下宏定义,这样在修改程序的时候回方便很多;

不带参数的宏定义

如下:

#include <iostream>
typedef  unsigned char  U8;
#define LENGTH 5
#define INIT {1,2,3,4,5}
int main()
{
	U8 i;
	U8 a[LENGTH] = INIT;
	for (i = 0; i < LENGTH; i++){printf("%d\n",a[i]);}
	return 0;
}

输出结果:

1
2
3
4
5

带参数的宏定义

如下:

#include <iostream>
#define S(a,b) a*b
int main()
{
	int w = 5, h = 8;
	int area = S(w, h);
	printf("S=%d\n",area);
	return 0;
}

输出结果:

S=40

关于函数的宏定义:宏定义的函数会提高代码的执行速度(因为不需要再跑到另外一个地址空间上去调用函数)程序在编译的时候就已经将宏定义的函数插入到代码调用处了,所以如果你调用一个宏定义的函数十次,编译后的文件相对正常函数调用的编译文件就会增大;相反,调用函数虽然会增加时间成本,但是内存不会增大,不管你调用多少次。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值