C语言学习笔记:预处理器和宏

C

语言的预处理器(preprocessor)是其编译过程中的特殊部分。它可以识别、分析并按照其描述进行处理。C语言的预处理器发生在编译之前,不属于编译的一部分。

C语言的预处理器比较常见的包括:#include,#define,宏(macro)和#error。

#include

#include可以说是c语言中最常见的预处理器,用来引用头文件。比如引用stdio.h:

#include <stdio.h>

#define

#define 的作用是将程序中的一些常量命名,如:

#define YES 1
#define PI 3.14
#define MYNAME "paul"

需要注意的是这些命名与变量赋值不同。变量赋值会在内存中划出一片区域用于存储该变量,#define属于预处理,发生在编译之前,编译器不会划出内存来存储#define的值。在编译前,编译器会找到程序中出现的#define对应的名称并将其替换为对应的值。

宏(macro)

宏是一种特殊的#define方式,它实现了类似于函数的功能。比如:

#define SQUARE(n) n*n

在程序中可以这样使用:

#include <stdio.h>
#define SQUARE(n) n*n

int main()
{
  int x = 3;
  int y = SQUARE(x);
  printf("%d",y);
  return 0;
  
}

运行结果是:9。

其他的一些宏:

比较大小

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

检查一个字符是否是小写
 

#define IS_LOWER_CASE(x) ( ((x) >= 'a') && ((x) <= 'z') )

以及多参数的宏(Variadic Macros)

#define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);

使用该宏的时候,变量可以是一个,如

#define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);
int main()
{
  debugPrintf("Hello World!\n");
  return 0;
}

 也可以是多个

#define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);
#define testprintf(...) printf("test: " __VA_ARGS__);

int main()
{
  int x=12;
  int y=13;
  debugPrintf("x=%d, y=%d\n", x, y);
  testprintf("hey hey");
  return 0;
}

#error

#error将字符串直接输出到error stream:

#error "error message"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值