gpt4 book ai didi

c - 关于 struct 数组作为 gcc 和 vc 编译的参数

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:23 26 4
gpt4 key购买 nike

我知道我可以像这样使用结构数组作为函数参数

创建一个结构

struct number{
int times;
char numptr;
}numList[MAXNUM];

并创建一个函数

void transform(int i, struct number *L){......}

将结构数组传递给函数

transform(i, numList);

但是为什么我用VC编译成功,用gcc编译就不行呢?我用的是codeblocks,编译器是gcc,部分错误在这里

warning: 'struct number' declared inside parameter list [enabled by default]|
warning: its scope is only this definition or declaration, which is probably not what you want[enabled by default]|
warning: passing argument 2 of 'transform' from incompatible pointer type [enabled by default]|
note: expected 'struct number *' but argument is of type 'struct number *'|
error: conflicting types for 'transform'|

最佳答案

请注意,问题可能只是顺序问题。以下是 SSCCE ( Short, Self-Contained, Correct Example ) 的两个示例,一个显示您的问题,一个未显示您的问题。两者之间的区别在于函数声明出现在源代码中的位置 — 在 struct number 定义之前或之后。

清理编译

#include <stdio.h>

enum { MAXNUM = 3 };

struct number{
int times;
char numptr;
}numList[MAXNUM];

void transform(int i, struct number *L);

extern void function(void);

void function(void)
{
int i = 3;
transform(3, numList);
for (int j = 0; j < i; j++)
printf("%c: %d\n", numList[j].numptr, numList[j].times);
}

$ gcc -O3 -g -std=c99 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -c vc1.c
$

包含警告

#include <stdio.h>

void transform(int i, struct number *L);

extern void function(void);

enum { MAXNUM = 3 };

struct number{
int times;
char numptr;
}numList[MAXNUM];

void function(void)
{
int i = 3;
transform(3, numList);
for (int j = 0; j < i; j++)
printf("%c: %d\n", numList[j].numptr, numList[j].times);
}

编译:

$ gcc -O3   -g      -std=c99   -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition     -c vc2.c
vc2.c:3:30: warning: ‘struct number’ declared inside parameter list [enabled by default]
vc2.c:3:30: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
vc2.c: In function ‘function’:
vc2.c:17:5: warning: passing argument 2 of ‘transform’ from incompatible pointer type [enabled by default]
vc2.c:3:6: note: expected ‘struct number *’ but argument is of type ‘struct number *’
$

您可以通过在 #include 之后(或者实际上在它之前)添加一行 struct number; 来修复第二个示例。或者将 struct number 的定义移到 void transform(int i, struct number *L); 的声明之上。如果您有两个源文件,则更容易遇到此问题,一个定义 transform() 函数,另一个使用它。那就是您开始使用 header 的时候了——它们可用于提供不同文件之间的一致性检查。

编译器:Mac OS X 10.7.5 上的 GCC 4.7.1。

关于c - 关于 struct 数组作为 gcc 和 vc 编译的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16122877/

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