zoukankan      html  css  js  c++  java
  • 应用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中。“文件包含”命令可以节省程序设计人员的重复劳动,比如在某个头文件中定义了一些共用的宏定义、全局变量、结构体、函数等等,这样其他文件都可以通过“文件包含”命令来把这个文件包含进来,这样就可以使用此文件中的定义了。

  • 相关阅读:
    C库函数中字符串处理函数集合(转)
    浅谈C++底层机制
    vc2008快捷键
    Delphi格式输出的用法
    Devenv 命令行开关
    DX皮肤控制
    C#格式化
    linq查询DataView
    WCF中的session用法
    VS2012clickonce发布问题
  • 原文地址:https://www.cnblogs.com/liang123/p/6325715.html
Copyright © 2011-2022 走看看