gpt4 book ai didi

c - 出现错误 'conflicting type for function',为什么?

转载 作者:行者123 更新时间:2023-11-30 20:58:08 27 4
gpt4 key购买 nike

下面是:为什么会出现?

#include <stdio.h>

void iniStudentLink(struct STUDENT_LINK * L);

int main(){
return 0;
}

void iniStudentLink(struct STUDENT_LINK * L){
printf("hello world!\n");
}

显示错误:inniStudentLink 的类型冲突。

最佳答案

这些是编译代码时 gcc 出现的问题(将其包含在您的问题中以使其更加完整会很方便,这只是对 future 的建议):

testprog.c:3:28: warning: 'struct STUDENT_LINK' declared inside
parameter list will not be visible outside of
this definition or declaration
void iniStudentLink(struct STUDENT_LINK * L);
^~~~~~~~~~~~
testprog.c:9:28: warning: 'struct STUDENT_LINK' declared inside
parameter list will not be visible outside of
this definition or declaration
void iniStudentLink(struct STUDENT_LINK * L){
^~~~~~~~~~~~
testprog.c:9:6: error: conflicting types for ‘iniStudentLink’
void iniStudentLink(struct STUDENT_LINK * L){
^~~~~~~~~~~~~~
testprog.c:3:6: note: previous declaration of ‘iniStudentLink’ was here
void iniStudentLink(struct STUDENT_LINK * L);
^~~~~~~~~~~~~~

换句话说,您声明该结构的两个独立实例,而没有实际定义(a)。它们被认为是独立的原因是因为它们的范围仅限于声明它们的实际函数。

您可以通过实际上定义它来解决此问题,以便声明都引用该定义,例如 with (在任何其他使用之前):

struct STUDENT_LINK { int some_data; };

换句话说,编译得很好:

#include <stdio.h>
struct STUDENT_LINK { int some_data; };
void iniStudentLink (struct STUDENT_LINK *L);
int main(void) { return 0; }
void iniStudentLink (struct STUDENT_LINK *L){ puts("hi!"); }

(尽管它可能会警告您,您实际上并没有在函数中使用 L)。

<小时/>

(a) C 中声明和定义的基本区别是:

声明意味着声明某些东西存在而不创建它,例如(在您的情况下)声明您想要将指向它的指针传递给函数。

定义它的字面意思是,定义它是什么,而不仅仅是那个

示例声明为 extern int i;struct xyzzy;,而等效定义为 int i;struct xyzzy { int插头; };.

关于c - 出现错误 'conflicting type for function',为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53975037/

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