精华内容
下载资源
问答
  • 写比较复杂的c++代码时,我们往往会把代码分成几片段放在几不同的cpp文件中,这就引发了关于全局常量(如PI的共享)和全局变量的声明与定义问题。 假设我们有头文件main.h和源文件a.pp,b.pp;其中a.pp和b.pp都...

    写比较复杂的c++代码时,我们往往会把代码分成几个片段放在几个不同的cpp文件中,这就引发了关于全局常量(如PI的共享)和全局变量的声明与定义问题。
    假设我们有头文件main.h和源文件a.pp,b.pp;其中a.pp和b.pp都需要用到PI和一个全局常量size.
    那么该如何定义呢?

    如果定义在main.h中

    // main.h
    const int PI=3.1415926;
    int size;

    然后a.pp和b.pp分别包含main.h文件,
    结果是这样会产生重复定义的问题,即使使用了预编译(即#ifndef……#endif)也是如此!

    这也是为什么一般不建议在需要被多个源文件包含的头文件中定义的变量的原因。

    解决的办法是:利用extern关键字在一个头文件中声明(常量需要声明时即定义),然后在其他源文件中声明这个变量或常量,这样就可以使用它们了。
    例如:
    a.pp

    extern const int PI=3.1415926;
    extern int size;

    b.pp

    extern const int PI;
    extern int size;

    注:若只有一个源文件包含头文件,是可以在头文件中定义常量与全局变量的,只包含一次头文件是不会引起重复定义的情况的

    展开全文
  • 多个文件共享结构体变量

    千次阅读 2017-06-02 11:01:05
    一、c语言如何调用其他文件定义的结构体成员 1、假设有a、b两个文件 做法一:在a.c中定义结构体 struct student strStudent[10]; 在a.h中写明结构体的具体成员 struct student { char *name;

    一、c语言如何调用其他文件定义的结构体成员
    1、假设有a、b两个文件

        做法一:在a.c中定义结构体
                struct student strStudent[10];
                    在a.h中写明结构体的具体成员
                struct student {
                        char *name;
                        int age;
                        int sex;
                };
                    b文件中引用a文件中结构体
                    #include “a.h”
                    extern struct student strStudent[10]; //或者将此句搬移到a.h中也行
                    void main(){
                    strStudent[0].name = "TOM";
                    return 0;
                    }
    
        做法二:在a.c中定义结构体
                 student_t stu;
                    在a.h中写明结构体的具体成员
                    typedef struct student {
                        char *name;
                        int age;
                        int sex;
                }student_t;
                    b文件中引用a文件中结构体
                    #include “a.h”
                    extern student_t stu; //或者将此句搬移到a.h中也行
                    void main(){
                    stu.name = "TOM";
                    return 0;
                    }
    
    展开全文
  • 一、".h"文件必须以如下格式书写 例:文件《CZ_efg_hi.h"》 ------------文件内容----------- #ifndef CZ_Efg_Hi_H #define CZ_Efg_Hi_H ..... 所有文件内容 ..... #endif -----------...
    一、".h"文件必须以如下格式书写

    例:文件《CZ_efg_hi.h"》

    ------------文件内容-----------

    #ifndef CZ_Efg_Hi_H

    #define CZ_Efg_Hi_H

    .....

    所有文件内容

    .....

    #endif

    ---------------------------------

     

    二、全局变量 在".h"文件中声明,在".c"文件中定义及初始化

    例:某2个全局变量

    小型程序中 : 

       unsigned char CommandStackAppendPoint=0;

       bit CommandStackOverflow=0;

    在大型程序中

       ".h"文件 只声明

          extern unsigned char CommandStackAppendPoint;

          extern bit CommandStackOverflow;

       ".c"文件 定义及初始化

          unsigned char CommandStackAppendPoint=0;

          bit CommandStackOverflow=0;

     

    三、特别要注意数组类型的声明及定义

    []里空的表示“声明”,[]里定义了长度则表示“定义”

    普通数组

       小型程序中

          unsigned char SerialRxDataBuffer[4]; 

       大型程序中

          ".h"文件 声明([]中空的)

             extern unsigned char SerialRxDataBuffer[]; 

          ".c"文件 定义([]中定义了长度)

             unsigned char SerialRxDataBuffer[4]={0,1,2,3};

    结构数组

       小型程序

          extern struct Command
          {
           unsigned char DeviceCode;

           unsigned char ControlParameter; 

           unsigned char DataH;

           unsigned char DataL;一个15位的数值
          } CommandStack[4]; 

       大型程序

          ".h"文件

             extern struct Command
             {
              unsigned char DeviceCode;

              unsigned char ControlParameter; 

              unsigned char DataH;

              unsigned char DataL;一个15位的数值
             } ;

             extern struct Command CommandStack[]; 

          ".c"文件

             struct Command CommandStack[4];

     

    四、函数声明

    只要在".h"文件内将所有生命的函数前加上extern即可

       小型程序

          void InitCommandStack() ; //初始化命令堆栈 ,  将所有值置0  

       大型程序

          extern void InitCommandStack() ; //初始化命令堆栈 ,  将所有值置0  



    转自:http://blog.sina.com.cn/s/blog_537d61430101cwv1.html

    展开全文
  • C 语言多文件共享全局变量

    千次阅读 2019-05-26 23:30:00
    在其中一个文件中,定义一个全局变量,在其他几个C文件中申明一个相同的extern的全局变量。只有初次定义的C 文件中的全局变量才会被分配空间,其余文件中被extern修饰的全局变量,只是申明该变量来自外部,编译器...


        在多个C文件中全局共享变量的方法:
            在其中一个文件中,定义一个全局变量,在其他几个C文件中申明一个相同的extern的全局变量。只有初次定义的C 文件中的全局变量才会被分配空间,其余文件中被extern修饰的全局变量,只是申明该变量来自外部,编译器不会分配空间。
            在一个头文件中定义一个变量,在各个C文件中包含引用,并不能全局共享该变量,会有重复定义的编译错误。
            
            eg :
                (1) 结果展示 
                    
                (2)源码


     --> main.c :

    #include <stdio.h>

    int global = 10;

    int main(void)
    {

        printf("%s global : %d\n", __func__, global);

        c_main();
        b_main();
        a_main();

        return 0;
    }

    --> a.c :
    #include <stdio.h>

    extern int global;

    extern void  a_main(void)
    {
        //global = 20;


        printf("%s global : %d\n", __func__, global);

        return ;
    }

       --> b.c :              

    #include <stdio.h>

    extern int global;


    extern int b_main(void)
    {
        //global = 30;

        printf("%s global : %d\n", __func__, global);

        return ;
    }

     --> c.c :
                     

    #include <stdio.h>

    extern int global;

    extern int c_main(void)
    {
        //global = 40;

        printf("%s global : %d\n", __func__, global);

        return ;
    }
     

    展开全文
  • 结论:在.h文件定义变量不会报错,但是该操作会导致在多个模块中重复定义该同名变量【变量名相同,但地址不同】,与软件逻辑不一致。 分析: 1):知识概要 1&gt; 定义变量和声明变量的区别是定义会产生...
  • 个文件定义了同名的变量,会是同一个变量吗? [问题点数:20分,结帖人screen12] 收藏 screen12 screen12 等级:结帖率:96.85% 楼主 发表于: 2011-06-30 13:28:24 我在一个工程中建立了两个文件
  • 首先,在.H文件里面加extern关键词声明全局变量, 然后,在.C文件中定义全局变量,变量定义不要放在头文件里。 在C文件里定义,在头文件里extern ...//定义变量 moudule2.c//其他C文件,包含.H文件后(#includ
  • 转自: https://blog.csdn.net/basstal/article/details/52275191全局变量global定义在头文件中,因为所有定义预设为外部链接,所以在头文件被.c文件包含以后,等于有两或更同等定义的global存在于不同的翻译...
  • 另外一点,可以在不同的c文件中声明同名的全局变量,前提是其中只能有一c文件中对此变量赋值,此时链接不会出错。 extern和static不能同时修饰同一变量。 链接规范,每c/c++的定义都有链接规范(linkage)的...
  • 全局变量可不可以定义在可被多个.c文件包含的头文件中? 链接规范,每个C/C++的定义都有名为链接规范(linkage)的属性。外部链接(external linkage)的定义可被定义处以外的翻译单元看见并引用。内部链接...
  • 为什么.h文件中不能定义全局变量

    千次阅读 2015-11-11 02:58:54
    如果头文件中可以定义全局变量,那么每包含该头文件的文件里都会有该全局变量定义.因为C语言的include是直接将文件嵌入到include这地方的.  ​ 解决办法:  ​在头文件使用 extern 来声明该全局...
  • keil 中建立多文件时,变量重复... 对于比较小的程序,一般只有一c文件和一头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern
  • C++多个头文件重复定义变量问题

    千次阅读 2014-10-15 09:22:16
    验证步骤 head_file1.h的内容如下: #ifndef _HEAD_FILE1_H #define _HEAD_FILE1_H #define MAX 100 ....cpp文件包含的多个头文件中有相同定义时,以包含的最后一个头文件为准。
  • 找到h文件中的变量,直接在前面加上static关键字即可! 示例如下: //////////h文件////// #include std::string g_var_str = "sunming"; void PrintHello(); ////////1.cpp////// #include "server.h" ...
  •   为了的可读性和移植性,我们可能需要将一个CPP文件拆分成多个文件,这时,如果在一个.cpp文件中想调用另一个.cpp中的变量该如何操作? 具体步骤 1、新建不同的.cpp项目工程文件 这里面原始参数放在ex01中,...
  •  那么,如何在一个文件中使用另一个文件定义变量呢??      解答:    C语言为了解决这个问题:引出了 全局作用域的概念  即:  在一个文件定义的全局变量,具有全局作用域,当在本程序的...
  • javascript 全局变量(同一jsp文件下,多个js文件可共用的变量)
  • 大家应该都知道,C语言定义变量的作用范围是从定义的位置起,到特定... 那么,进入正题了,C语言所谓的全局变量多个.c文件中到底该怎样使用? 首先说一下全局变量的特性: 全局变量可以定义在一个.c文件中,...
  • 参考来自:http://blog.csdn.net/gamewyd/article/details/6792113 如: main.cpp中需要使用 int main() ...在另一cpp文件中同样需要使用age int change_age() { int age = 0; age += 1;
  • 变量的声明:用于向程序表明变量的类型和名字。 变量定义:用于为变量分配存储空间,还可以为变量指定初始值。...例如: extern int a,变量a 是在别的文件定义的。 这里,第一种情况是定义性声明(defin...
  • 1.如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明...全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
  • 全局变量可不可以定义在可被多个.C文件包含的头文件中? 原文链接 http://hi.baidu.com/fukai5/blog/item/dbf102fd705836e7fd037ff2.html 最近在学习uC/OS操作系统,对其中定义的全局变量产生了好奇。作者
  • 包含同一个头文件的多个源文件,不能定义相同名称的全局变量,即便类型不同也不可以。(但常量却可以)。 包含同一个头文件的多个源头件,可以分别在源文件中声明并定义类型、结构体,但不能申明并定义函数。但这却...
  • 1.如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的...2.全局变量可不可以定义在可被多个.C文件包含的头文件中?为
  • vue定义全局变量

    万次阅读 2018-11-02 15:01:00
    在开发中,有时需要将从接口请求到的一些数据当做全局变量,在其他页面次使用。比如,登录成功后可能需要将用户名,id等信息存起来,便于其他页面展示或使用,将这些信息定义为全局变量是用起来就很方便。 举栗子...
  • 话说在一次整理code的时候,无意间将一个原本定义在.c文件中的全局变量移动到.h 文件中(此全局变量多个.c文件使用),然后突然不能生成.ko(linux中可动态装载的驱动模块).怎么回事?难道是移动code的时候弄错了?仔细一...
  • 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?   答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此...
  • 如果次包含这头文件,就存在次创建变量的问题。解决办法: 在头文件中申明全局变量,在对应的.c文件定义该全局变量,其他文件访问时候就不会报错了。为此写了一段测试代码://my.h#ifndef __my...
  • 这两天做项目发现如果在类的头文件中定义static 变量多个包含头文件的cpp文件会链接错误,提示重定义。 static如果定义文件中,它的作用域是当前文件 在其他文件中是不可见的,也就是说如果头文件A.h中定义了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,192,345
精华内容 476,938
关键字:

多个文件定义相同的变量