汉扬编程 C语言入门 (c语言static extern)c语言中extern怎么用,举个简单例子说明下,谢谢?

(c语言static extern)c语言中extern怎么用,举个简单例子说明下,谢谢?

extern是外部声明用的,用来声明外部的函数或者变量定义。例如,你在1.C中定义了一个函数和变量:void fun1(void);int a = 0;而你要在2.c中调用 fun1(),并且读取a的值,那么需要再2.c的头部如下外部声明:extern void fun1(void);extern int a = 0;这样的话在编译器在编译2.c时,不会报错误,而在链接时找fun1、a,以实现对外部函数、变量的访问。

c语言extern跟static可以一起用吗?

//head file library.h

#ifndef LIBRARY_H

#define LIBRARY_h

extern 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用于声明一个静态变量。静态变量不能被其他文件访问,因此可以与其他文件的全局变量同名。另外如果一个变量在文件中被声明为静态变量以后,该文件不能再有同名的跨文件全局变量

c语言工程里其它文件引用全局变量?

在C语言中引用外部变量,一般使用extern关键字。举个例子如下://1.c 中定义一个变量g_aint g_a = 100;//2.c 中定义一个函数输出g_a#include <stdio.h>extern int g_a; //这里需要用extern说明g_a是一个外部全局变量void f() { printf(\”%d\\n\”, g_a);}//3.c main函数中调用f()void f(); //声明函数f()int main(){ f();}说明:在2.c中如果不使用extern关键字,则会出现编译错误提示。写入externintg_a声明后,则编译成功。

C编译器编译后的函数,为什么要加extern“C”声明?

函数经过编译系统的翻译成汇编,函数名对应着汇编标号。因为C编译函数名与得到的汇编代号基本一样,如:fun()=>_fun, main=>_main但是C++中函数名与得到的汇编代号有比较大的差别。如:由于函数重载,函数名一样,但汇编代号绝对不能一样。为了区分,编译器会把函数名和参数类型合在一起作为汇编代号,这样就解决了重载问题。具体如何把函数名和参数类型合在一起,要看编译器的帮助说明了。这样一来,如果C++调用C,如fun(),则调用名就不是C的翻译结果_fun,而是带有参数信息的一个名字,因此就不能调用到fun(),为了解决这个问题,加上extern \”C\”表示该函数的调用规则是C的规则,则调用时就不使用C++规则的带有参数信息的名字,而是_fun,从而达到调用C函数的目的。在make方式加入lib的方法,直接看编译器的命令行参数的帮助说明。在集成开发环境中链接一个lib的方法有两个:

1。在菜单project->add to project->files…中加入对应的lib文件即可。

2。在project->setting中link的object/library modules中加入对应lib文件方法1较2好,因为2必须在debug,release等中分别设置。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/7113.html

(vb和c混合编程)如何混和使用c与c++编程?

(头文件可以包含头文件吗)全局变量可不可以定义在可被多个.C文件包含的头文件中?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部