#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
}

  1. #include<CHAP01.h>
  2.  
  3. #define i -1
  4.  
  5. void main()
  6. {
  7. // int i;        条件编译的条件一般由 #define 去定义, int 类型的变量不能起到效果
  8. // scanf_s("%d", &i);
  9. #if (i > 0)
  10. {
  11. printf("%d\n", i);
  12. printf("You defined stone!\n");
  13. }
  14.  
  15. #elif (i == 0)
  16. {
  17. printf("%d\n", i);
  18. printf("You defined river!\n");
  19. }
  20.  
  21. #else
  22. {
  23. printf("%d\n", i);
  24. printf("You defined NULL!\n");
  25. }
  26.  
  27. #endif
  28. }

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

  1. #include<CHAP01.h>
  2.  
  3. //#define stone
  4.  
  5. #ifdef stone
  6. void main()
  7. {
  8. printf("You defined stone!\n");
  9. }
  10. #else
  11. void main()
  12. {
  13. printf("You defined NULL!\n");
  14. }
  15. #endif

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

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

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

  

 

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

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

    2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...

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

    本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif….这篇博文写得特别好,特转载. 本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何 ...

  3. C 和 Object-C中的 #ifdef #ifndef

    很多宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时 ...

  4. C/C++预处理指令#include,#define,#undef,#if,#ifdef,#ifndef,#elif,#endif,#error......

    本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下 ...

  5. iOS 小知识 - #if , #ifdef , #ifndef.

    Q : 在项目的 .h 文件中, #ifndef XXX_h #define XXX_h //程序段1 #endif  /* XXX_h */ 的作用? A : 如果 XXX.h 不存在,就引入 XX ...

  6. c语言中的#ifdef和#ifndef

    #include "stdio.h"#include "conio.h"#define MAX#define MAXIMUM(x,y) (x>y)?x:y ...

  7. c语言之【#ifdef】

    电脑程序语句,我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码. 1 2 3 #ifdef 语句1     // 程序2 #endif 可翻译为:如果宏定义了语句1则程序2. 作用:我 ...

  8. 史上最全条件编译解析 #ifdef #ifndef #undef #else #endif

    C语言和C++语言程序中广泛存在着#ifdef或#ifndef等条件编译语句,本篇就系统介绍下他们的用法. 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分 ...

  9. C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解 (转)

    (源)http://blog.csdn.net/sky1203850702/article/details/42024673 首先,让我们先从头文件开始,在很多头文件里,我们会看到这样的语句 #ifn ...

随机推荐

  1. 国内环境安装k8s

    环境准备 1. 配置/etc/hosts文件,将所有机器配置成通过主机名可以访问. 2. 如果环境中有代理,请一定要在环境变量中将no_proxy配置正确. 3.  master还需要执行下面的命令 ...

  2. 何给域名配置https证书

    原文链接:https://www.cnblogs.com/ymwang/p/6893105.html http和https的区别就是,后者在网络传输过程中会很安全,原因就是给http安装了SSL证书. ...

  3. docker入门实例

    Docker 是什么? 我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机. 每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用. 每一台虚拟机包括应 ...

  4. JavaScript形而上的For循环中的Break

    break相当于循环中的GOTO,需避免使用. 下面是一个break使用例子. 找出第一个months小于7的项目. const cats = [ { name: 'Mojo', months: 84 ...

  5. java 枚举使用教程

    转载:https://blog.csdn.net/newbie_907486852/article/details/81027512 一.枚举型常量 首先枚举是一个特殊的class,这个class相当 ...

  6. 解决IE11安装时需要“获取更新”(IE11离线安装)

    方法一:说明:目前是针对Windows7 64位操作系统安装! 1. 在C盘下新建文件夹,取名为“IE11”. 2. 将官网下载的IE11离线包放到此文件夹中. 3. win + r 打开运行窗口,输 ...

  7. 在Python中使用SMTP发送电子邮件

    Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...

  8. java笔记 -- java字符串

    概念: Java字符串就是Unicode字符序列, Java没有内置的字符串类型, 而是在标准Java类库中提供了一个预定义类. 每个用双引号括起来的字符串都是String类的一个实例.String ...

  9. 用JavaScript比较两个数组是否相等

    JS怎么比较两个数组是否有完全相同的元素?Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都会返回false alert([0,0,0]= ...

  10. Oracle 动态sql

    静态SQL是前置编译绑定,动态SQL是后期执行时才编译绑定. 场景: 动态SQL适用于表名及查询字段名未知的情况.在已知查询字段名及表名的情况下,使用动态SQL(字符串拼接方式)会增加硬解析的开销,在 ...