zoukankan      html  css  js  c++  java
  • 在头文件中定义全局变量

    让我们先来看一个例子。

    在下面的工程中,共有三个文件:main.cpp、func.cpp、var.h。

    其中var.h中定义了一个int型的变量:

    1 //var.h
    2 
    3 #ifndef __VAR_H_
    4 #define __VAR_H_
    5 
    6 int var = 10;
    7 
    8 #endif

    在func中定义了一个函数,返回刚才定义的var变量:

    1 //func.cpp
    2 
    3 #include "var.h"
    4 
    5 int func(void)
    6 {
    7     return var;
    8 }

    最后是main.c,在main函数中调用func函数

     1 //main.cpp
     2 #include <stdio.h>
     3 #include "var.h"
     4 
     5 int func(void);
     6 
     7 int main(void)
     8 {
     9     int i = func();
    10 }

    接着编译,链接。编译时不会有错误,但是链接时会报错。在VC6中提示错误如下:

    func.obj : error LNK2005: "int var" (?var@@3HA) already defined in main.obj
    Debug/temp.exe : fatal error LNK1169: one or more multiply defined symbols found

    这是一个常见的错误。这里

    但是有时候,确实把一些全局变量定义在一个头文件里会比较方便。下面介绍一个常见的方法:

     1 //global.h
     2 #ifdef GLOBAL_VARIABLES_HERE
     3 #undef EXTERN
     4 #define EXTERN
     5 #endif
     6 
     7 //下面是全局变量的定义
     8 //前面加上EXTERN修饰
     9 
    10 EXTERN int var;

    这样,在global.cpp中通过定义GLOBAL_VARIABLES_HERE宏,能够将EXTERN展开成空宏。而其它地方(一般在重要的头文件里):

    1 #define EXTERN extern

    这样就可以了

  • 相关阅读:
    使用Netcat实现通信和反弹Shell
    PentesterLab----xss
    nmap实验
    xssgame20关
    使内网服务器访问外网
    lcx端口转发
    提权
    Nmap使用及常见的参数选项
    kali渗透metasploitable靶机
    我待Django如初恋(✪ω✪)的第一天💗
  • 原文地址:https://www.cnblogs.com/02xiaoma/p/3006542.html
Copyright © 2011-2022 走看看