zoukankan      html  css  js  c++  java
  • 预处理的几个问题

    一:解决块注释/**/不能嵌套的问题:

        我们知道行注释//可以多层嵌套和逐层取消,而块注释/**/不能嵌套或不能与//混用,否则有可能出现编译错误。通常我们在程序调试时如果要取消一大段代码,可以用条件编译#if 0  #endif实现

    二:避免头文件的重复包含:

         假如a.h中自定义了一个结构体,在b.h和c.h中都又自定义了一个结构体(其成员有a.h的结构体内容,所以b.h和c.h都包含了a.h),而在.c中又用到了b.h和c.h的结构体(所以包含了b.h和c.h),此时因为多次包含了a.h所以编译器会报错,此时只要在a.h中使用#ifndef _debug__  #define _debug__ ....#endif.

    三 宏的嵌套包含:

     #define AA 1

     #define BB 1

    void main(void)

    {

        #ifdef AA

            ……

              #if BB   //嵌套的宏,这里不能再用#ifdef,

                  ……   //否则BB是0也会执行这些代码,

              #else   //而这#else不会被执行

                  ……

              #endif

        #else

            ……

        #endif

    }

    或者这样也行

    #define AA   //使用宏定义做控制开关,此时#ifdef可嵌套

    #define BB   //使用宏定义做控制开关,要关闭时,直接注释掉

    int main()

    {

        #ifdef AA

            ……

            #ifdef BB   //嵌套的宏,如果定义了,则执行

                ……       

            #else  

                ……

            #endif

        #else

            ……

        #endif

    }

  • 相关阅读:
    vue基础知识
    制作离线yum源
    mysql字符集
    confluence 容器版 搭建部署
    iptables和ipvs
    http状态码
    运维相关网站博客集合
    搭建nexus私有maven私服
    MySQL 常见错误代码说明
    nc(瑞士军刀)
  • 原文地址:https://www.cnblogs.com/jieruishu/p/6846895.html
Copyright © 2011-2022 走看看