语句格式:
#ifdef   xxx_GLOBALS
#define  xxx_EXT
#else
#define  xxx_EXT extern
#endif
AI写代码
c
运行
1
2
3
4
5
语句说明:
定义全局变量,避免在.c和.h文件中重复定义。
1.若在.c文件中有如下定义:

#define  xxx_GLOBALS
AI写代码
c
运行
1
则编译器在处理该文件时,强制xxx_EXT为空所以会给每个全局变量分配内存空间。

2.在处理其他.c文件时,xxx_GLOBALS未定义,则xxx_EXT被定义为extern,这种情况下不产生内存分配,任何.c文件都可以使用这些变量,这样就只需要在.h文件中定义一次就可以了,定义方法:

xxx_EXT 变量;
AI写代码
c
运行
1
在编写程序时,尽可能少用全局变量,使用时也要注意,防止在程序运行中重入导致出错。
————————————————
版权声明:本文为CSDN博主「~狂想家~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_42731525/article/details/106276507

#ifdef globals_adc 是 C 语言中的条件编译指令,用于检查宏 globals_adc 是否已定义。如果该宏已定义,则编译其后的代码块;否则跳过该部分代码。

具体含义

  • #ifdef:表示“如果宏已定义”。
  • globals_adc:需检查的宏名称。
  • 作用:控制代码的编译范围,常用于区分不同编译环境(如调试/发布版本)或平台适配。 ‌12

示例场景

若代码中存在:


cCopy Code

#ifdef globals_adc // 仅在定义了 globals_adc 时编译的代码 #endif

当宏 globals_adc 被定义(如 #define globals_adc),则执行 #ifdef 与 #endif 之间的代码;否则忽略该部分。 ‌13

常见用途

  • 平台适配:区分不同硬件平台的代码。
  • 调试开关:通过定义宏启用调试信息。 ‌24

宏可以定义为空,

在C语言中,宏(Macro)是通过预处理器指令#define定义的。宏可以定义为空,这在某些情况下有其用途,例如在某些调试阶段临时禁用某些代码块,或者在宏的定义中仅仅是为了提供一个占位符。下面是如何定义和使用空宏的示例:

定义空宏

定义一个空宏很简单,只需要在#define指令后跟宏名,然后什么都不写(或者简单地写一个分号;来表示空操作):


cCopy Code

#define MY_MACRO

或者,为了明确表示这是一个空操作,可以这样写:


cCopy Code

#define MY_MACRO (void)0

这里的(void)0实际上是一个空操作,等同于什么都不做。在一些宏定义中,特别是在涉及到多个语句的情况下,使用do { } while(0)可以更安全地封装宏定义,避免潜在的代码块问题。例如:


cCopy Code

#define MY_SAFE_MACRO do { } while(0)

使用空宏

空宏通常用在条件编译或者在某些情况下需要占位符的场景。例如,你可能想在某些编译条件下完全禁用某个功能,但又不想删除或注释掉相关的代码行:


cCopy Code

#ifdef DISABLE_FEATURE #define FEATURE_MACRO MY_MACRO #else #define FEATURE_MACRO some_feature_function() #endif void some_function() { FEATURE_MACRO; // 这里如果DISABLE_FEATURE被定义,则不执行任何操作 }

在这个例子中,如果DISABLE_FEATURE被定义了,FEATURE_MACRO就会展开为MY_MACRO,即不做任何操作。否则,它会展开为some_feature_function()

注意事项

  • 使用空宏时应当注意其上下文。在某些情况下,仅仅定义一个空宏而不加以任何条件编译可能会导致编译器警告或错误,尤其是在期望宏展开为有效代码的场景中。因此,确保使用场景的正确性和必要性是很重要的。
  • 使用(void)0或者do { } while(0)这样的结构可以帮助避免潜在的宏展开问题,特别是在包含多个语句的宏中。
  • 空宏主要用于调试和条件编译,确保在不需要它们的情况下不会被意外使用或执行。

总之,虽然C语言允许定义和使用空宏,但应当谨慎使用,并确保其使用场景的正确性和

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐