C对象的顺序是否重要?
C对象在文件中出现的顺序是否重要?
例如,在函数中,如果我创建两个函数,而上面的函数引用另一个函数,它会起作用吗? (是的,我已经尝试过了.) 这是编译器特定的任何扩展吗?在这种情况下,编译器如何工作?它首先扫描整个文件的所有声明/定义,然后尝试取消引用函数/符号吗? 解决方法
首先,如果“如果我创建了两个函数而上面的那个函数引用了另一个函数,它会起作用吗?”你的意思是这样的:
int foo() { return bar(); } int bar() { return 0; } 然后编译器可以对bar()进行有根据的猜测,但如果bar()尚未声明,它至少会发出警告.对于无法调用的符号(如变量或类型),如果在声明它们之前使用它们,那将是一个彻头彻尾的错误. 在C中,无论何时使用标识符(并且无论标识符的类型如何:它可能是函数,变量,类型等),都应该事先声明它.您可以添加到任何标识符的各种修饰符(如您所说,静态,内联和所有其他标识符)对此没有影响. 不要混淆声明和定义.声明只是告诉编译器存在名称;一个定义实际上告诉编译器它是什么. 例如,这是一个定义: int bar() { return 4; } 注意它有一个主体,里面有(简单的)代码. 这是匹配声明: int bar(); 一旦看到声明或其定义,编译器就会很乐意接受函数的使用.出于组织原因和更好的灵活性,通常最好在C文件的顶部(或包含的头文件中)编写所有函数的声明,然后编写定义. 所以,我的第一个例子应该是这样的: int foo(); int bar(); int foo() { return bar(); } int bar() { return 0; } 通过C代码上方的声明,我可以以任何我喜欢的方式更改函数的顺序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |