C语言的#if #ifdef #ifndef

#if #ifedf #ifndef

   —般情况下,C语言源程序中的每一行代码.都要参加编译。但有时候出于对程序代码优化的考虑.希望只对其中一部分内容进行编译.此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是条件编译!

  条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,

  条件编译里面有判断语句,比如 #if 、#else 、#elif 都由#endif结束

  它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如

  

#include<CHAP01.h>

#define i -1

void main()
{
#if (i > 0)
{
printf("%d\n", i);
printf("You defined stone!\n");
}

#elif (i == 0)
{
printf("%d\n", i);
printf("You defined river!\n");
}

#else
{
printf("%d\n", i);
printf("You defined NULL!\n");
}

#endif
}

#include<CHAP01.h>

#define i -1

void main()
{
//    int i;        条件编译的条件一般由 #define 去定义, int 类型的变量不能起到效果
//    scanf_s("%d", &i);
#if (i > 0)
    {
        printf("%d\n", i);
        printf("You defined stone!\n");
    }

#elif (i == 0)
    {
        printf("%d\n", i);
        printf("You defined river!\n");
    }

#else
    {
        printf("%d\n", i);
        printf("You defined NULL!\n");
    }

#endif
}

  #ifdef   判断宏是否定义, 是就执行ifdef下的代码, 否则执行else下的代码

#include<CHAP01.h>

//#define stone

#ifdef stone
    void main()
    {
        printf("You defined stone!\n");
    }
#else
    void main()
    {
        printf("You defined NULL!\n");
    }
#endif

  #ifndef    一般用于检查定义, 防止重复定义

  #ifndef stone             // 如果VALUE没有被定义
  #define stone1000          //  定义VALUE 为1000
  #endif

  自我理解, 不对的地方请指正!

  

 

原文地址:https://www.cnblogs.com/stoneriver/p/10025856.html

时间: 2024-08-11 01:46:48

C语言的#if #ifdef #ifndef的相关文章

C/C++预处理指令#define,#ifdef,#ifndef,#endif…

本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif结束一个#if……#else条件编译块 #error停止编译并显示错误信息 本来只是想了解一下#ifdef,#ifnd

C/C++预处理指令#define,#ifdef,#ifndef,#endif… (转)

本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif….这篇博文写得特别好,特转载. 本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #en

c语言中的#ifdef和#ifndef

#include "stdio.h"#include "conio.h"#define MAX#define MAXIMUM(x,y) (x>y)?x:y#define MINIMUM(x,y) (x>y)?y:xvoid main(){int a=10,b=20;#ifdef MAXprintf("\40: The larger one is %d\n",MAXIMUM(a,b));#elseprintf("\40: Th

C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解

首先,让我们先从头文件开始,在很多头文件里,我们会看到这样的语句 #ifndef _MYHEADFILE_H #define _MYHEADFILE_H // .......语句...... #endif // _MYHEADFILE_H 为了避免同一个文件被include多次,我们常使用 #ifndef 进行判断,如果没有包含 _MYHEADFILE_H , 则使用#define 来定义一个宏 _MYHEADFILE_H , #endif 与#ifndef 首尾呼应,表示结束. 说到这里,我们

关于#ifdef #ifndef

1.先看#ifdef的用法: #define KEY1_PA0 #ifdef KEY1_PA0 -------------第一段----------------- #define macKEY1_GPIO_CLK RCC_APB2Periph_GPIOA #define macKEY1_GPIO_PORT GPIOA #define macKEY1_GPIO_PIN GPIO_Pin_0 #else //KEY2_PC13 -------------第二段----------------- #d

【C++】预处理指令#define,#ifdef,#ifndef,#endif ...

C/C++预处理指令#define,#ifdef,#ifndef,#endif… https://www.cnblogs.com/zi-xing/p/4550246.html 原文地址:https://www.cnblogs.com/gdut-gordon/p/10922812.html

条件编译#ifdef的妙用详解_透彻

这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部 分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句.     条件编译命令最常见的形式为:     #ifdef 标识符     程序段1     #else     程序段2     #endif          它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序

C语言笔记之条件编译

上篇文章中主要介绍了#define的用法,本文介绍几个它的"近亲". 1.#undef C语言不允许对同一个宏名称重复定义,比如下面的写法编译时会报错: #define R 3 #define R 4 那么#undef就是用来取消对一个宏名的定义的,取消之后我们才可以重新使用它. #define R 3 #undef R #define R 4 即使开始没有定义 R ,取消 R的定义也是合法的.如果想使用一个特定名字,但又不能确定前面是否已经使用了该名字,为安全起见,就可以取消该名字的

C语言要点笔记

一.基础 1. 位运算补码(取反加一)是为了计算负数. 2. 编译原理: 源文件--.i文件--.s文件(汇编文件)--.o文件(二进制文件)--可执行文件(预处理--汇编--编译--执行) 3. Gcc(C语言编译器)+vim(linux自带的字符编辑器) [eg.  vim 文件名,gcc 文件名,./a.out(输出)] 4. C语言基础语法: 1)if嵌套最多15层,If语句一般三到四层,else if最多写7个,switch(里面的表达式只能是char和Int类型). 2)循环语句的老