浅谈c语言预处理知识

预处理是C语言的一个重要功能,由预处理程序负责完成。合理地使用这些预处理功能,将有利于程序的阅读、修改、调试和移植,也有利于程序的模块化设计。

c语言中提供的预处理功能包括宏定义文件包含以及条件编译等。

1.宏定义

①不带参数的宏定义:#define 宏名 字符串  (比如:#define PI 3.14159)

注:宏名一般使用大写字母,以便在程序中查找宏替换的位置。

②带参数的宏定义:#define 宏名(形参) 字符串 (比如:#define MAX(a,b) ((a)>(b))?(a):(b) )

       注:1.)宏定义中的形参知识标识符,不分配内存,调用过程只是符号的替换,不存在值的传递

               2.)宏名和形参之间不能加空格,否则将认为是无参的宏定义

                      比如:#define MAX  (a,b)  (a>b)?a:b

                                  宏展开时程序中的MAX替换为字符串(a,b)(a>b)?a:b,显然是错的。

              3.)宏定义中的字符串内的形参和整个字符串最好都用括号括起来,避免宏展开时出错。

2.文件包含

#include<文件名>或者#include"文件名"

注:尖括号只在系统设定的目录中查找,而双引号表示先在当前的源文件目录查找,若没找到,再到系统设定的目录查找。

3.条件编译

为了在不同的情况下控制不同的代码段被编译,方便程序的维护和移植,同时使用条件编译可以使目标程序变得更小,运行更快。

①#if,#else,#elif和#endif命令

使用方法与条件语句类似,比如基本的使用方法如下:

#if  常量表达式
代码段
#endif
如果常量表达式的值为真,编译代码段,否阿跳过代码段。

下面是示例代码

#include<stdio.h>

#define X 10
int main(void)
{
  #if X*2
    printf("X!=0\n");
  #else
    printf("X=0\n");
  #endif
  return 0;
}
输出结果为


②#ifdef,#else,#ifndef和#endif命令

一般格式如下

#ifdef  宏名
   代码段 1
#else
   代码段 2
#endif

如果宏名在前面已经定义过,编译代码段1,否则编译代码段2。

#ifndef的用法同理。


附加一道面试题:

下面的两个定义有何区别?

const int MAX_NUM=10;
#define MAX_NUM 10
答:使用关键字const定义的是一个不能被修改的变量,编译器并不会将其看做是一个常量;而define则是简单的值替换。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值