精华内容
下载资源
问答
  • 2.怎么区分全局变量声明和全局变量定义,定义肯定是在所有函数外面,但声明是可以在里面也可以在外面的,而在形式上,定义是int a,但是我看冯艳茹主编《C语言程序设计》国防科技大学出版社2017年6月第一版,这本书讲...
  • C语言全局变量定义方法

    千次阅读 2014-10-12 11:43:35
    C语言全局变量定义方法  今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量... 我们都知道定义在函数外部的变量就叫做全局变量,但是通常只有一个C文件和一个H

    C语言全局变量定义方法

        今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。以前也定义过全局变量啊,但是先前怎么没错误?瞎折腾了一会最后还是发现问题出在细节上面了。以前只是侥幸没遇到而已。今天做个总结,以后再忘记了就回来直接查一下。

         我们都知道定义在函数外部的变量就叫做全局变量,但是通常只有一个C文件和一个H文件的时候那样定义是不会出问题的。一个大的系统会包含好多个.C文件和.H文件,每个.C文件都有可能会访问全局变量,所以全局变量在定义的时候就要稍微做下改变了。通常的做法是建立一个包含系统所有全局变量的.H文件,系统用到的所有全局变量都定义在该文件内,文件名可以用Global修饰一下。在该文件中定义某个全局变量的时候需要用extern声明该变量为外部变量。比如要定义SysEventCounter标志为unsigned char型的全局变量可以这样定义:

     

    extern unsigned char SysEventCounter; <----这里是关键,不能对该变量赋值,只能声明,赋值就会报错。

    上述声明是写在.H文件中的。其他.C文件若要用到该变量,直接包含该.H文件就可以了

     

    如果想要赋初值,可以在用到它的.C文件中这样写:

    unsigned char SysEventCounter = 0;

    不用赋初值时,直接

    unsigned char SysEventCounter;

    就可以了。注意:只需要在一个.C文件中写即可,其他.C文件直接可以用。如果在其他.C文件中也这样写会产生重复定义的错误。

    全局变量对变量的类型不限制,任何类型都可以,只要按照上述方法定义就不会有错误。


    展开全文
  • C | C++定义全局变量的方法

    万次阅读 2018-09-07 13:54:07
    我们想定义一个全局变量,能够在多个文件中使用,举例说明比如说三个文件main.c hello.c hello.h 想在main.c和hello.c中使用一个名字为a的变量,可能大家会简单地想直接在hello.h里面定义一个变量unsigned int a; ...

    我们想定义一个全局变量,能够在多个文件中使用,举例说明比如说三个文件main.c hello.c hello.h
    想在main.c和hello.c中使用一个名字为a的变量,可能大家会简单地想直接在hello.h里面定义一个变量unsigned int a;
    然后在main.c和hello.c中引用"hello.h"就可以直接使用了,但这是编译器会报重复定义变量的错误,我们可以怎么做呢?

    • 方法很简单,直接举例说明:

    • hello.h

    #ifndef HELLO_H_
    #define HELLO_H_
    extern int a;
    void fun ();
    #endif
    
    • hello.c
    #include <stdio.h>
    #include "hello.h"
    int a = 0;
    void fun () {
    	a = 1;
    	printf("%d\n",a);
    }
    
    
    • main.c
    #include <stdio.h>
    #include "hello.h"
    int main () {
    	fun();
    	a = 10;
    	printf("%d\n",a);
    	return 0;
    }
    
    

    输出结果为1,10;
    extern关键字来声明变量为外部变量,而为什么要在hello.h文件中已经extern int a了还要再在hello.c文件中定义int a呢?

    • 这是因为extern仅仅是作为一个声明,声明我要定义一个外部全局变量a可以在其他文件和模块中使用,但此时并为给a分配空间。
    • 而int a = 0;则才是真正对a的定义,为其分配空间。

    那么问题又来了,我们为什么不写成extern int a = 0;的形式不是更简单吗?

    • 这就涉及到c的一个基本知识点了也就是extern int a = 0和int a = 0同样都是对a的定义,只不过第二种是省略了extern而已。
    展开全文
  • 这些天写的程序中用到了全局变量,一开始是在一个文件下做测试后来把文件按逻辑拆分了一下,不同的代码被放在了几个文件中,最后用Makefile来编译就遇到了今天的话题,怎么在头文件中定义全局变量呢? 做法 要想一个...

    引言

    这些天写的程序中用到了全局变量,一开始是在一个文件下做测试后来把文件按逻辑拆分了一下,不同的代码被放在了几个文件中,最后用Makefile来编译就遇到了今天的话题,怎么在头文件中定义全局变量呢?

    做法

    要想一个文件中的变量被一个工程中的其他多个文件同时访问就要借助extern关键字,在头文件中用extern关键字声明该全局变量可供其他外部文件使用

    1. 在头文件中声明在C文件中定义
      其他文件要用到该变量时直接在C文件中用extern声明变量就可以了不用包含头文件
    //如:parser.h中声明count、g_sigstop为全局变量
    #ifndef PARSER_H
    #define PARSER_H
    
    extern int                              count;                                      
    extern int                              g_sigstop;
    
    char *parser_argument(int argc, char **argv); 
    void print_usage();
    #endif 
    

    切记这里头文件中是声明不是定义,如果你要作死给count或者g_sigstop赋个值,比如:

    extern int                              count=0;                                      
    extern int                              g_sigstop=0;
    

    那问题就来了,只要包含这个头文件的C文件在编译的时候都会提示 count被多次定义这样的错误,因为include只是包含,会在预编译的时候把头文件的代码内容都copy到#include 头文件名了的C文件中来,所以最后包含了相应头文件的C文件都在编译时显示多次定义某个变量,在没有预编译之前头文件中负责声明,C文件中负责定义,通过预编译之后在C文件中既有变量的声明也有变量的定义,这样就可以直接使用变量了,把声明和定义放开在不同的地方这样方便了文件的移植和其它文件的引用

    1. 如果是多个C文件,只要有一个C文件定义过(初始化)该变量其他的C文件就不能再次定义了,需要调用这个变量直接在文件中声明就可以使用了
    google@ubuntu1404:~/workspace/DLT$ cat dlt698_45.h
    #ifndef  __DLT698_45_H 
    #define  __DLT698_45_H
    
    extern int five;//在头文件中声明
    #endif /* __DLT698_45_H */
    google@ubuntu1404:~/workspace/DLT$ 
    google@ubuntu1404:~/workspace/DLT$ cat dlt698_45.c
    #include "dlt698_45.h"
    #include <stdio.h>
    
    int five=7;//在C文件中定义
    google@ubuntu1404:~/workspace/DLT$ 
    google@ubuntu1404:~/workspace/DLT$ cat tes.c 
    #include <stdio.h>
    
    extern int five;//在其他C文件中使用时只需要声明
    int main ()
    {
            five++;
            printf("dlt698_45.h a is:%d\n",five);
            return 0;
    }
    google@ubuntu1404:~/workspace/DLT$
    google@ubuntu1404:~/workspace/DLT$ cat makefile 
    VARABLE= tes.o  dlt698_45.o 
    test:$(VARABLE)
                    gcc -o test $(VARABLE) -lcrypto -lssl
    %.o:%.c
                    gcc -c $< -o $@ 
                    #$<=所有c文件 $@=所有目标文件
    .PHONY:clean
    clean:
                    rm -rf *.o a.out test ca.* server.crt server.csr server.key demoCA
    google@ubuntu1404:~/workspace/DLT$ make 
    gcc -c tes.c -o tes.o 
    #tes.c=所有c文件 tes.o=所有目标文件
    gcc -c dlt698_45.c -o dlt698_45.o 
    #dlt698_45.c=所有c文件 dlt698_45.o=所有目标文件
    gcc -o test tes.o  dlt698_45.o  -lcrypto -lssl
    google@ubuntu1404:~/workspace/DLT$ ./test 
    dlt698_45.h a is:8
    

    参考博文:https://blog.csdn.net/lichen18848950451/article/details/65627345

    展开全文
  • 好久没写C语言了,突然忘记怎么定义全局共享变量了,由于老项目的Code Base都是C的风格,其中又大量用了全局变量,只能跟着糊一坨shit上去了。没办法。 再共享全局变量的global_shared_var.h文件中写入: extern...

    好久没写C语言了,突然忘记怎么定义全局共享变量了,由于老项目的Code Base都是C的风格,其中又大量用了全局变量,只能跟着糊一坨shit上去了。没办法。

     

    再共享全局变量的global_shared_var.h文件中写入

    extern int this_is_global;

     

    然后在global_shared_var.c 或者global_shared_var.cpp中写入:

    int this_is_global;

     

    然后在各个.cpp .c文件大胆放心的include global_shared_var.h使用该全局变量就可以了,编译器也不会报多重符号定义的错误了

     

    references:

    https://stackoverflow.com/questions/3010647/shared-global-variables-in-c



    转载于:https://www.cnblogs.com/foohack/p/8805680.html

    展开全文
  • 题目: ...如果一C文件中有全局变量定义:int g; 那么同一系统的另一C文件怎么定义不会有问题(多项选择)? A.int g; B.extern int g; C.int g = 0; D.u32 g; 答案: A,B,C  对于C/C+
  • fun2(){ float a[point]={0,} }//在cpp里定义一个point维的数组 4.h #include"2.h" class ObsFun { ObsFun(); ..... } ObsFun() { for (int i=0;i;i++);//以特征点的数量为循环次数 } error:3.cpp:应输入常量...
  • 但是使用 gcc 命令编译后报出如下错误(使用C99标准) 看了别人的博客后才知道是如下原因:c99标准中规定:全局变量和static变量的初始化需要指定一个常量,不能是一个非常量的表达式;而在c++中是可以的。而且在操作c...
  • 我把以前的一个 Win32 程序用 MFC 重写一遍,原来的 Win32 程序中有一些用结构体定义全局变量。到 MFC 里面以后,我把每一个窗口的代码分
  • 全局变量定义了一个int number = 1;在asp:button 的点击事件中写了 number++࿰c;然后控制台输出࿰c;可是点击之后࿰c;每次输出的都是2࿰c;怎么样让它可以改变或者一直递增</p>
  • 怎么解释呢,一般而言,变量只能定义在.c文件中,声明变量才在.h文件中。下面就打破常规,把定义变量的语句放在.h文件中,但是对实际而言,变量定义在头文件中是表面上的。  下面直接给出代码,有三个文件a.h a....
  • 全局变量可不可以定义在被多个.c文件包含的头文件中?为什么?描述内存分配方式以及它们的区别 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 局部变量:函数内部定义的非静态变量...
  • 好久没写C语言了,突然忘记怎么定义全局共享变量了,由于老项目的Code Base都是C的风格,其中又大量用了全局变量,只能跟着糊一坨shit上去了。没办法。再共享全局变量的global_shared_var.h文件中写入:extern int ...
  • 还有对全局变量是不是也是编译赋初值?没有初值是不是自动给它赋值(网上好像有这么讲的),那什么时候在内存开辟空间呢(这个图上的生存期从main函数就开始)? 这些可能涉及计算机组成原理,我没学过,希望哪位...
  • IOS-全局变量

    2020-11-10 10:11:21
    怎么定义全局变量来着? Objective-C 更像是 Java,我们定义 Controller 类的各种行为和操作,然后在 AppDelegate 中将定义的 Controller 实例化,加入到 window 或其它的 Controller 对象中。我们习惯于将用到的每...
  • 话说在一次整理code的时候,无意间将一个原本定义在.c文件中的全局变量移动到.h 文件中(此全局变量被多个.c文件使用),然后突然不能生成.ko(linux中可动态装载的驱动模块).怎么回事?难道是移动code的时候弄错了?仔细一...
  • 我们知道在C++中的全局变量的构造总是优先于Main之前(应该说程序的执行体),那对于同一个文件,不同文件中定义全局变量的构造函数是怎么执行的呢? 1)对于同一个文件来说: 全局变量的构造顺序按照全局变量的...
  • 编程中定义一个全局可用的值是很常见的,比如我们要保存登录操作的接口地址、加密时的密钥等等。 这些东西当然也可以保存到数据库等地方。但总有各种各样的缺点。...说了那么多,OC到底是怎么定义静态变量的呢
  • 笔记一、全局变量在多个.c文件中共用。... 想要在头文件中定义一个全局变量,然后包含到两个不同的c文件中,想要全局变量能在两个文件中共用,或者说A文件需要使用B文件的某个全局变量。 二、解决方法 .
  • 以上是我在代码实现中的变量实际定义,在报错提示的文件开头处以全局变量的形式进行的定义。 问题: 1. 工程在编译时一直提示一些变量未定义的错误,但实际上这些变量在使用前都做了 定义,请问这种情况应该怎么...
  • python下的全局变量使用

    千次阅读 2018-04-23 13:53:24
    怎么使用全局变量呢?两步走:1.定义2.使用时再次声明也就是说全局变量在使用之前就要声明,声明全局变量使用关键字 global,然后在使用该全局变量之前,再次声明示例: global i //在使用前初次声明 i=1 //给...
  • 使用:要使用这个全局变量,只要包含1.h就行了。在全局域中定义的对象 如果没有指定显式的初始值 则该存储区被初始化为 0 因此下面两个定义中 var1和 var2有相同的初始值 0int var1 = 0;int var2;关键字...
  • 以c语言为例。  首先,要搞清楚程序在... 全局变量:在函数外部定义的变量,也称为外部变量。全局变量都是静态的,但是静态全局变量全局变量有一点差别(静态全局变量只初始化一次,防止在其他源文件调用!而全...
  • 如何在单片机上使用全局变量 在单片机中经常会遇到二个不同的.c文件需要使用同一个变量,但...下面我先介绍一下怎么正确的使用,在贴几张错误使用全局变量的方法 如何正确的使用extern,实现main.c led.c同时使用...
  • 一、关于全局变量定义、声明、引用:(只要是在.h文件中定义的变量,然后在main.c中包含该.h文件,那么定义的变量就可以在main函数中作为全局变量使用)方法1:在某个c文件里定义全局变量后,在其它c文件要用,则在...
  • 我遇到的问题是,将原来定义的宏,改成全局变量(这样就可以在程序里面定制这些量)。怎么改呢? 我想了大概十多分钟呢吧(没办法,菜鸟嘛)。 1.将要改成全局变量的量放在一头文件(global.h)中申明(这是申明...
  • 模块化编程中全局变量跨文件使用

    千次阅读 2014-12-22 14:08:59
    定义全局变量,其他文件都可以使用,但是如果定义在.h文件中,就容易出现重复定义的问题,具体该怎么做呢,如下: eg:一个工程中有五个文件,main.c first.c first.h second.c second.h 想在first.c定义个...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 220
精华内容 88
关键字:

c全局变量怎么定义