【嵌入式C语言】预处理器和预处理指令

预处理指令

#define、#include、#ifdef、#else、#endif、
#ifndef、#if、#elif、#line、#error、#pragma

调试

__FILE__    //表示编译的源文件名
__LINE__   //表示当前文件的行号
__FUNCTION__  //表示函数名
__DATE__  //表示编译日期
__TIME__   //表示编译时间
printf("file:%s,line:%d,date:%s,time:%s",__FILE__,__LINE__,__DATE__,__TIME__);

#与##

#:是一种运算符,用于带参宏的文本替换,将跟在后面的参数转成一个字符串常量。

##:是一种运算符,是将两个运算对象连接在一起,也只能出现在带参宏定义的文本替换中。

#include "stdio.h"

#define TO_STR(s) #s
#define COMB(str1,str2) str1##str2

int main(int argc, char *argv[])
{
    int UART0= 115200;

    printf("UART0=%d\n", COMB(UART, 0));//字符串合并为变量UART0
    printf("%s\n", TO_STR(3.14));//将数字变成字符串

    return 0;
}

条件编译

  • #ifdef、#else和#endif指令
#ifdef HI /* 如果用#define 定义了符号 HI,则执行下面的语句 */
#include <stdio.h>
#define STR "Hello world"
#else /* 如果没有用#define 定义符号 HI,则执行下面的语句 */
#include "mychar.h"
#define STR "Hello China"
#endif

#ifdef指令说明,如果预处理器已定义了后面的标识符,则执行#else或#endif指令之前的所有指令并编译所有C代码,如果未定义且有#elif指令,则执行#else和#endif指令之间的代码。

#ifdef、#else和C和if else很像,两者的主要区别在于预处理器不识别用于标记块的花括号{},因此它使用#else(如果需要的话)和#endif(必须存在)来标记指令块。

  • #ifndef指令
    #ifndef指令与#ifdef指令的用法类似,也可以和#else、#endif一起使用,但是它的逻辑和#ifdef指令相反。
  • #if和#elif
    #if指令很像C语言中的if。#if后面紧跟整型常量表达式,如果表达式为非零,则表达式为真,可以在指令中使用C的关系运算符和逻辑运算符:
	#if MAX==1
	printf("1");
	#endif
	可以按照 if else 的形式使用#if #elif:
	#if MAX==1
	printf("1");
	#elif MAX==2
	printf("2");
	#endif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值