#if,#ifdef和#ifndef三者之间的区别

Posted Zhang Jun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#if,#ifdef和#ifndef三者之间的区别相关的知识,希望对你有一定的参考价值。

条件编译

预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。 这对于程序的移植和调试是很有用的。

条件编译的三种形式

  1. 第一种形式:

    #ifdef 标识符 
    程序段1 
    #else 
    程序段2 
    #endif 
    

    它的功能是,如果标识符已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。

  2. 第二种形式:

    #ifndef 
    标识符 
    程序段1 
    #else 
    程序段2 
    #endif 
    

    与第一种形式的区别是将ifdef改为ifndef。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译, 否则对程序段2进行编译。这与第一种形式的功能正相反。

  3. 第三种形式:

    #if 常量表达式 
    程序段1 
    #else 
    程序段2 
    #endif 
    

    它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。

附注—》#elif 用法

#elif指令可以被认为是#else if

#elif指令必须由#endif指令关闭

#include <stdio.h>
 
#define YEARS_OLD 12
 
int main()

   #if YEARS_OLD <= 10
   printf("TechOnTheNet is a great resource.\\n");
   #elif YEARS_OLD > 10
   printf("TechOnTheNet is over %d years old.\\n", YEARS_OLD);
   #endif
 
   return 0;

以上是关于#if,#ifdef和#ifndef三者之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

#if vs #ifndef vs #ifdef

makefile中ifeq,ifneq,ifdef和ifndef的区别与用法

#if 和 #ifdef Objective-C 预处理器宏有啥区别?

关于#if defined和#ifdef

C++中#if #ifdef 的作用

makefile中ifeq,ifneq,ifdef和ifndef的区别与用法