首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C中是否需要函数的extern关键字?

在C语言中,extern关键字用于声明一个变量或函数是在其他文件中定义的。它的作用是告诉编译器该变量或函数的定义在其他地方,而不是当前文件中。

在C语言中,默认情况下,函数的声明是隐式的extern声明。也就是说,如果在一个文件中定义了一个函数,而在另一个文件中调用该函数,不需要使用extern关键字来声明函数。编译器会自动在调用函数的文件中查找函数的定义。

然而,如果你想在一个文件中使用另一个文件中定义的全局变量,就需要使用extern关键字来声明该变量。这样编译器就知道该变量是在其他文件中定义的,并且可以正确地链接它们。

需要注意的是,extern关键字只是用于声明变量或函数,而不是定义它们。变量或函数的定义通常在另一个文件中。

总结起来,C语言中使用extern关键字来声明在其他文件中定义的变量或函数,以便在当前文件中使用它们。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

extern C 关键字作用

C 语言中, extern 关键字具有外延性,使修饰变量作用域可以拓展到其他文件。而在C++,extren被重载后有了其他功能,就是修饰函数以什么方式进行编译。...决定了在编译过程是否函数进行倾轧(Name Mangling)操作,也是在今天才知道倾轧这个词语。...#include // 使用 C++ 编译器编译后dll导出所有函数都会倾轧 // 增加 externC关键字 externC” { _declspec(dllexport...可以增加一个判断,如果是C++文件就增加externC关键字,如果不是就不加,这样就可以非常灵活使用 extren “C关键字了。...实现如下: #include // 使用 C++ 编译器编译后dll导出所有函数都会倾轧 // 增加 externC关键字 #ifdef __cplusplus extern

17720

C语言中extern关键字

C语言中extern关键字 作用 在C语言中,extern关键字用于声明外部变量或函数。它通常用于在一个源文件引用另一个源文件定义全局变量或函数。...下面是一个示例,展示了如何使用extern关键字来声明并引用外部变量: 在文件 file1.c 定义全局变量 count: // file1.c int count = 10; 在文件 file2.c...总结而言,extern关键字用于在一个源文件引用另一个源文件定义全局变量或函数。它允许您在一个源文件声明外部变量或函数,并在另一个源文件中使用这些声明进行引用。...然后,在需要使用这些外部变量和函数源文件,通过 #include “myheader.h” 将头文件包含进来。...需要注意是,头文件应该只包含声明而不是定义。变量和函数定义应该放在对应源文件

53730

C++extern关键字知识点

第二,当extern不与"C"在一起修饰变量或函数时,如在头文件: extern int g_Int; 它作用就是声明函数或全局变量作用范围关键字,其声明函数和变量可以在本模块活其他模块中使用...4 问题:externC”   在C++环境下使用C函数时候,常常会出现编译器无法找到obj模块C函数定义,从而导致链接失败情况,应该如何解决这种情况呢?   ...答案与分析:   C++语言在编译时候为了解决函数多态问题,会将函数名和参数联合起来生成一个中间函数名称,而C语言则不会,因此会造成链接时找不到对应函数情况,此时C函数需要externC...函数声明   常常见extern放在函数前面成为函数声明一部分,那么,C语言关键字extern函数声明起什么作用?   ...答案与分析:   如果函数声明带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。

99240

c++模板:调用模板成员函数需不需要加template关键字?

以下是个简单模板类测试代码,模板类A定义了模板函数hello,在模板函数test调用A::hello template_test.cpp template struct A{...同样是模板成员函数,hello2因为调用时不需要指定显式模板参数,不加template关键字也可以被编译正确识别。...如下是C++标准说明(《14.2 Names of template specializations》): 当类模板成员名称出现在 ....或 -> 在后缀表达式,或在限定标识符嵌套名称说明符之后,并且后缀表达式或限定标识符显式依赖于模板参数(14.6.2),成员模板名称必须是以template关键字为前缀。...以下是从C++标准文档(《Working Draft, Standard for Programming Language C++》 )摘录14.2原文 那么为什么MSVC就不需要tempate

91030

4.C++函数重载,C++调用C代码,newdelete关键字,namespace(命名空间)

本章主要内容: 1)函数重载 2)C++调用C代码 3)new/delete关键字实现动态内存分配 4)namespace命名空间 ---- 大家都知道,在生活,动词和不同名词搭配一起,意义都会大有不同...,参数不同,而意义却大有不同. 1.2那这些重载函数入口地址是否相同 修改上面栗子main()函数,如下图所示: ?...注意: 重载函数需要避免使用参数默认值 调用重载函数时,只会匹配函数参数表,与函数返回值无关 函数重载必须发生在同一个作用域中 重载函数入口地址,不能直接通过函数名来获取 2.C++与C代码相互调用...当C++想调用C某个函数时,则使用externC” 还是举个栗子,通过C++调用C里面的add()函数 1) 首先创建3个文件 ?...free(p); } 从上面栗子,可以看到C是通过库函数完成内存分配 3.2而在C++,则通过new关键字进行内存申请,delete关键字进行内存释放,比如: ?

83420

C++explicit关键字

1. explicit关键字 explicit中文含义是显示,在C++主要用于防止隐式转换发生。...:_value1: 2,在main函数,demo = 2就发生了隐式转换,用户类初始化。...如果加上explicit关键字又会是怎样,在Demo(int a)前面加上explicit,结果在编译时候就显示“no known conversion for argument 1 from ‘int...构造函数 C++explicit关键字只能用于修饰只有一个参数或者多参数情况下,除了第一个参数外其他参数都是默认值构造函数,对于无参或者除上述之外多参数构造函数是无效,如: class Demo...总结 C++explicit关键字可以防止隐式转换发生,在使用时注意如下几点: 只能用于修饰只有一个参数类构造函数,或者修饰多参数情况下除第一个参数外其余参数都是默认值构造函数; 无参构造函数或者多参数构造函数总是显示调用

56630

C#partial关键字

这节讲一下partial(局部,部分关键字,初学者可能没有接触过这个关键字,但是只要你写过winform或者WPF应用程序的话,那你肯定被动用过这个关键字。...首先介绍一下这个关键字作用,它用作定义一个部分类,也就是说,对于一个类,你可以写在不同文件(当然不能超出命名空间限定),通过partial声明,系统就会自动讲分布在不同地方类联系在一起。...窗体应用程序,分为界面文件(.design)和代码文件(.cs),这两者之间就是通过partial关键字联系在一起,所以这也是为什么说被动用过原因。...) 不能有返回值 参数可以为ref,但是不能为out 不能使用virtual,abstract,override,new,sealed,或extern修饰符 部分类有这么多限制...对部分类和部分方法声明和作用,读者做了解即可,开发很少使用。 本节到此结束...

31440

C++常量与关键字

宏定义 #define 和常量 const 区别类型和安全检查不同宏定义是字符替换,没有数据类型区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量声明,有类型区别,需要在编译阶段进行类型检查编译器处理不同宏定义是一个...;const常量需要进行内存分配,存储于程序数据段定义域不同void f1 (){ #define N 12 const int n 12;}void f2 (){ cout<<N...<<endl; //正确,N已经定义过,不受定义域限制 cout<<n <<endl; //错误,n定义域只在f1函数}定义后能否取消宏定义可以通过#undef来使之前宏定义失效const常量定义后将在定义域内永久有效...void f1(){ #define N 12 const int n = 12; #undef N //取消宏定义后,即使在f1函数,N也无效了 #define N 21//取消后可以重新定义...}是否可以做函数参数宏定义不能作为参数传递给函数const常量可以在函数参数列表中出现

27730

C++ const 和 constexpr关键字解析:常量、函数和指针

很多C++初学者看到const这个关键字第一反应都是一头雾水,主要是因为const可以出现在很多位置,以及后面加入constexpr更是常常感到困惑,今天就为大家一一解释出现它们含义和以及作用...很多全局变量都是通过常量来进行修饰,需要注意是,使用const关键字修饰变量需要立刻初始化 // 修饰局部变量,全局变量,成员变量 const int a = 2; // 错误,表达式必须是可修改左值...,通常用于函数参数列表,因为我们知道在C++函数参数有3传递方式,分别是值传递,指针传递(或者叫地址传递),引用传递,前两种在传递时都会发成拷贝行为 指针本身也是一个变量,在32位操作系统下占用...是C++11引入一个关键字,它作用主要是用来修饰一些函数和变量,使其成为常量表达式,从而在编译器就可以进行计算,进一步提高程序运行期效率 常量表达式:指的是有一个或多个常量组成表达式,在实际开发中经常会接触到常量表达式...constexpr还可以用于修饰函数返回值,在C++11被constexpr修饰函数只能是非void类型函数,而且必须非常简短,通常只有一句return表达式。

80120

C++11特性篇】C++11の【override】【final】关键字——帮助用户检测是否重写

【override】【final】关键字——帮助用户检测是否重写(C++11) 从上面可以看出,C++对函数重写要求比较严格,但是有些情况下由于疏忽,可能会导致函数 名字母次序写反而无法构成重载,而这种错误在编译期间是不会报出...,只有在程序运行时没有 得到预期结果才来debug会得不偿失,因此:C++11从两个角度提供了 override 和 final 两个关键字,可以帮 助用户检测是否重写。...final:表示虚函数不能被重写,被重写即报错 override:检查虚函数是否重写了别的虚函数,重写了即报错 【1】 final:表示虚函数不能被重写,被重写即报错 class Car { public...class Benz :public Car { public: virtual void Drive() {cout << "Benz-舒适" << endl;} }; 【2】override:检查虚函数是否重写了别的虚函数

7110

C++mutable关键字用法

代码编译运行环境:VS2012+Win32+Debug ---- mutalbe中文意思是“可变,易变”,是constant(即C++const)反义词。...在C++,mutable也是为了突破const限制而设置。被mutable修饰变量将永远处于可变状态。...mutable作用有两点: (1)保持长量对象中大部分数据成员仍然是“只读”情况 下,实现对个别数据成员修改。 (2)使const函数可修改对象mutable数据成员。...因为static数据成员存储在全局静态存储区,属于类,不属于类对象,那么常对象和常函数对其可以任意修改,所以类static数据成员根本不需要mutable修饰。...但对于常对象数据成员则不可以被修改,若想修改,则需要mutable修饰。

42310

Java 主函数 main 关键字 static

近期在学习时候才翻出来再看看,其中可能比较难理解关键字 static public 这个关键字在这个函数很好理解,就是表示这个函数是可以被其他类访问到。...void 表示这个函数不返回任何数据。 这个也比较好理解,因为这个函数是主程序入口,通常是不需要返回结果。使用 void 也没关系。...String[] args 这个表示是这个函数可以从执行时候获得输入参数。 就是告诉这个函数在执行时候,你可以在命令行定义一些参数,然后这个函数通过获得这些参数来对运行进行调整。...static 这个就是我们需要说明一下重点了。 我们都知道 static 是表示静态意思,为什么在 main 函数里面需要静态关键字修饰?...我们可以应用 ava static关键字在变量,方法,块和嵌套类。 static关键字属于类,而不是类实例。 被 static 关键字修饰需要创建对象去调用,直接根据类名就可以去访问。

74700

C#override和new关键字

如果对Java熟悉朋友,可能会认为是结果: 这是父类方法 这是子类方法 但是其实运行结果是: 这是父类方法 这是父类方法 这是因为Java类方法默认是虚函数(虽然Java没有这个叫法),子类函数会默认覆盖父类同名函数...然而C#必须使用virtual关键字显示声明该函数是虚函数,然后在子类中使用override关键字重写父类方法,这才真正实现了对父类方法重写,才能实现多态(C++多态就是使用虚函数实现,而且和...c2.fun();子类C2使用new关键字隐藏了父类方法,相当于子类fun()方法是直接继承自父类。...如果派生类方法前面带有 new 关键字,则该方法被定义为独立于基类方法。 如果派生类方法前面带有 override 关键字,则派生类对象将调用该方法,而不是调用基类方法。...如果 override 关键字和 new 关键字均未指定,编译器将发出警告,并且派生类方法将隐藏基类方法。

1.3K20

C++exec()函数

exec()函数C++是一个进程控制函数,用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程代码和数据,创建新进程运行其他程序。...前言 fork 函数之后,如果想要把子进程换成一个我想要执行进程,这时,就不得不使用 exec()函数了,这也是 fork()意义所在。...,而最后2个函数(也就是以p结尾两个函数)可以只给出文件名,系统就会自动从环境变量“$PATH”所指出路径中进行查找。...在这里参数传递方式是以函数第5位字母来区分,字母为“l”(list)表示逐个列举方式,字母为“v”(vertor)表示将所有参数整体构造成指针数组传递,然后将该数组首地址当做参数传给它,数组最后一个指针要求是...execl.c fork.c fork_example.c 可以看到,它成功地执行了"ls -a"命令。

27220

C++与Cconst关键字有何差别?

前言 在《const关键字到底该怎么用》一文中介绍了C语言中const关键字,本文说说C++const关键字,它大部分特点和C语言中类似,所以本文主要针对不同之处。...但是,千万不要写这样代码!!! 与C语言中const关键字不同是,C++中使用const关键字定义b变量值在被改变时会被检测。...即下面的声明是非法: static void printA() const 修饰类成员变量--构造函数初始化 与修饰普通变量不同是,修饰类成员变量还可以在构造函数初始化。...: int &ref = a; 而需要定义对常量引用,即: const int &ref = a; 为什么呢?...总结 关于const关键字CC++区别,想必到这里你已经清楚了。const关键字通常能借助编译器帮助我们提前发现一些不易察觉问题。

69400
领券