• C语言杂谈——预处理程序


    预处理的三种用途:

    1)处理宏常量及宏函数;

    2)合并(include)源文件;

    3)条件性编译。


    (一)#define和#undef

    宏常量

    格式:

    #define  别名  常数或符号

    #define与typedef的区别:

    typedef char* STRING;
    STRING pc1,pc2;

    这意味着pc1,pc2都是STRING类型的变量。

    #define STRING char*
    STRING pc1,pc2;

    这意味着pc1是字符指针变量;pc2是char类型的变量。

    带参数的宏

    文字取代;

    1)一般用法

    #define CLASS(type)  struct type
    
    CLASS(book)
    {
    	int pages;
    	double length;
    	double width;
    }

    处理后变成为:

    struct book
    {
    	int pages;
    	double length;
    	double width;
    }

    2)跨行的宏

    使用“\”可将宏定义切分为数行。

    如:

    //第一个宏
    #define CLASS(type)\
    struct type\
    {
    //第二个宏
    #define END\
    };
    
    //使用宏
    CLASS(book)
    	int pages;
    	double length;
    	double width;
    END;

    预处理后:

    struct book
    {
    	int pages;
    	double length;
    	double width;
    };

    3)##的用法

    //定义宏
    #define FUN(type)\
    type * type_function()
    
    //使用宏
    FUN(int)
    {
    
    }

    预处理后:

    int * type_function()
    {
    
    }

    type_function是一个完整的名称,其中的type并不是参数。

    //定义宏
    #define FUN(type)\
    type * type##_function()
    
    //使用宏
    FUN(int)
    {
    
    }

    预处理后:

    int * int_function()
    {
    
    }

    type##表明此type是参数。

    定义数学表达式:

    1)表达式必须用小括号括住;

    2)参数必须用小括号括住;

    3)参数中避免出现“++”“—”。

    例:

    #define max(x,y)  ((x)>(y) ? (x):(y))
    #define max3(x,y,z)	max(max(x,y),(z))

    #undef (取消宏)

    #define PI 3.1415926
    
    #undef PI
    

    #define ~ #undef 说明宏的有效范围

    (二)条件性编译

    #if	 宏常量
    
    #else
    
    #endif
    

    条件编译的用途:

    1)提高查错能力;

    2)增加程序的可移植性。

    (三)条件性定义

    #ifdef 宏
    #ifndef 宏
    #endif
    #else

    用来解决(防止)重复定义。

  • 相关阅读:
    async/await 的基础使用及原理简介
    ES6---new Promise()使用方法
    JS中三个点(...)是什么鬼?
    export与export default的区别
    原生页面和H5页面的优劣势分析
    原生页面与H5页面区别
    3月9日学习日志
    3月8日学习日志
    3月5日学习日志
    3月4日学习日志
  • 原文地址:https://www.cnblogs.com/hanzhaoxin/p/2781479.html
Copyright © 2020-2023  润新知