• 利用预编译解决C/C++重复定义的错误 -2020.09.13


    利用预编译解决C/C++重复定义的错误 -2020.09.13

    我们现在有main.c和function.h两个文件

    main.c

    #include <stdio.h>
    
    #include "function.h"
    
    int main() {
        printf("Hello, World!
    ");
        printf("	1+2+...+100
    "sum(100));
        return 0;
    }
    
    int sum(int n) {
        int res = 0;
        for (int i = 0; i < n; ++i) {
            res += i;
        }
        return res;
    }
    

    function.h

    //#ifndef __SUM_H
    //#define __SUM_H
    
    int sum(int n);
    int A = 0;
    
    //#endif
    

    我们使用命令gcc main.c -o hello,再使用ls,可以看到当前目录下已经生成了hello.exe

    然后我们再使用命令.hello.exe运行程序,.表示当前目录

    到目前为止都没什么不对的地方,现在我们添加一个function2.h,并在main.c中引入function2.h

    function2.h的内容如下

    #include "function.h"
    

    main.c引入部分修改为

    #include <stdio.h>
    
    #include "function.h"
    #include "function2.h"
    

    我们再次使用命令gcc main.c -o hello,发现出现了报错信息redefinition

    意思就是重复定义了变量A,那么我们需要在function.h中加入预编译指令#ifndef #define #endif,

    这样可以有效防止重复定义或者重复包含的问题,我们将function.h中的三条预编译指令解注释

    function.h修改为

    #ifndef __SUM_H
    #define __SUM_H
    
    int sum(int n);
    int A = 0;
    
    #endif
    

    我们再次使用命令gcc main.c -o hello,发现编译正确通过了,再次运行程序

    结果正确,因此在规范的开发当中我们需要使用#ifndef #define #endif来防止重复定义的问题

  • 相关阅读:
    《高等应用数学问题的MATLAB求解》——第4章习题代码
    《高等应用数学问题的MATLAB求解》——第3章习题代码
    《高等应用数学问题的MATLAB求解》——第2章习题代码
    2020年高考数学全国一卷第16题
    LR&PCA&KPCA
    package.json.lock
    Charles 抓 iphone 手机包
    竞赛196
    竞赛197
    js编程语言!!!!
  • 原文地址:https://www.cnblogs.com/linkchen/p/13660942.html
Copyright © 2020-2023  润新知