首页 / 知识
关于编译器构造:即使我们没有在C程序中包含stdio.h,为什么也没有得到编译时错误?
2023-04-15 17:17:00

Why don't we get a compile time error even if we don't include stdio.h in a C program?当我一开始没有包含任何头文件时,编译器如何知道sleep函数甚至printf函数的原型? 此外,如果我指定
缺少更具体的原型,编译器将假定函数返回int并接受您提供的任何数量的参数。 取决于CPU体系结构的参数可以传递到寄存器中(例如,MIPS上的a0到a3),也可以按照原始x86调用约定将其压入堆栈。无论哪种情况,传递额外的参数都是无害的。被调用的函数将不会使用传入的寄存器,也不会引用堆栈上的其他参数,但是不会发生任何不良情况。 传递较少的参数会带来更多问题。被调用的函数将使用碰巧在适当的寄存器或堆栈位置中发生的任何垃圾,然后可能会出现hijinks。 在经典C语言中,不需要原型即可调用函数。编译器将推断该函数返回一个int并接受未知数量的参数。这在某些体系结构上可能会起作用,但是如果函数返回除int之外的其他值(例如结构),或者存在任何参数转换,则它将失败。 在您的示例中,可以看到睡眠,并且编译器假定像 这样的原型
请注意,参数列表为空。在C语言中,这与void不同。这实际上意味着"未知"。如果你在写K n n C将为未知类型猜测int。因此,它可能认为睡眠具有以下原型:
关于提供多个参数和链接...我不这确实让我感到惊讶。如果确实可行,那么在运行时发生了什么? n 取决于编译器,但是对于gcc(例如,因为这是您所指的那个),某些标准函数(C和POSIX)都内置了"编译器内在函数"。这意味着编译器附带的编译器库(在这种情况下为libgcc)包含该函数的实现。编译器将允许隐式声明(即使用不带标题的函数),并且链接器将在编译器库中找到实现,因为您可能会将编译器用作链接器前端。 尝试使用'-c'标志编译对象(仅编译,无链接),然后使用链接器直接链接它们。您会发现收到预期的链接器错误。 或者,gcc支持禁用内部函数使用的选项: |
最新内容
相关内容
linux命令和库函数?
linux命令和库函数?,系统,标准,管理,地址,服务,库函数,环境,平台,第一,状态,1.linux系统调用和库函数调用的区别系统调用和库函数在执行的效果linux查看函数命令?
linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,linux下有没有像查看函数那样直接使用man命令来查看结构体的命令?这调用函数命令linux?
调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎么调用system函数,使用Android的linux命令1、int system(const chlinux查询函数命令?
linux查询函数命令?,系统,信息,名称,标准,函数,百度,代码,名字,最新,实时,Linux下查找一个函数在哪个库文件中1、默认状态下,gcc并不搜索数学库linux进入编译器命令?
linux进入编译器命令?,系统,代码,环境,网上,基础,工作,工具,信息,时间,地址,linux终端下如何进行C语言编译1、在Linux下面,如果要编译一个C语言深入理解python函数传参机制
深入理解python函数传参机制,培训,对象,函数,变量,类型,复本,下面,操作,机制,内存,首先需要申明的一点是,python里是没有像C和C++里那样按值传Python中的匿名函数lambda
Python中的匿名函数lambda,代码,地方,名字,主体,名称,培训,函数,表达式,赋值,语句,简述除了def语句之外,Python还提供了一种生成函数对象的表Python有哪些常用函数?
Python有哪些常用函数?,数据,函数,地址,数字,培训,工作,网络,位置,字符串,字符,Python常用函数有哪些?我想大家都比较好奇这个问题,今天小编特python的filter,lambda函数表达式
python的filter,lambda函数表达式,代码,函数,名称,培训,列表,参数,知识点,表达式,约数,元素,filter(functionorNone,sequence),其中sequence可python字符串处理函数大总结
python字符串处理函数大总结,位置,数字,异常,培训,字符串,空格,长度,两边,字母,函数,str=pythonStringfunction生成字符串变量str=pythonStriPython列表操作的函数和方法
Python列表操作的函数和方法,位置,培训,列表,元素,操作,函数,末尾,方法,对象,以下,·Python列表操作包含以下函数:1、cmp(list1,list2):比较两python中文件操作的一些函数
python中文件操作的一些函数,培训,文件,函数,模式,操作,序列,二进制文件,标识符,列表,括号,文件操作的所有函数:注意python2与3有些函数的用法