2 u013610563 u013610563 于 2016.02.24 08:32 提问

C语言中多文件的全局变量声明问题

具体问题请麻烦看链接

C语言遇到问题

我写了一个函数void match(char* list)/*作用是在list字符串中查找给定子字符串*/
又写了一个函数void find(void (*match)(char*))/*因为想用函数指针,就把match函数传递进去了
然后find()函数遍历字符串数组。
最后在main()函数中写字符串数组char* shuzu[]的具体内容
然后把match函数,find函数,main函数保存在不同的.c文件中
最后写了一个头文件,其中保存了函数申明,还有那个字符串数组的申明
我是这样写的extern char* shuzu[];

最后遇到的问题是编译时告诉我find()函数遇到未定义变量shuzu[],,可我不是把它定义成
全局变量保存在头文件中了吗?

3个回答

qq_27183003
qq_27183003   Ds   Rxr 2016.02.24 09:08
已采纳

把数组shuzu定义放到main函数外面,才是全局数组。
头文件的声明保持不变。
extern 声明该变量是外部或本文件的全局变量。

 #include<stdio.h>
#include"declare.h"
 char* shu_zu[]={
                "wodemingzijiaozuowuguannan",
                 "wujunyishiwofuqing",
                 "liuhongjushiwomuqing",
                 "woxihuanwozijiwuguannan"
        };
int main()
{
 find(match);
 return 0;
}
hyb1996
hyb1996   2016.02.24 09:02

你在main函数了写了shuzu的定义,但是,这并不是全局变量,只是在main函数里的局部变量。你应该在main外面这样写,extern char* shuzu[]=...并把头文件的声明去掉

u013610563
u013610563 回复亦楠_为自己: 最后编译通过了
2 年多之前 回复
u013610563
u013610563 谢谢你的提示,我把shuzu写到main函数外面就可以了,没有改头文件中写的extern char*shuzu[]的声明,最后编译
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.24 08:34

把代码贴在codepad.org上,你的链接提示“正在维护”,代码看不到

u013610563
u013610563 问题解决了,谢谢了
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言全局变量定义与声明技巧
在实际的编程中,全局变量对我们编程来说既是喜又是泪,虽然说项目中尽量避免使用全局变量,但总有些时候不得不使用它,并且可能使用得不少,各个模块可能有含有或多或少的几个全局变量,而当别的模块需要引用的时候,就必须extern它,造成你定义了一遍又声明了一遍,这样就稍显得麻烦。下面介绍一种全局变量的管理方法,至始至终只定义一次,所有的全局变量以某种声明方式放入一个名叫global.h的头文件中,然后别的
C语言所谓的全局变量在多个.c文件中到底该怎样使用?
    大家应该都知道,C语言定义的变量的作用范围是从定义的位置起,到特定的时刻或位置后就被释放掉了,具体的作用范围希望大家能细心去看看,很重要,包括auto, static, const定义的变量和函数,还有malloc等函数申请的内存的使用。    那么,进入正题了,C语言所谓的全局变量在多个.c文件中到底该怎样使用?    首先说一下全局变量的特性:    全局变量可以定义在一个.c文件中,...
学习笔记---C语言中全局变量,变量,常量的定义与使用
变量与常量的基础使用
C语言全局变量和局部变量总结
————————————————————————————————————————————————————————————————————————————— 只有不断的学习,不断的进步,才能不被替代! 只有你的不可替代性才决定你的价值! -----2016年11月18日 —————————————————————————————————————————————
C语言中全局变量的定义及重复包含问题
C语言中全局变量的定义及重复包含问题          C语言中一般将全局变量intA的定义和初始化放在fileName .c或者其它 xx.c文件中,同时在与之对应的fileName.h文件中进行 extern int A声明。当一个全局变量int A仅在fileName.c文件中定义而未在相对应的头文件fileName.h声明时,包含与之相应的fileName.h文件时编译器会出现未定义的错
【c语言问题系列教程之一】变量声明和初始化
一、基本类型 1.c语言整数类型的大小并没有精确的定义,而是随着编译器的类型而变化,ANSI C能保证的只是数据的最小尺寸。char>=8位,short>=16位,int>=16位,long>=32位。 2.因此,可以用typedef定义int16和int32,然后根据实际的机器环境把它们定义为int,short,long等类型。但是,标准头文件已经定义了标准名称int16_t,uint32_
C语言中如何定义全局变量
C语言中如何定义全局变量<br />C/C++2010-09-06 13:01:39阅读590评论0  字号:大中小 订阅<br />众所周知,全局变量在被定义后,系统会为全局变量分配内存并且它还可以被其他模块通过C语言中extern关键字调用。这样就必须在 xx.C 和xx.H 文件中定义。这种重复的定义很容易导致错误。 下面是只需用在头文件中定义一次就可以在别的模块使用的定义方法。<br />格式: 定义全局宏。<br /> <br />#ifdef   xxx_GLOBALS <br />#defin
C语言中变量的声明和定义
变量声明和变量定义变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。变量声明:用于向程序表明变量的类型和名字。定义也是声明,extern声明不是定义定义也是声明:当定义变量时我们声明了它的类型和名字。extern声明不是定义:通过使用extern关键字声明变量名而不定义它。 [注意] 变量在使用前就要被定义或者声明。 在一个程序中,变量只能定义一次,却可以声明多...
C语言 变量声明和定义的区别
转载自http://www.cnblogs.com/GavinDai/archive/2011/10/24/2222735.html 变量的声明有两种情况: 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。 前者是“定义性声明(defining dec
C语言中声明和定义详解
变量声明和变量定义 变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。 变量声明:用于向程序表明变量的类型和名字。 定义也是声明,extern声明不是定义 定义也是声明:当定义变量时我们声明了它的类型和名字。 extern声明不是定义:通过使用extern关键字声明变量名而不定义它。 [注意] 变量在使用前就要被定义或者声