C语言 - 开发技巧篇

代码注释

C语言中,因为某些原因(比如调试),我们经常需要把一段代码注释掉,许多初学者一般使用/* */来注释你想暂时不需要,可能以后需要的代码,即

c 复制代码
/*  你想注释掉的代码*/

这种做法存在一些可怕的风险,因为在C语言中,注释不允许嵌套,第一个/* 会与第一个*/结合,也就是说如果你注释的代码里面本身就存在用/* */注释,那么你注释这段代码时将会出错,举个例子:

/* int i; /定义记录变量/ */

对于上面的代码,你的本意可能是和颜色所标的一样,但是实际效果却是:

c 复制代码
/*    int i;   /*定义记录变量*/    */  

结果程序出错,当然一般编译器会给你报错,然而这却不是一种好的习惯。

解决的办法是使用预处理指令

c 复制代码
#if 0

你想要注释的code;

#endif

头文件防止重复包含

在C语言中,#ifndef 是一种预处理指令,用于防止头文件或其他代码被重复包含。这是通过使用预处理器的宏定义功能来实现的。以下是使用 #ifndef 及其相关指令防止头文件重复包含的常见规则和步骤:

  1. 定义唯一的宏标识符

    使用 #define 创建一个唯一的宏标识符,通常以项目或文件名的缩写开始,后跟 _H 来表示这是一个头文件。

    c 复制代码
    #ifndef MY_PROJECT_H
    #define MY_PROJECT_H

    这里,MY_PROJECT_H 是宏标识符,MY_PROJECT 是项目或文件的名称。

  2. 放置头文件内容

    #define 指令之后,放置头文件的所有内容。

  3. 结束宏定义

    在文件的末尾,使用 #endif 来结束宏定义的条件编译块。

    c 复制代码
    #endif // MY_PROJECT_H

这种模式被称为"包含守卫"或"头文件卫士"。其工作原理如下:

  • 当预处理器处理文件时,它会检查 #ifndef 后面指定的宏是否已经定义。
  • 如果宏未定义,预处理器将继续包含该头文件的内容,并将宏定义为1(或任何非零值)。
  • 如果宏已经定义(即头文件已经被包含过),#ifndef 条件不成立,预处理器将跳过该文件的所有内容,直到对应的 #endif

规则和最佳实践:

  • 唯一性:确保每个头文件的宏标识符是唯一的,以避免与其他头文件冲突。
  • 位置:将包含守卫放在头文件的最顶部和最底部,确保整个头文件内容都被保护。
  • 命名约定:使用一种一致的命名约定来定义宏标识符,使其易于识别和记忆。
  • 避免宏冲突:不要在头文件之外使用相同的宏名,避免与包含守卫冲突。

使用包含守卫是防止头文件重复包含的标准做法,可以确保编译时的效率和避免潜在的编译错误。

相关推荐
嫣语岁月8 分钟前
【BMS电池管理】基于BQ76920与STM32的BMS设计开发
c语言·vscode·stm32·单片机·嵌入式硬件
励志码农1 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet
天高云淡ylz1 小时前
子网掩码的隐形陷阱:为何能ping通却无法HTTPS访问
开发语言·php
汉克老师3 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
希望20173 小时前
Golang Panic & Throw & Map/Channel 并发笔记
开发语言·golang
朗迹 - 张伟3 小时前
Golang安装笔记
开发语言·笔记·golang
yzx9910133 小时前
生活在数字世界:一份人人都能看懂的网络安全生存指南
运维·开发语言·网络·人工智能·自动化
小周同学@4 小时前
谈谈对this的理解
开发语言·前端·javascript
Mr_Xuhhh4 小时前
项目需求分析(2)
c++·算法·leetcode·log4j
橙*^O^*安5 小时前
Go 语言基础:变量与常量
运维·开发语言·后端·golang·kubernetes