目录
编写不易,仅供学习,请勿搬运,感谢理解
嵌入式C/C++语言教程专栏文章连接
本篇万字,博客最细,嵌入式C语言基础详解教程文章!!!(学不会来找我)_csdn嵌入式学习-优快云博客
你真的理解,volatile关键字嘛?,本篇3K字,放心食用,立志最细。(看不会找我!!!)_单片机防编译优化-优快云博客
//双斜杠单行注释用法
在C语言工程文件中,//双斜杠加注释,是标准的单行注释用法,编译器会自动忽略这行//开始到行尾结束的内容,同时不会跨行影响到其他的代码内容,也因为这个特性所以只适合单行注释,如果用来多行注释,每次都要重复写一次//作为注释开通。
static int Flag_State;
//static int Flag_State; 单行注释用法
下面代码是使用 //作为多行注释,会显得繁琐还有点不好用。
static int Flag_State;
Flag_State = (++Flag_State)%2;
//static int Flag_State;
//Flag_State = (++Flag_State)%2;
不过单行注释因为自身的特性,当需要再每行代码后面加注释来解释这行代码是干什么用的时候,更推荐单行注释,而不是多行注释,前者看起来更加简洁一点,虽然使用多行注释也能逐行解释代码的功能,但是明显不合适。
同时 //单行注释最初来自于 C++,后来在C99标准中被引入C语言中,在设计时目的是为了提高代码的可读性,同时作为/* ... */ 这种注释方法的补充,而非代替,//较为适合单行注释,而/*...*/是为了满足多行注释的需求。
/**/方法加注释
上文提到了 /*...*/ 这种方法适合多行注释,也就是跨行大块注释。
函数功能注释
一般用于对函数功能进行描述。
/*
初始化GPIO引脚:
1. 启用 GPIO 时钟
2. 配置 GPIO 引脚为输入、输出或复用功能
3. 根据模式选择上下拉或设置输出速度
*/
void GPIO_Init(int pin, int mode) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = (1 << pin);
GPIO_InitStructure.GPIO_Mode = mode;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
源文件作者注释
同时另一种多行注释常用的用法,就是对一个源文件进行添加注释,表明源文件编写的时间,源文件的作者,源文件的版本信息等等。
#ifndef _Init_H_
#define _Init_H_
/**
* @file Init.h
* @brief 外设初始化封装文件
* @author 看,是大狗
* @version 1.0
* @date 2024-12-21
*/
#endif
上面的两种方法也就是多行注释最为常用的两种方法,给函数整体功能描述的时候,多行注释,函数源文件填写作者 时间 版本 的时候使用多行注释。
预处理指令函数注释
使用预处理指令也能进行多行注释,但是这里需要一点预处理指令的基础知识,就不做讲解了,不会的可以看上面写的C语言基础文章,里面有讲到。
#if 0
void GPIO_Init(int pin, int mode) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = (1 << pin);
GPIO_InitStructure.GPIO_Mode = mode;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
#endif
这里的话,因为#if的条件为0,条件不成立,不编译语句块,但是这里需要注意的是,#if预处理指令的语句块的范围,#if开始标志着语句块的起始,知道编译器找到了#endif这个预处理指令结束标志语,才代表着语句块的结束,也就是说,在被 #if 到 #endif 之间包含的内容,都是#if预处理指令的语句块。
如果这里将条件改为 1,就能执行编译语句块了
#if 1
void GPIO_Init(int pin, int mode) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = (1 << pin);
GPIO_InitStructure.GPIO_Mode = mode;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
#endif
欢迎指正,希望对你,有所帮助!!!