`
splayx
  • 浏览: 82805 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

extern连接发生在什么时候

    博客分类:
  • C++
 
阅读更多

extern的连接发生在编译时的连接阶段,

但是看下面的代码中add()函数没有被调用,

extern void add();

int main() {
    return 0;
}

 此时没有定义add却没有编译问题,编译器的这个行为也不难理解。

因为add没有被调用,所以没定义也没关系。

 

extern void add();

int main() {
    add();
    return 0;
}

这样编译就不能成功,因为找不到add()的定义

test.cpp:(.text+0x5): undefined reference to `add()'

 

同样,extern修饰变量的时候也是这么个情况。

分享到:
评论

相关推荐

    《你必须知道的495个C语言问题》

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...

    C语言FAQ 常见问题列表

    o 2.4 extern 在函数声明中是什么意思? o 2.5 关键字 auto 到底有什么用途? o 2.6 我似乎不能成功定义一个链表。我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    C/C++笔试题(附答案,华为面试题系列)

    16一般数据库若出现日志满了,会出现什么情况,是否还能使用? 答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记 录日志。也就是说基本上处于不能使用的状态。 17 SQL Server是否...

    最新名企标准通用C++面试题,

    2、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”? 答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int...

    你必须知道的495个C语言问题(PDF)

    1.4 extern 在函数声明中是什么意思? . . . . . . . . . . . . . . . . . 2 1.5 关键字auto 到底有什么用途? . . . . . . . . . . . . . . . . . . . 2 1.6 我似乎不能成功定义一个链表。我试过typedef struct f ...

    对组态王OPC服务器值的读取c#版本

    //在向GROUP中加入ITEMS时出现错误 //-8 //未使用 //-9 //读ITEMS时出现错误 //-10 //不能识别的数据类型 //-11 //读ITEMS的质量戳时出现错误 //-12 //向ITEMS中写入数据时出现错误 //-13 //用户添加...

    Visual Studio 2019 DLL动态库连接实例(图文教程)

    项目建立完成后出现下面的项目结构 其中pch.h声明用的头文件,具体函数代码在pch.cpp文件中。dllmain.cpp和framework.h文件分别为动态链接库的入口和默认加载头文件,可以不用管。直接使用自动生成的代码即可。 2....

    MingW VC 之.a .lib .dll .def 关系

    只有注明EXPORT的函数才能出现在dll的输出表中,外部函数才能调用。 关于函数调用约定__cdecl 还是 __stdcall。我们可以在输出函数名前添加,也可以用cl编译的时候指明 /Gd 使用 __cdecl 调用约定 (C declaration,是...

    海康视频卡动态库

    /// 此DSP上第一个编码通道在所有编码通道中的索引 /// uint firstEncodeChannelIndex; /// /// 此DSP所包含的解码通道个数 /// uint decodeChannelCount; /// /// 此DSP上第一个解码通道在所有解码...

    LuaBind 源码 (Lua增强库)

    协程的时候,你只需要调用 resume() 在你的 lua_State() 上,因为它已经在执行一个函数 (即先前出入的入口函数),所以你不需要再次传入函数.resume()的传入参数将作为Lua侧的 yield()调用的返回值. 为了暂停(yielding)...

    asp.net知识库

    在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个...

    c#学习笔记.txt

    Sun就从来没有将它的Java交给过ECMA,以至于正当Microsoft尽力在Visual J++基础上拓展Java功能,并使之与Windows操作系统紧密结合在一起的时候,Sun公司对Microsoft提出了法律诉讼,控告Microsoft违反了许可证协议中...

    精通QTP——自动化测试技术领航

    1.5.2 对象库的出现改写了软件测试历史 76 1.5.3 一个简单的实例介绍对象库原理、机制及操作流程 77 1.5.3.1 对象模型的老大Object Identification和对象库的暧昧关系 77 1.5.3.2 以一个实例囊括对象库的原理...

    提示出现unresolved external symbol _main的解决方法

    提示出现unresolved external symbol _main搜了下找了下原因如下在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误...

    uboott移植实验手册及技术文档

    extern ulong nand_probe(ulong physadr); static inline void NF_Reset(void) { int i; NF_SetCE(NFCE_LOW); NF_Cmd(0xFF); /* reset command */ for(i = 0; i ; i++); /* tWB = 100ns. */ NF_WaitRB()...

    C++复习资料之系列

    (c) sizeof case extern (d) switch float integer 7. 按C++标识符的语法规定,合法的标识符是( a ,c )。 (a) _abc (b) new (c) int1 (d) “age” 8.下列选项中,( a )不是分隔符。 (a) ? (b) ; (c) ...

    万能makefile写法详解,一步一步写一个实用的makefile

    每个shell命令的进程号通常是不同的,为了每次调用$$时得到的进程号相同,必须把这4行放在一条命令中,这里用分号把它们连接成一条命令(在书写时为了易读,用\拆成了多行),这样每次.$$便是同一个文件了。...

Global site tag (gtag.js) - Google Analytics