我在这里看到了彭博社的面试问题: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>如果它被编译了,那是什么意思?
发布于 2011-08-12 11:51:39
// a function declaration
extern void print(int *a, int z);
// still a function declaration
void print(int *a, int z);答案1
是的,它编译成功。
答案2
没有主体{}的全局函数自动成为函数声明。关键字extern是可选的。所以它们都只是声明。多个声明就可以了。
// a variable declaration
extern int i;
// a variable definition without an initializer
int i;答案3
是的,它编译成功。
答案4
一个是声明,另一个是定义。请注意,此定义没有初始化器。对于全局变量,您需要显式添加关键字extern来区分声明和定义。它完全符合C++中的One Definition Rule。
编辑:我无法打开那里的链接。我假设您提到的代码是在全球范围内的。
发布于 2011-08-12 11:59:46
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;它是否会再次编译取决于它所在的上下文。
Q4.如果编译成功,则说明它声明了一个外部链接变量i,并定义了该变量(它不能是定义的自动本地变量,因为这将是以C++不支持的方式重新定义名称i )。
干杯&哈。
发布于 2011-08-12 11:53:11
声明中的extern将分配这个比较单元所需的内存,并且在链接期间会有一个定义。在一个玉米壳里。
https://stackoverflow.com/questions/7035362
复制相似问题