gpt4 book ai didi

c - 如果不能保证参数的评估顺序,编译器如何知道数组的维度

转载 作者:太空狗 更新时间:2023-10-29 17:24:44 25 4
gpt4 key购买 nike

我的代码是:

//fun FUNCTION
void fun(int D1, int D2, int arr[D1][D2])
{
//FUNCTION BODY
}


//MAIN FUNCTION

int D1, D2;
int arr[][3]=//VALUES
D2=sizeof(arr[0])/sizeof(a[0][0]);
D1=sizeof(arr)/sizeof(a[0]);

fun(D1,D2,arr);

如果函数的参数顺序不确定,编译器如何知道函数 fun 中数组 arr 的维数?

最佳答案

C 标准不指定参数的计算顺序。但是,在调用函数之前会评估所有参数。根据 C 2018 6.5.2.2 10(讨论函数调用):

There is a sequence point after the evaluations of the function designator and the actual arguments but before the actual call.

因此,当被调用函数开始执行时,所有参数都已求值,因此它们的值是已知的。然后根据 6.9.1 10(讨论函数定义)评估可变修改参数的大小表达式:

On entry to the function, the size expressions of each variably modified parameter are evaluated and the value of each argument expression is converted to the type of the corresponding parameter as if by assignment.

(请注意,参数是调用者传递给函数的内容,参数是声明为函数声明或定义的一部分的对象,这些对象在进入函数时获取值。)

关于c - 如果不能保证参数的评估顺序,编译器如何知道数组的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55972476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com