如何解决 C 中的类型冲突错误?
How to solve a conflicting types error in c?
我在函数 getline 中收到类型冲突的错误。我在两个函数声明语句中的变量和函数类型是一致的,所以我不知道问题是什么。
#include <stdio.h>
int getline(char line[]);
int main()
{
char line[100];
int len;
while ((len = getline(line)) > 0)
printf("%d\n", len);
}
int getline(char line[])
{
int i, c;
for (i = 0; (c = getchar())!=EOF && c!='\n'; ++i)
line[i] = c;
if (c == '\n'){
line[i] = c;
++i;
}
line[i] = '[=10=]';
return(i);
}
您的编译器似乎配置为使用 POSIX 标准,并且在 POSIX 环境中,getline()
已经在 stdio.h
中作为
的原型
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
这与您的声明/定义冲突。
使用不同的函数名称(例如:my_getline()
或类似名称)。
您的代码使用符合标准的编译器编译得很好。
问题是您的编译器被设置为不合格的编译器(它遵循 POSIX 但不是 C)。因此,POSIX 放置在 stdio.h.
中的非标准函数 getline
之间会发生名称空间冲突
使用像 gcc 这样的编译器,您可以通过使用 gcc -std=c11
进行编译来阻止非标准扩展出现在标准头文件中。默认情况下 gcc 运行 -std=gnu11
,它遵循 POSIX 但不是 C 标准。
如果你是初学者学习C,总是用gcc -std=c11 -pedantic-errors -Wall -Wextra
编译。
您可以将 getline 函数名称更改为 fetchline,一切都会按预期进行。感谢 Lundin 的详尽解释。
我在函数 getline 中收到类型冲突的错误。我在两个函数声明语句中的变量和函数类型是一致的,所以我不知道问题是什么。
#include <stdio.h>
int getline(char line[]);
int main()
{
char line[100];
int len;
while ((len = getline(line)) > 0)
printf("%d\n", len);
}
int getline(char line[])
{
int i, c;
for (i = 0; (c = getchar())!=EOF && c!='\n'; ++i)
line[i] = c;
if (c == '\n'){
line[i] = c;
++i;
}
line[i] = '[=10=]';
return(i);
}
您的编译器似乎配置为使用 POSIX 标准,并且在 POSIX 环境中,getline()
已经在 stdio.h
中作为
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
这与您的声明/定义冲突。
使用不同的函数名称(例如:my_getline()
或类似名称)。
您的代码使用符合标准的编译器编译得很好。
问题是您的编译器被设置为不合格的编译器(它遵循 POSIX 但不是 C)。因此,POSIX 放置在 stdio.h.
中的非标准函数getline
之间会发生名称空间冲突
使用像 gcc 这样的编译器,您可以通过使用 gcc -std=c11
进行编译来阻止非标准扩展出现在标准头文件中。默认情况下 gcc 运行 -std=gnu11
,它遵循 POSIX 但不是 C 标准。
如果你是初学者学习C,总是用gcc -std=c11 -pedantic-errors -Wall -Wextra
编译。
您可以将 getline 函数名称更改为 fetchline,一切都会按预期进行。感谢 Lundin 的详尽解释。