行是知之始,知是行之成。这篇文章主要讲述嵌入式C语言的高级使用(全网最详细)相关的知识,希望能为你提供帮助。
嵌入式C语言的高级使用(全网最详细)
一、宏宏,在我看来是一个C语言中的一大特色,在此基础上可以使用一些特殊的功能。
1.1 变类型参数宏
在一些运用场景下,我们常常要用到类似于二者求最大、最小值,常常将这样的简单的一个功能封装为一个方法函数,但在函数的语法中,要明确定义参数的变量类型,也就是不同类型的变量需要建立相对不同的函数,但我们使用一些特殊的手段,就可以用宏实现不定类型的带参宏。见如下例子:
#define max(x,y)({\\
typeof(x) _x = (x);
\\
typeof(y) _y = (y);
\\
(void)(&
_x == &
_y);
\\
_x >
_y? _x:_y;
})
- 首先我们来解析一下,这段代码的部分功能。
对于可变参数,我们其实很熟悉,但你可能还不知道。大家还记得一开始学习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);
}
}
文章图片
推荐阅读
- zabbix监控mysql_slave状态
- 如何执行许多ajax请求并使用jQuery $ .ajax仅在1个回调中获得结果
- 如何在Laravel中检索信息和任何加密货币(比特币,以太坊)的值
- 如何使用OCRA在Windows中从Ruby脚本创建可执行文件(.exe)
- 如何使用Artyom.js在ReactJS中创建自己的语音助手
- 使用CSS删除内联块元素之间的空白(Gap)
- 如何使用jQuery将YouTube视频用作页面背景
- 如何在React中从父组件执行子组件功能
- 如何通过jQuery UI Touch Punch在移动(触摸)设备上使用jQuery UI功能