【原创】有关C语言预处理器的研究

本文介绍了C语言中预处理器的基本使用方法,包括条件编译指令如 #ifdef 和 #ifndef 的应用,以及如何利用 #if 和 #elif 检查常量表达式的值。此外还详细解释了 # 和 ## 运算符的作用,例如如何实现字符串化和符号连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们可以通过#ifdef和#ifndef来检查是否定义了预处理器标识,也可以通过#if 和#elif来检查常量表达式的值。在#if 和#elif表达式中,常常是用defined运算符来检查是否定义了预处理器标识符。

还有用来包含文件的#include和用来撤销预处理器标识符的#undef在c语言中是常见的预处理器。

首先研究一下

1.字符串的内部连接

预处理可以将相邻的字符串常量连接起来,这种方便的处理机制是的我们容易将一长字符串分成若干段来输入。这同样适合用于符号表示的字符串化,下面举个例子给大家:

#include <stdio.h>
void main(viod)
{
    printf("hello\n""smallbox\n""!\n");
}

2.符号表示的字符串化------#预处理器运算符

#预处理运算符可以把一个#define 参数转化为一个内部字符串,这个字符串包含了替换的内容。由于参数被转化了一个字符串,因此有时又把这叫做“字符串化”(stringizing)。下面是一个例子:

#include <stdio.h>
#define print(a)  printf(#a ":%d\n",(a));
void main(void)
{
    int smallbox = 100;
    print(smallbox);
}

在print宏定义中,表达式#a被一个包含初始参数的字符串所替代,在这个例子中是"smallbox"。在符号表示被字符转化以后结果就是被输出正这样:

smallbox:100

3.符号表示的连接------##预处理器操作符

##预处理器操作符被用来将两个符号表示连接起来,从而形成一个新的符号表示。对于需要用相同的名字来建立一系列标识符的情况,这就显得非常的有用了,下面给出一个例子:

#include "stdlib.h"
#include "stdio.h"

#define ErrMsg(n,txt) char Err##n[] = "Error" #n ":" txt "\n";

ErrMsg(0,"Too many chips")
ErrMsg(1,"Too much soda")
ErrMsg(2,"Too little sunlight")
void main(void)
{
     printf("hello\n""world\n");
     printf("%s",Err0);
     printf("%s",Err1);
     printf("%s",Err2);  
}

下面是输出结果:

Error0:Too many chips
Error1:Too much soda
Error2:Too little sunlight

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值