预处理程序

作者:追风剑情 发布于:2019-2-26 12:57 分类:Objective-C

示例

main.m

#import <Foundation/Foundation.h>

// 所有的宏定义可以写在一个单独的头文件(xxx.h)中,然后使用#import "xxx.h"导入使用。
// 宏命名方式: 1 全用大写字母 2 用小写字母k开头,后面的单词用驼峰式命名
// 预处理程序
#define TWO_PI 2.0 * PI
#define PI 3.141592654

#define SQUARE(x) ((x) * (x))
//#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )

// 定义一个用来判断是否为润年的宏,用反斜线换行。
// #define IS_LEAP_YEAR year % 4 == 0 && year % 100 != 0 \
// || year % 400 == 0

// 更合理的方式是定义一个方法宏
#define IS_LEAP_YEAR(y) y % 4 == 0 && y % 100 != 0 \
|| y % 400 == 0

// 条件编译
// #ifdef、#endif、#else、#ifndef、#elif语句
//#define IPAD 1
//或者无需定义值
#define IPAD

#ifdef IPAD
// 允许在#号后放一个或多个空格
#  define kImageFile @"barnHD.png"
#else
#  define kImageFile @"barn.png"
#endif

//用命令行编译时与可以定义宏
//-D必须在程序名称之前输入
//例如 clang -fobjc -arc -D IPAD program.m -

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int v = 10;
        //int y = ((v+1) * (v+1));
        int y = SQUARE(v+1);
        NSLog(@"y=%i", y);
        
        int year = 2020;
        if (IS_LEAP_YEAR (year)) {
            NSLog(@"%i is leap year", year);
        }else{
            NSLog(@"%i is not leap year", year);
        }
        
        // 条件编译
        NSLog(@"kImageFile: %@", kImageFile);

        // 下面两种方式的宏判断作用相同
#if defined (DEBUG)
        NSLog(@"debug mode ...");
#endif
        
#ifdef DEBUG
        NSLog(@"debug mode ...");
#endif
        //
#if !defined (DEBUG)
        NSLog(@"!debug mode ...");
#endif
        
        //判断如果定义了DEBUG宏,且值为非0
#if defined (DEBUG) && DEBUG
        NSLog(@"debug mode !0 ...");
#endif
        
        //利用宏注释代码块
#if 0
        NSLog(@"注释掉的代码块");
#endif
        //消除IPAD宏的定义
#undef IPAD
    }
    return 0;
}

运行测试
111.png

标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号