• C语言中#ifdef,#ifndef和#endif的作用


    现在规定一下头文件书写规范,

    根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中。否则如果出现有定义,比如头文件中有int a =2;如果有多个源程序文件引用该头文件,那么在链接的时候就会出现重复定义,即使在头文件的首尾添加#ifnef,#define ,#enddif这样的形式也挽救不了这种错误,事实上,#ifnef和#enddif的作用仅仅是防止头文件嵌套包含。以下是转载https://blog.csdn.net/weixin_41656968/article/details/80493923

    1、用于注释掉一段代码

    我们自己编写程序的时候,需要看到一系列的调试代码,但是发给客户的时候,客户可不希望看到什么什么OK的代码,所以我们希望能很容易地注释掉这段代码。 
    这时需要用到预处理指令 #ifdef 和 #endif :

    #include <stdio.h>
    #define CONFIG_DEBUG 
    int main(){
        FILE *fp;
        fp=fopen("D:\DEV\test.txt","r"); 
        if(NULL==fp){
            printf("error!");
        }
    #ifdef CONFIG_DEBUG 
        printf("open test.txt ok");
    #endif
        return 0;
    }

    如果文件在那个路径没错的话,将会打印如下信息:

    如果不想要看到这样的调试信息的话,注释掉#define CONFIG_DEBUG这句就行。

    2、防止头文件重复包含

    a.h

    #include <stdio.h>

    #include "b.h"

    b.h

    #include "a.h"

    c.c

    #include "a.h"

    #include "b.h"

    int main(){

    printf("Hello!");

    }

    如果你程序是这样写的话,编译器就会出现Error #include nested too deeply的错误。 
    因为这里 b.h 和 a.h 都互相包含,c.c文件在include的时候重复include了a.h,我们希望c.c文件中执行#include "b.h"的时候 b.h 能进行判断,如果没有#include "a.h"则include,如果已经include了,则不再重复定义。

    可以将b.h修改为:

    #ifndef _A_H

    #define _A_H

    #include "a.h"

    #endif

  • 相关阅读:
    CSS中 link 和@import 的区别是?
    display:none 和 visibility: hidden的区别
    怎样清除浮动
    纯CSS水波纹按钮效果
    如何让一个div水平垂直居中
    如何让一个div水平居中
    Vue封装简单的axios库
    Echarts-x轴数据换行显示
    Vue+Webpack打包路径问题
    Vue中Mint-ui底部弹出(上拉)组件
  • 原文地址:https://www.cnblogs.com/saolv/p/9653501.html
Copyright © 2020-2023  润新知