C语言12-预处理指令

1.预处理语句

什么是预处理语句:C语言中在编译源程序之前会对,会对一些特殊的预处理语句做解释,将解释后的语句作为源程序的一部分,最后才编译整个源程序

C语言中通常的预处理语句有:宏定义,文件包含,条件编译

预处理语句的作用范围:预处理语句可以出现在C程序中的任何部位,它的作用是从出现地方到程序结尾,如果是出现在源程序头部则作用范围是整个源程序

预处理语句的格式:预处理语句通常以#符号开头,并且结尾不用分号

 

2.宏定义

宏定义有两种:一种是没有参数的,一种是有参数的

没有参数的宏定义格式:#define 宏名 (常量),宏名通常大写,但也可以小写 括号表示可有可无,注意结尾没有分号,它的作用就是在预编译时讲源代码中所有不在双引号中的宏名换成常量

比如这里我们还可以通过宏定义定义圆周率PI,还要注意,宏定义在预编译的时候是不会检查语法对错的,它只会替换源代码中的宏名,只有在编译的时候才会检查语法错误

#include <stdio.h>
#define NUM 6           //注意宏定义后面没有分号,在预处理时,系统会自动将源代码中的没有加双引号的NUM替换成6
int main(int argc, const char * argv[])
{
    int a[NUM]={1,2,3,4,5,6};
    for (int i=0; i<NUM; i++) {
        printf("%d\n",a[i]);
    }
    printf("NUM\n");      //在预编译的时候不会替换双引号中的NUM
    return 0;
}

 

#include <stdio.h>
#define arr 100
int main(int argc, const char * argv[])
{
    int a[3]=arr;               //这个语法错误,但是宏定义在预编译时是不会检查语法错误的,只会替换对应的宏名
    printf("%d\n",a[0])
    return 0;
}

 

有参数的宏定义格式:#define 宏名(参数1,参数2) 字符串表达式,括号表示可有可无,注意结尾没有分号

定义有参数的宏定义的时候要注意3点:

第一点:将参数括起来,否则计算结果不准确

第二点:还要将计算结果括起来,否则计算结果不准确

第三点:宏名和参数括号之间不能有空格,否则空格后面的字符串会当场字符串表达式

还要注意一点,宏定义在预编译的时候是不会检查语法格式的,只有在编译的时候才会检查语法,所以我们在宏定义中传的值最好按照要求传值,否则在编译的时候会报错

 

 

明天待续——————

 

posted @ 2014-02-27 16:11  ysfox  阅读(224)  评论(0)    收藏  举报