关于#if defined和#ifdef
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于#if defined和#ifdef相关的知识,希望对你有一定的参考价值。
查阅了相关资料,这两个应该是没有什么区别的,#if defined应用范围更广。
使用过程中发现,
1)在头文件中,使用#ifdef xxxxx,发现生效,而使用#if defined(xxxx)则可以
2)在.c文件中,使用两者没有区别。
谁清楚这其中的原理呢?xxxxx的定义是在工程中的。
#if,#ifdef和#ifndef三者之间的区别
条件编译
预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。 这对于程序的移植和调试是很有用的。
条件编译的三种形式
-
第一种形式:
#ifdef 标识符 程序段1 #else 程序段2 #endif
它的功能是,如果标识符已被
#define
命令定义过则对程序段1进行编译;否则对程序段2进行编译。 -
第二种形式:
#ifndef 标识符 程序段1 #else 程序段2 #endif
与第一种形式的区别是将
ifdef
改为ifndef
。它的功能是,如果标识符未被#define
命令定义过则对程序段1进行编译, 否则对程序段2进行编译。这与第一种形式的功能正相反。 -
第三种形式:
#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的主要内容,如果未能解决你的问题,请参考以下文章