【发布时间】:2021-07-15 12:39:53
【问题描述】:
我想了解当 c 源代码文件具有未定义的变量和未定义的函数调用时,C 编译器和链接器如何处理?
例如,如果我的主要功能如下:
void main(void)
{
myvar++;
myfunc();
}
源文件中没有myvar的定义,源文件中也没有名为myfunc()的函数。
我的理解是编译器会对 myvar 的未知变量报错。链接器会给 myfunc() 报错。但是当编译器和链接器遇到这些行并抛出这些错误时,我对编译器和链接器的内部步骤(意味着工具链采取的逻辑步骤)没有清晰的理解。
假设我正在使用 GCC 编译器,ARM MCU 的链接器。
【问题讨论】:
-
inside steps是什么意思? -
@ssbssa 现在在上面的帖子中解释了它。我的主要动机是了解工具链所采取的步骤。例如,工具链何时执行内存管理步骤来为变量和函数分配内存?那么这些错误是发生在内存管理步骤之前还是之后呢?
-
工具链在哪一步检查变量和函数调用的内部和外部链接......是在内存管理步骤之前还是之后?
-
that compiler will give error for unknown variable of myvar. And linker ...编译器在出错的情况下不会生成object/exe文件,你怎么能有东西链接?或者您重用先前编译的结果来链接,因此您提供的源与您的问题不对应
标签: function variables gcc compiler-errors linker