关于#if defined和#ifdef

Posted

tags:

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

查阅了相关资料,这两个应该是没有什么区别的,#if defined应用范围更广。
使用过程中发现,
1)在头文件中,使用#ifdef xxxxx,发现生效,而使用#if defined(xxxx)则可以
2)在.c文件中,使用两者没有区别。

谁清楚这其中的原理呢?xxxxx的定义是在工程中的。

参考技术A 没什么却别

#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 defined和#ifdef的主要内容,如果未能解决你的问题,请参考以下文章

Makefile 中:=和=的区别(?=+=)

Makefile 中:=和=的区别(?=+=)

Makefile ------ := ?= += =的区别

Makefile中的= ?= += =的区别

Makefile 中:= ?= += =的区别

Makefile 中:= ?= += =的区别