c语言extern跟static可以一起用吗 C语言中 Static和 Extern 的具体用法,有例子最...

作者&投稿:兴晨 (若有异议请与网页底部的电邮联系)
不能。extern修饰全局变量和函数,被修饰的变量和函数可以在别的文件里使用。

而static修饰的变量和函数作用范围仅限于定义它的文件内部。
两者是冲突的。

不可以,static表示是本文件内的变量(在函数中的是静态变量)。
extern表示是其他文件定义的变量,显然两者是矛盾的。

不可以。extern和static是互斥的。

两个限定词的作用是相反的,怎么可能用到一块

C语言里的static和extern的作用是什么?~

假如有三个文件:a.h, a.c, main.c
在文件a.c中定义一个全局变量和函数:
int i = 213;
void print(void) { printf("print in a.c"); }
在文件a.h中声明这个全局变量和函数:
extern int i;// 加extern声明而不定义,指明这个变量在某处已定义,此处只是做一个说明
extern void printf(void); // 函数原型即是声明,所以此处可以不用加extern明确这是声明
在文件main.c中:
#include “a.h”
int main()
{

printf("%d
", i); // 直接使用i
print(); // 直接调用print()
}
---
如果将文件a.c中相关定义改为
static int i = 213;
static void print(void) { printf("print in a.c"); }
文件a.h与main.c中内容不变
此时编译出错,报告找不到print()函数,找不到i,这是因为static限制print()和i只能在a.c中使用。
===
如果用static修饰局部变量,则该局部变量将拥有全局生命周期,即在程序执行期间都存在,且其值为上一次使用后的值。
int print(void)
{
static int i = 0;

printf("%d",i++);

}
不加static,每次调用print(),输出结果都是0
加上static,每次调用printf(), 输出结果都不同,即:0,1,2,3……

//head file library.h#ifndef LIBRARY_H#define LIBRARY_hextern FILE* logfile; //declaring an extern file pointer/*other random codes*/#endif//end of head file

//source code main.c
#include
#include"library.h"
FILE* logfile; // declare the extern pointer is used in this file
int main()
{
logfile=fopen(...);
//main function
return 0;
}

//end of main.c


//source code backend.c
#include"libarary.h"

static FILE* logfile=fopen(...);


/*other random codes*/

//end of backend.c



如上所述,extern在头文件中声明一个跨文件的全局变量,每一个需要使用这个变量的文件都要单独声明(不加extern再声明一遍)

而static用于声明一个静态变量。静态变量不能被其他文件访问,因此可以与其他文件的全局变量同名。另外如果一个变量在文件中被声明为静态变量以后,该文件不能再有同名的跨文件全局变量

一外部变量在其它文件中用extern来声明,其它文件中没有extern,就不会访...
答:只要在函数体外定义的非static变量,无论定义时有没有加extern,其他文件通过extern都可以引用,因为它的作用域是所有源文件。static是把变量的作用域限制在当前文件,其他文件不能访问。

嵌入式—C语言—全局变量和extern的用法
答:1 静态全局变量。有static修饰的变量为静态全局变量。需要定义在函数外,可以在定义位置到本文件结束部分使用。定义格式为 static type var=init_value;作用为定义一个类型为type,变量名为var的静态全局变量,并赋初始化值为init_value。当=init_value部分被省略时,系统自动初始化为0值。可以用extern...

什么叫外部变量内部变量
答:在此作用域内,全局变量可为各个函数所引用,编译时将外部变量分配在静态存储区,有时需要在其他文件中使用extern来声明外部变量,以扩展外部变量的作用域,也可用static声明外部变量,使该变量不能被其他文件引用。内部变量:在C语言中,在函数体内部的变量,叫内部变量,也叫局部变量。

全局变量默认是static还是extern
答:让别人知道你要在其他文件引用,而且const默认是局部变量,你要在其他文件使用,就必须申明extern。补充下,在被引用的文件extern可以省略,引用的文件中不能省略,它只是一个申明,跟定义有区别。比如,int a 是定义, extern int a 是申明,定义编译就会分配内存,定义只能一次,申明可以多次。

C语言中static是做什么用的?
答:static 用来说明静态变量。如果是在函数外面定义的,那么其效果和全局变量类似,但是,static定义的变量只能在当前c程序文件中使用,在另一个c代码里面,即使使用extern关键词也不能访问这个static变量。如果是在函数内部定义的,那么这个变量只初始化一次。C语言是一门通用计算机编程语言,应用广泛。C语言的...

static在c语言中是什么意思
答:1、修饰变量 变量分为局部和全局变量,但是都存于内存的静态区。静态全局变量的作用域仅局限于变量被定义的文件中,其他文件即使使用extern也没法使用,其范围准确的说是从定义之初开始,到文件结尾处结束。在其前面定义的代码行也不能使用。静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同...

在vb.net中如何定义staticextern函数
答:在vb.net中定义staticextern函数:用static声明的局部变量。static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性。extern,C是使C++能够调用C写作的库文件的一个手段。

c语言题目, 请指出如下程序中的错误之处:
答:而extern 和static 可以说是互相对立的,所以如果先什么为友元函数后再声明函数为static函数,也会报错—— “‘static’和就说明符‘extern’冲突”in a word,static 和 friend 不能同时存在于一个函数 3.反驳一下一楼观点。一楼观点有误。友元函数(g)可以直接访问对象的私有成员(a.a)。就酱紫...

什么叫外部变量 内部变量
答:在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。有时需要在其他文件中使用extern来声明外部变量,以扩展外部变量的作用域。 也可用static声明外部变量,使该变量不能被其他文件引用。内部变量:在C语言中,在函数体内部的变量,叫内部变量,也叫局部变量;...

extern的详解
答:这种说法是不是有点令人惊讶,typedef就像extern,mutable,static,和register一样,是一个存储类关键字。2、No matter where you declare a variable or function,the extern keyword allows other files to use it without knowing where it was defined.不管在哪里声明一个变量或函数,extern关键字都...