您的位置:首页 > 移动开发 > IOS开发

小白学开发(iOS)基础C_预处理指令(2015-07-20)

2015-07-21 12:38 363 查看
//

//  main.c

//  宏定义

//

//  Created by admin on 15/7/20.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#include <stdio.h>

/*

    0. 预处理指令:在程序编译之前处理的指令,C语言的预处理指令只要有三个方面的内容:

                》宏定义

                》文件包含

                》条件编译

          说明:             预处理指令都以符号“#” 开头

                            预处理指令定义后面都不加分号

*/

/*

    1. 宏定义:实际上就是做单纯的替换,即程序编译之前将会替换

        分类:不带参数的宏定义 和 带参数的宏定义

        说明:关键字是 #denfine

             宏名一般都大写, 如果不全大写应在前面加上一个k

*/

int main(int argc, const char * argv[]) {

    

/*

      1.1 不带参数的宏定义:

*/

#define LENGTH 3                     //  宏定义后不需要加分号!

    

    int array[LENGTH] = {1, 2, 3};   //  这里LENGTH就是3

    

    for (int i = 0; i < LENGTH; i++) {

        printf("array[%d] = %d\n", i, array[i]);

    }

//  提前结束宏定义的作用范围

#undef LENGTH

    

//    int num = LENGTH;              //这里赋值是错误的

//    printf("num = %d", LENGTH);

    

/*

      1.2带参数的宏定义

               说明:    ()里面的参数不需要写类型

                        ()和后面要替换的内容之间一定有要空格

            使用场合:      宏定义的效率比较高,可以做一些简单的运算操作,复杂的运算不行

*/

    

#define SUM(v1, v2) (v1 + v2)        //  带两个参数v1和v2, 这里不需要写参数类型

#define PF(v) (v * v)                //  这种定义是有问题的 参数复杂会出现计算错误,就是下面第三个例子

    

    int a = 2;

    int b = 3;

    int result = SUM(a, b);

    printf("result = %d\n", result);

    

    int result1 = PF(a);

    printf("result1 = %d\n", result1);

    

    int result2 = PF(a + b);         // 这里预想应输出:25 但实际输出是:result2 = 11

    printf("result2 = %d\n", result2);  //  出现了计算错误,实际计算步骤为:a + b * a + b

                                     //  因此为保证计算正确 定义时应为 #define PF(v) ((v) * (v))

                                     //  使用括号提升计算优先级,保证计算正确

    return 0;
}

 //

//  main.c

//  多条件编译

//

//  Created by admin on 15/7/20.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#include <stdio.h>

#define A 2

int main(int argc, const char * argv[]) {

/*

    1. 条件编译: 有些语句希望在条件满足时才编译

*/

    

#if A == 1

    printf("123\n");

#elif A == 2

    printf("456\n");

#else 

    printf("789\n");

#endif                  //  结束标识 必须要有

    

/*

    2. 真实开发中,使用场景

*/

    

#if A ==1

#define AAA "test"

    

#else

#define AAA "yonghu"

    

#endif

    printf("AAA = %s\n", AAA);

    

#ifdef A                    //  如果定义了宏。。

    printf("定义了宏A\n");

#endif

    

#ifndef A                   //  如果没有定义宏。。

    printf("没有定义宏A\n");

#endif

    

//  一下两个形式和上面两个是等价的

#if defined(A)

    printf("定义了宏A\n");

#endif

    

#if !defined(A)

    printf("没有定义宏A\n");

#endif

    

    return 0;

}

 //

//  main.c

//  文件包含

//

//  Created by admin on 15/7/20.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#include <stdio.h>

//  文件包含后,不会参与编译,仅仅是用来被拷贝到这个文件

#include "xjx.h"

//  这里仅将xjx.h文件中的内容拷贝过来

int main(int argc, const char * argv[]) {

    int i = 10;

    int j = 20;

    int result = sum(i, j);

    printf("result = %d", result);

//  这里main.m文件中没有声明和定义 sum函数,文件包含后可直接引用

//  注意:     > 文件包含中有双引号和尖括号两种形式,这两中形式只是表示系统

//              搜索文件的路径顺序不同   通常系统文件用< > 自定义文件用 “”

//            > 文件不能相互包括,这样会造成死循环

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 ios 开发 笔记