嵌入式C语言的高级使用(全网最详细)

Posted PlayCodes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式C语言的高级使用(全网最详细)相关的知识,希望对你有一定的参考价值。

嵌入式C语言的高级使用(全网最详细)

一、宏

宏,在我看来是一个C语言中的一大特色,在此基础上可以使用一些特殊的功能。

1.1 变类型参数宏

在一些运用场景下,我们常常要用到类似于二者求最大、最小值,常常将这样的简单的一个功能封装为一个方法函数,但在函数的语法中,要明确定义参数的变量类型,也就是不同类型的变量需要建立相对不同的函数,但我们使用一些特殊的手段,就可以用宏实现不定类型的带参宏。见如下例子:

#define max(x,y)({\\
	typeof(x) _x = (x);\\
	typeof(y) _y = (y);\\
	(void)(&_x == &_y);\\
	_x > _y? _x:_y;})
  • 首先我们来解析一下,这段代码的部分功能。

二、可变参数

### 2.1可变参数的简单使用

对于可变参数,我们其实很熟悉,但你可能还不知道。大家还记得一开始学习C语言的时候敲的第一行代码吗?没错就是

printf("hallo wolrd!")

其实printf函数就是使用可变参数实现的,我们看一个例子:

printf(char *fmt,...); 	//这是printf函数的原型
int count = 10;
char sex = \'L\';
printf("%d,%c",count,sex);

2.2 调试

我们在写程序的时候,常常需要打印一些日志。不同的情况下需要打印不同的东西,所以我们常常会有一个调试的模块,下面是使用不定参数实现的一个简单的调式模块程序,如下:

#include <stdarg.h>
#include <stdio.h>

/* 用户需要配置的地方 */
#define USER_DEBUG_LEVEL 3
/*
    ERROR:错误等级的日志    
    WARNIG:警告等级的日志
    DEBUG:调式等级的日志
*/
#if USER_DEBUG_LEVEL>=3
    #define ERROR
#endif 
#if USER_DEBUG_LEVEL >= 2
    #define WARNING
#endif 
#if USER_DEBUG_LEVEL >= 1
    #define DEBUG
#endif 

void printfError(char* fmt ,...)
{
    va_list args;
    va_start(args,fmt);
    #ifdef ERROR
        vprintf(fmt,args);
    #endif 
    va_end(args);
}
void printfWarning(char* fmt ,...)
{
    va_list args;
    va_start(args,fmt);
    #ifdef WARNING
        vprintf(fmt,args);
    #endif 
    va_end(args);
}
void printfDebug(char* fmt ,...)
{
    va_list args;
    va_start(args,fmt);
    #ifdef DEBUG
        vprintf(fmt,args);
    #endif 
    va_end(args);
}
void main(void)
{
    printfError("Error\\n");
    printfWarning("Warning\\n");
    printfDebug("Debug\\n");
}

三、内联函数

内联函数是在编译后将函数体中的内容填充到函数调用的地方,而在运行的时候不用调用函数本身,而是直接执行函数体内的语句。但声明为内联函数,最终是否是内联函数是不确定的。

来看一个简单的例子,如下:

inline int sum(int a ,int b)
{
    return a + b;
}

void main(void)
{
    printf("sum = %d",sum(5,6));
}

内联如下:

inline int sum(int a ,int b)
{
    return a + b;
}
void main(void)
{	
    {
       int a = 5,b = 6;
 	   printf("sum = %d",a + b);
    }
}

以上是关于嵌入式C语言的高级使用(全网最详细)的主要内容,如果未能解决你的问题,请参考以下文章

全网最详细的Python入门基础教程(非常详细,赶紧收藏)

❄️全网最详细的Python入门基础教程,Python最全教程(非常详细,整理而来)

❄️全网最详细的Python入门基础教程,Python最全教程(非常详细,整理而来)

全网最详细XSS跨站脚本攻击,不是过来打死我!!

最全最详细Logback高级讲解

物联网的构建:使用Lua高级语言进行嵌入式开发