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
// 做一些操作
}