加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C对象的顺序是否重要?

发布时间:2020-12-16 09:35:19 所属栏目:百科 来源:网络整理
导读:C对象在文件中出现的顺序是否重要? 例如,在函数中,如果我创建两个函数,而上面的函数引用另一个函数,它会起作用吗? (是的,我已经尝试过了.) 对静态函数,INLINE函数等有效吗? 结构有效吗?如果我引用在.c文件中进一步定义的结构,会发生什么? 这是编译器特
C对象在文件中出现的顺序是否重要?

例如,在函数中,如果我创建两个函数,而上面的函数引用另一个函数,它会起作用吗? (是的,我已经尝试过了.)
对静态函数,INLINE函数等有效吗?
结构有效吗?如果我引用在.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代码上方的声明,我可以以任何我喜欢的方式更改函数的顺序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读