跳至主要內容

02.预处理器

约 502 字大约 2 分钟

预处理器

#define	定义宏
#include	包含一个源代码文件
#undef	取消已定义的宏

#ifdef	如果宏已经定义,则返回真
#ifndef	如果宏没有定义,则返回真


#if	如果给定条件为真,则编译下面代码
#else	#if 的替代方案
#elif	如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif	结束一个 #if……#else 条件编译块

#error	当遇到标准错误时,输出错误消息
#pragma	使用标准化方法,向编译器发布特殊的命令到编译器中

预定义宏

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

宏展开下的 ###

#字符串化操作符

#define STRINGIFY(x) #x

int main() {
    const char* str = STRINGIFY(Hello);
    printf("%s\n", str);  // 输出 "Hello"
    return 0;
}

##连接操作符

#define CONCAT(x, y) x##y

int main() {
    int xy = CONCAT(10, 20);  // 相当于 int xy = 1020;
    printf("%d\n", xy);       // 输出 1020
    return 0;
}

参数化的宏

#include <stdio.h>
#define MAX(x,y) ((x) > (y) ? (x) : (y))
 
int main(void)
{
   printf("Max between 20 and 10 is %d\n", MAX(10, 20));  
   return 0;
}

sfr 关键字

在C51语言中,使用sfr关键字可以方便地定义和访问这些特殊功能寄存器。

使用方法

#include <REG51.H>
sfr P0 = 0x80; // 重新定义P0端口
void main(void) {
    P0 = 0xFF; // 设置P0端口的所有引脚为高电平
    while (1) { // 程序的其他部分 }
}

sbit 关键字

sbit 是 C51 编程语言中用于定义特定于位变量的关键字,即位变量
sbit myBit = 0x80;
myBit = 1; // 将位设置为1
if (myBit) { // 检查位是否为1
    // 做一些操作
}