C语言的入参是从右到左的,因此参数入栈的时候,是后进先出。这样第一个参数才能第一个出来,所以C语言支持可变数量参数,能够从左到右的顺序读取参数。
但是真的是这样吗?C语言怎么会知道入参使用栈的方式呢,而不是堆呢?反正在C语言标准中好像并没有看到有关表述。参数入栈的方式应该是操作系统所实现,由gcc等编译器转换成机器语言。作为一门跨平台的编程语言,一般都是很抽象的,尽量与底层脱钩。比如在C语言标准的文档,对字节,比特等的定义都是很抽象的,只是数据类型,与底层无关。因为说不定某个特殊的CPU就认为16比特为1字节。
C语言的前身是B语言,为了重写Unix系统才被创造出来的,所以C语言看起来像是底层语言。但是C标准并不是根据操作系统制定的,而是根据一门编程语言的需求来制定值的。所以很多我们理解的,都是在某个操作系统下的实现,比如参数存储在栈中,虚拟地址等。当然这样理解也对,因为通常操作系统下就是这样的,还利于我们编写和调试函数。明知道是这样,还视而不见,纯粹给自己添麻烦。
留言与评论(共有 0 条评论) |