一、具体代码与分析如下
#include <stdio.h> /* 1.C语言的条件编译宏是预处理阶段的指令,用于根据指定条件决定代码段是否参与编译; 2.#ifdef MACRO/#endif:判断 MACRO 是否被#define定义; 3.#ifndef MACRO/#endif:判断 MACRO 是否未被定义; 4.#if/#elif/#else/#endif:判断常量表达式是否为真; 5.#if defined(MACRO):结合#if和定义判断。 */ int main() { /*********************************/ #undef DEBUG #define DEBUG #ifdef DEBUG printf("#define DEBUG 输出\n"); #endif //结束条件编译块,是必备的闭合指令 /*********************************/ #undef DEBUG1 #ifndef DEBUG1 printf("#undef DEBUG1 输出\n"); #endif //结束条件编译块,是必备的闭合指令 /*********************************/ #define PLATFORM 3 //#undef PLATFORM #if PLATFORM == 1 #define OS "Linux" #elif PLATFORM == 2 #define OS "Windows" #elif PLATFORM == 3 #define OS "macOS" #else #define OS "Unknown" #endif /* #define PLATFORM 1 输出OS为:"Linux" #define PLATFORM 2 输出OS为:"Windows" #define PLATFORM 3 输出OS为:"macOS" 都不定义 输出OS为:"Unknown" */ printf("OS:%s\n",OS); /*********************************/ //#define ARMv7 #define ARMv8 #if defined(ARMv7) || defined(ARMv8) #define HAS_CAN 1 #define HAS_ETH 1 #elif defined(x86) #define HAS_CAN 0 #define HAS_ETH 0 #endif /* #define ARMv7 或 #define ARMv8输出OS为:"HAS_CAN:1,HAS_ETH:1" #define x86 输出OS为:"HAS_CAN:0,HAS_ETH:0" 都不定义 输出OS为:"Unknown" */ printf("HAS_CAN:%d,HAS_ETH:%d\n", HAS_CAN, HAS_ETH); return 0; }