gpt4 book ai didi

c - 使用新式函数声明引用尚未提及的函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:48 25 4
gpt4 key购买 nike

打印方阵的辅助函数不得不使用变长数组特性,我定义如下:

void print_matrix(M, dim)
unsigned dim;
int M[dim][dim];
{
/* Print the matrix here. */
...

好消息是,代码可以正常工作,并且其参数按照我希望的顺序排列。

坏消息是,我不得不使用“旧式”函数声明语法,以便在 M 的声明中引用尚未声明的参数 dim ,这显然被认为是 obsoletedangerous .

有没有一种直接的方法可以在不改变参数顺序的情况下对“新式”函数声明做同样的事情? (如果不是,是否认为在这种特定情况下可以接受使用旧式语法?)

最佳答案

在可移植(标准)C 语言中,您无法执行所显示的操作。您必须在矩阵之前指定维度。问题中的原始代码是:

void print_matrix(M, dim)
unsigned dim;
int (*M)[dim][dim];
{

这不能直接翻译——它需要一个像这样的原型(prototype),在矩阵之前有维度:

void print_matrix(unsigned dim, int (*M)[dim][dim]);

这允许您使用 3D 数组调用该函数。或者,使用问题中修改后的符号,您可以打印二维数组:

void print_matrix(unsigned dim, int M[dim][dim]);

GCC 提供了一个 extension协助。引用手册:

If you want to pass the array first and the length afterward, you can use a forward declaration in the parameter list—another GNU extension.

struct entry
tester (int len; char data[len][len], int len)
{
/* … */
}

You can write any number of such parameter forward declarations in the parameter list. They can be separated by commas or semicolons, but the last one must end with a semicolon, which is followed by the “real” parameter declarations. Each forward declaration must match a “real” declaration in parameter name and data type. ISO C99 does not support parameter forward declarations.

关于c - 使用新式函数声明引用尚未提及的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55388209/

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