主要是熟悉 C 语言中的有关除了基础语法的外的关键字,并讲解一般的使用场景!

关键字语义

关键字名 语义
#define 定义一个预处理宏
#undef 取消宏的宏
#if 编译预处理中的条件命令,相当于 C 语法中的 if 语句
#ifdef 判断某个宏是否为定义,若已定义,执行随后的语句
#ifndef 与#ifdef相反,判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的 else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined 与#if, #elif配合使用,判断某个宏是否被定义

#ifndef的用法

#ifndef的语义是判断某个宏是否未被定义。起到的效果是防止一个源文件两次包含同一个头文件,而不是防止两个源文件包含同一个头文件。

  • 使用场景:
    • 在头文件的声明中加上 #ifndef..#endif,那么同一个源文件无论引用多少次头文件都不会重复。
      1
      2
      3
      4
      5
      6
      #ifndef _STDIO_H_
      #define _STDIO_H_

      ......

      #endif
    • #ifndef中定义变量出现的问题,
      1
      2
      3
      4
      5
      6
      #ifndef AAA
      #define AAA
      ...
      int i;
      ...
      #endif

      defined

defined 用来测试某个宏是否被定义。defined(name): 若宏被定义,则返回 1 ,否则返回 0 。 与#ifdef和#ifndef不同之处是,它们可以判断多个条件,而#ifdef和#ifndef只能有一个条件。

1
#if defined(VAX) && defined(UNIX) && !defined(DEBUG)