c++用法:extern在函数前面
C++ usage extern in front of function
我在这里看到了彭博社的采访问题:http://www.careercup.com/question?id=383154
extern void print(int *a, int z);
void print(int *a, int z);
问题1>它会编译吗?
问题2>如果它可以编译,这意味着什么?
extern int i;
int i;
问题3>它会编译吗?
问题4>如果它可以编译,这意味着什么?
// a function declaration
extern void print(int *a, int z);
// still a function declaration
void print(int *a, int z);
答
是,编译成功。
回答2
不带{}
体的全局函数自动为函数声明。extern
为可选关键字。所以它们都只是声明。多重声明也可以。
// a variable declaration
extern int i;
// a variable definition without an initializer
int i;
答案3
是,编译成功。
答
一个是声明,另一个是定义。注意,这个定义没有初始化设定项。对于全局变量,需要显式地添加关键字extern
来区分声明和定义。它完全符合c++中的一个定义规则。
Edit:我无法打开那里的链接。我假设您提到的代码是在全局上下文中。
Q1指的是这个代码:
extern void print(int *a, int z);
void print(int *a, int z);
是否编译取决于它的位置。例如,在类定义的最外层,它将不编译。
struct X
{
extern void print(int *a, int z); // invalid storage class for a class member by vs2010
void print(int *a, int z);
};
int main()
{}
Q2 。extern
指定外部链接,这表示定义可以在另一个翻译单元中。这是函数的默认值。你的c++教科书应该讨论extern
和static
的使用。
Q3指的是这个代码:
extern int i;
int i;
它是否会再次编译取决于它所在的上下文。
第四季度。如果它编译,那么它声明一个外部链接变量i
,并定义该变量(它不能是一个自动定义的局部变量,因为那将是对名称i
的重新定义,而c++不支持这种方式)。
干杯,hth。
extern in声明将分配该编译单元所需的内存,并且在链接期间将有一个定义。简而言之。
在第一种情况下,它将成功编译。这里有一个链接,你可以参考ideone的样本测试。因为在这两种情况下你都只是声明函数,所以只要只有一个定义,就可以多次声明实体。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 在每个可变参数宏参数前面加上 C++ 函数参数的名称
- 为什么在函数参数前面添加 const 会出错?
- C++何时在运算符重载函数前面使用 &
- 如何从前面定义的另一个函数调用函数模板
- 什么意思 :: 在函数调用的前面
- C++函数名称前面的 ~ 是什么意思
- 尝试实现一个函数以删除链表中的结构,同时将它前面的结构分配给它后面的结构
- 前面带有 * 且返回值为 void 的函数声明
- ::c++中模板函数调用前面的作用域解析运算符
- 函数中不必要的弹出指令,前面有if语句
- 函数前面的减号/减号运算符在c++中做什么?
- 如何使用“get”;函数在前面的输入之后
- c++用法:extern在函数前面
- 构造函数主体前面的冒号是否表示继承
- 从函数返回字符串时,如果字符串前面有和结束行,则会错误地打印出来
- 为什么SGI STL源代码在运算符新函数前面使用双冒号