• 应用C预处理命令


      

    ********************************LoongEmbedded********************************

    作者:LoongEmbedded(kandi)

    时间:2011.10.17

    类别:C基础

    ********************************LoongEmbedded********************************

    很多C编译系统都包含预处理、编译和连接等部分,其中C提供的预处理功能主要有下面三种:

    1)      宏定义

    2)      文件包含

    3)      条件编译

    下面是我在开发WINCE6.0+S3C6410的背光驱动的时候,因为考虑要兼容开发板和实际项目A,利用C预处理功能来处理时遇到的问题的描述和总结,利用C预处理功能所添加的应用如下:

    1)      在bsp_cfg.h中添加下面的宏定义

    #define PROJECT_A

    2)      在backlight_pdd.cpp下的BL_InitPWM()加入下面的条件编译内容

    #ifdef PROJECT_A

    …………………………

    RETAILMSG(1, (TEXT("BL_InitPWM() define A\r\n")));

    #else

    ………………………..

    RETAILMSG(1, (TEXT("BL_InitPWM() no define A\r\n")));

    #endif

    上面条件编译的作用是若所指定的标识符PROJECT_A已经被#define命令定义过(当然了,如果在其他目录下的文件定义,要使用,就必须用文件包含的方式包含进来。),则在程序编译阶段编译RETAILMSG(1, (TEXT("BL_InitPWM() define A\r\n")));所在的程序段;否则编译RETAILMSG(1, (TEXT("BL_InitPWM() no define A\r\n")));所在的程序段。

    3)      编译整个BSP后生成新的NK更新之后,始终输出BL_InitPWM() no define A,因为在bsp_cfg.h中定义了PROJECT_A,那么应该输出BL_InitPWM() define A才对啊。

    当时项目进度很紧,一时找不出问题在哪里,所以换了另外一种的处理方式,现在趁相对有空的时候来查找一个问题的原因,经过仔细检查,是因为没有在backlight_pdd.cpp下没有把定义了宏PROJECT_A的文件包含进来。当时因为在对背光驱动编译的时候没有出现编译出错,所以就没有注意到这个问题,这是我对预处理命令和C语句的理解不太清晰所致,这里强调一点就是:预处理命令不是C语言的一部分,C预处理命令(主要包括宏定义命令、文件包含命令和条件编译命令)是在预处理阶段处理的,而C语句是在编译阶段处理的。

    在backlight_pdd.cpp下没有添加下面文件包含命令

    #include "bsp_cfg.h"

    的情况下,在预处理阶段,第2)点的条件编译处就被认为是没有定义了宏PROJECT_A,自然而然地在程序编译阶段编译RETAILMSG(1, (TEXT("BL_InitPWM() no define A\r\n")));所在的程序段。解决的办法就是在backlight_pdd.cpp下添加文件包含命令#include "bsp_cfg.h"。

    “文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中,这里就是把文件bsp_cfg.h的内容包含到文件backlight_pdd.cpp中。“文件包含”命令可以节省程序设计人员的重复劳动,比如在某个头文件中定义了一些共用的宏定义、全局变量、结构体、函数等等,这样其他文件都可以通过“文件包含”命令来把这个文件包含进来,这样就可以使用此文件中的定义了。

  • 相关阅读:
    01_3_创建一个Action
    01_2_Namespace命名空间
    01_1_Socket实现
    03_2_JAVA中的面向对象与内存解析
    01_1_Struts环境搭建
    Zabbix通过Orabbix监控Oracle数据库
    Zabbix通过JMX方式监控java中间件
    nginx启用status状态页
    zabbix数据库分表的实现
    配置sudo记录日志
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298758.html
Copyright © 2020-2023  润新知