#ifdef、#ifndef、#else、#endif执行条件编译

我们开发的程序不只在pc端运行,也要在移动端运行。这时程序就要根据机器的环境来执行选择性的编译,如对PC端编译PC端的程序,对移动端编译移动端的程序,这里我们就可以用两组条件编译。

    1. #ifdef  #endif
    2. #ifndef #endif

我们先来了解下#ifdef ...#endif;语法格式是:

#ifdef 宏名字           |#ifdef 宏名字

//任意代码             |//任意代码

#endif                       |#else

|//任意代码

|#endif

上面的两种格式是,如果指定了宏,就会执行#ifdef ... #endif中的代码。

//
//  main.m
//  Hong_Test
//
//  Created by 程英暾 on 2017/3/20.
//  Copyright  2017年 程英暾. All rights reserved.
//
#import <Foundation/Foundation.h>
#define iPad
int main(int argc, const char * argv[]) {
@autoreleasepool {
#ifdef iPad
NSLog(@"this is ipad");
#else
NSLog(@"this is iphone");
#endif
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}

执行的结果就是:

2017-03-20 22:54:22.010569 Hong_Test[8061:318230] this is ipad

我们来分析一下,首先我们定义了宏#define iPad,接下来程序会对宏进行查找,找到后,就会根据我们定的条件编译需要编译的程序。其实和if...else...if差不多。但为什么会有这种些,事物存在就有存在意义,有两点,1.我们在调试程序时会写很多语句,在正式布时只要去掉宏就可以了,其二这种条件编译可以减少程序的体积。

下面我们用#if...#else...#endif来进行一个实例操练,结束今天的学习

//
//  main.m
//  Hong_Test
//
//  Created by 程英暾 on 2017/3/20.
//  Copyright  2017年 程英暾. All rights reserved.
//
#import <Foundation/Foundation.h>
#define age 30
int main(int argc, const char * argv[]) {
@autoreleasepool {
#if age>60
NSLog(@"老人");
#elif age>40
NSLog(@"中年人");
#elif age>20
NSLog(@"青年");
#endif
}
return 0;
}

结果:青年

时间: 2024-08-28 16:03:58

#ifdef、#ifndef、#else、#endif执行条件编译的相关文章

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++】预处理指令#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

#ifndef #define #endif 的用法

1.文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突. 还是把头文件的内容都放在#ifndef和#endif中吧.不管你的头文件会不会被多个文件引用,你都要加上这个.一般格式是这样的: #ifndef <标识> #define <标识> ...... ...... #endif <标识>在理论上来说可以是自

#ifndef#define#endif的用法

文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突. 还是把头文件的内容都放在#ifndef和#endif中吧.不管你的头文件会不会被多个文件引用,你都要加上这个.一般格式是这样的: #ifndef <标识> #define <标识> ...... ...... #endif <标识>在理论上来说可以是自由命

#ifndef, #define, #endif 作用

#ifndef 它是if not define 的简写,是宏定义的一种,确切的说,是预处理功能三种(宏定义.文件包含.条件编译)中的一种----条件编译. 在c语言中,对同一个变量或者函数进行多次声明是不会报错的. 所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,多个c文件包含同一个h文件也不会报错. 但是在c++语言中,#ifdef的作用域只是在单个文件中. 如果h文件里定义了全局变量,即使采用#ifdef宏定义,多个c文件包含同一个h文件还是会出现全局变量重定义的错误.

C++头文件为什么要加#ifndef #define #endif

#ifndef 在头文件中的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时 ,就会出现大量“重定义”的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定义. 方法:例如要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H                 //一般是文件名的大写 头文件结尾写上一行: #endif 这样一个工程文件里同时包含两个test

#ifndef #define #endif 防止头文件被重复引用

想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?   其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的.比如:存在a.h文件#include "c.h

浅谈c/c++头文件中#ifndef/#define/#endif的用法

想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 1. 其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的.如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include &q