[英]Passing Struct Pointer or Array as Function Argument
我有一个像这样的typedef结构:
typedef struct {
int col;
int row;
} move_t;
我试图将类型为move_t
的数组move_t
给函数作为要填充的排序缓冲区...如下所示:
void generate_valid_moves(int fc, int fr, move_t* moves, int limit);
要么
void generate_valid_moves(int fc, int fr, move_t moves[], int limit);
两者都会产生模糊的gcc错误:
moves.h:43: error: expected declaration specifiers or ‘...’ before ‘move_t’
moves.h:887: error: conflicting types for ‘generate_valid_moves’
moves.h:43: note: previous declaration of ‘generate_valid_moves’ was here
我试过删除typedef并使其变成普通的结构,等等...所有这些都会导致类似的错误。 感觉很基本,我知道我想念一些东西...
我的函数原型和实现的签名完全匹配...因此错误的一部分甚至更陌生。
我的目标是制作一个move_t
数组,然后将其传递到此函数中,以使用move_t
填充。 然后,调用者使用已填充的move_t
缓冲区进行填充。
typedef
必须在引用该类型的函数原型之前 。 C代码是按顺序处理的,在定义名称之前您不能引用它。 因此,如果您首先没有结构定义,那么它会认为move_t
是要声明的变量,但是它之前需要类型说明符。
同样在这里。 甚至带有指向move_t指针的声明也不是问题。
在用于声明函数原型之前,您是否确保声明已经完成?
这是使用基于typedef和基于指针的声明的示例代码:
#ifndef MOVE_H_INCLDED
#define MOVE_H_INCLUDED
typedef struct {
int col;
int row;
} move_t;
void generate_valid_moves(int fc, int fr, move_t* moves, int limit);
#endif
#include <stdio.h>
#include "move.h"
void generate_valid_moves(int fc, int fr, move_t* moves, int limit)
{
}
int main()
{
return 0;
}
用gcc编译move.c。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.