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

C vs C函数问题

发布时间:2020-12-16 10:32:16 所属栏目:百科 来源:网络整理
导读:我正在学习C,在开始学习C作为我的第一个编译语言之后,我决定“回归基
我正在学习C,在开始学习C作为我的第一个编译语言之后,我决定“回归基础”并学习C.

关于每种语言处理函数的方式,我有两个问题.

首先,为什么C“不关心”函数定义的范围,而C呢?

例如,

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

void donothing() { }

以上内容不会在C编译器中编译,而是在C编译器中编译.为什么是这样? C不仅仅是C的扩展,而且应该主要是“向后兼容”吗?

其次,我找到的书(Link to pdf)似乎没有说明主函数的返回类型.我查看并找到其他书籍和网站,这些也通常不指定主要功能的返回类型.如果我尝试编译一个没有为main指定返回类型的程序,它在C编译器中编译很好(尽管有一些警告),但是它不能在C编译器中编译.再说一次,为什么呢?是否更好的风格总是将返回类型指定为整数而不是将其遗漏?

感谢您提供任何帮助,并且只是作为旁注,如果有人可以推荐一本我应该购买的更好的书,那就太棒了!

解决方法

Firstly,why does C “not care” about the scope that functions are defined in,whereas C++ does?

实际上,C确实关心.只是C89允许隐式声明的函数,并将其返回类型推断为int及其参数来自用法. C99不再允许这样做.

因此,在您的示例中,就好像您已将原型声明为

int dosomething();

隐式返回类型也是如此:缺少返回类型在C89中推断为int而不是C99.使用gcc -std = c99 -pedantic-errors编译代码会产生类似于以下内容的内容:

main.c: In function 'main':
main.c:2:5: error: implicit declaration of function 'donothing' [-Wimplicit-function-declaration]
main.c: At top level:
main.c:5:6: error: conflicting types for 'donothing'
main.c:2:5: note: previous implicit declaration of 'donothing' was her

为了记录,这是我用过的代码:

int main() {
    donothing();
    return 0;
}
void donothing() { }

(编辑:李大同)

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

    推荐文章
      热点阅读