因为函数定义在链接时包含在可执行文件中,但声明或语法检查都在编译时完成
还要考虑一件事,当您调用任何函数并且编译器无法找到函数的声明时,它会生成警告为implicit declaration of func().
为了删除此警告消息,我们提供了 func 的前向声明,int func();并且编译时没有任何警告消息。
你认为为什么会发生这种情况?发生这种情况是因为编译器没有找到该func()符号。根据语言语法使代码没有错误完全取决于编译器。
但是最终可执行文件的构建是在链接时完成的,然后链接器开始寻找 的函数定义func(),如果找到则很好,如果没有..那么Linker error
could not have resolved external symbol _func()
注意:任何外部符号都会在链接时解析
在 gcc 上仅用于编译时使用此:(这可能根据编译器而有所不同)
gcc -Werror -c test.c --> 它将生成test.o文件
然后尝试链接它并使其可执行
gcc -Werror -o test test.o-->test可执行
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |