C语言基础(十)- 预处理

KinglyJn      2013-02-26

预处理就是在编译之前所做的事情,所以也叫预编译,主要有宏定义、文件包含处理和条件编译。

宏定义

宏定义指令是指用一个指定的标识符代表一个字符串,可以减少程序中重复书写某些字符串的工作量,使用宏可以达到“一改全改”的代码规范。
宏定义主要分为不带参数的宏定义 和 带参数的宏定义。

//不带参数的宏定义
# define N 10
# define PI 3.14
# define R 2*N*N

//带参数的宏定义
# define S(a,b) a*b  //程序中出现的S(a,b)与a*b等价

/**
* 宏定义测试
*/

# include <stdio.h>

# define PI 3.14
# define CIRCLE(R,L,S) L=2*PI*R;S=PI*R*R;

int main() {
    float r = 10;
    float l,s;

    CIRCLE(r, l, s);
    printf("圆的周长和面积为:%lf,%lf\n", l, s);
    
    return 0;
}
//正常情况下宏的作用范围从定义开始到文件结束
//使用#undef命令可以提前取消宏定义
# undef N
# undef PI
# undef CIRCLE(R,L,S) 


文件包含处理

文件包含处理的说明:

  • 一个 #include 命令只能包含一个被包含的文件,如果要包含n个文件,要用n个 #include 指令
  • 如果文件1包含文件2,而在文件2中要用到文件3的内容,那么在file1.cpp中对包含文件出现的顺序为 #include #include
  • 在一个被包含的文件中又可以包含另一个被包含文件,即文件的包含是可嵌套的
  • 被包含的文件与包含文件在预处理后被处理成一个文件
  • 在c语言中,已经把我们常用到的函数放到了库函数中,并且把一些功能相关的函数归结到一个头文件中,我们常用到的头文件主要有以下几种:
    ctype.h     包含测试字符的函数
    local.h     包含地区化的函数
    math.h      包含数学函数
    string.h	包含字符串函数
    stdio.h     包含标准输入输出函数
    stdlib.h    包含常用的系统函数
    time.h      包含时间和日期函数
    signal.h    包含信号有关的函数
    malloc.h    包含动态内存函数
    

条件编译

  • #ifdef //如果已定义宏
  • #ifndef //如果未定义宏
  • #if //当比爱哦大师为真时就编译程序段1,否则就编译程序段2
/**
* 测试 #ifdef/#ifndef
*/

# define CHINESE 1
# ifdef CHINESE
# include "chinese.h"
# else
# include "english.h"
# endif

int main() {
	//...
	return 0;
}


/**
* 测试 #if
*/

# include <stdio.h>

# define LETTER 1

int main() {
    char c, str[] = "I love C Language!";
    
    int i = 0;
    while ((c=str[i])!='\0') {
        i++;

        #if LETTER
        if (c>='a' && c<='z') {
            c = c-32;
        }
        
        #else
        if (c>='A' && c<='Z') {
            c = c+32;
        }
        #endif
       
        printf("%c", c);
    }
    printf("\n");
    
    return 0;
}

Tags:


Share: