error: conflicting types for xxx in c
一、问题描述
#include <stdio.h>#define MAXLINE 1000/* maximum input line length */
int getline(char lines[], int maxline);
void copy(char to[], char from[]);int main(void)
{int len; // current line lengthint max; // maximum lenght seen so farchar line[MAXLINE]; // current input linechar longest[MAXLINE]; // longest linemax = 0;while ((len = getline(line, MAXLINE)) > 0)if ( len > max) {max = len;copy(longest, line);}if (max > 0)printf("%s", longest);return 0}int getline(char s[], int lim)
{int c, i;for(i = 0; i < lim -1 && (c = getchar()) != EOF && C != '\n'; ++i)s[i] += c;if (c == '\n') {s[i] = c;++i;}return i;
}void copy(char to[], char from[])
{int i;i = 0;while ((to[i] = from[i]) != '\0')++i;
}
运行以上代码的时候出现错误提示:error: conflicting types for 'getline'; have 'int(char *, int)'
。代码来源于《C Programming Language》。
二、问题分析
这段代码来自于 《C Programming Language》这本经典的书,按理说不应该有问题,要有问题的话往往可能是因为时间久远,C语言发生了变化。
根据提示 conflicting types
—— conflicting: are different and apposing ,对于 getline() 函数,应该是它的 type 在某两个地方(函数声明&函数定义)不一样,可能是函数的参数类型不一样,也有可能是函数的返回类型不一样。
我们先来看下函数声明:
int getline(char lines[], int maxline);
再来看下函数定义:
int getline(char s[], int lim)
奇怪,函数的参数类型和函数的返回类型都一样啊,为什么还会提示错误呢?既然这两个地方没有问题,那么就剩下函数名了,这里应该有问题。那就换一个名字吧,比如改成 getaline
:
#include <stdio.h>#define MAXLINE 1000/* maximum input line length */
int getaline(char lines[], int maxline);
void copy(char to[], char from[]);int main(void)
{int len; // current line lengthint max; // maximum lenght seen so farchar line[MAXLINE]; // current input linechar longest[MAXLINE]; // longest linemax = 0;while ((len = getaline(line, MAXLINE)) > 0)if ( len > max) {max = len;copy(longest, line);}if (max > 0)printf("%s", longest);return 0;}int getaline(char s[], int lim)
{int c, i;for(i = 0; i < lim -1 && (c = getchar()) != EOF && c != '\n'; ++i)s[i] += c;if (c == '\n') {s[i] = c;++i;}return i;
}void copy(char to[], char from[])
{int i;i = 0;while ((to[i] = from[i]) != '\0')++i;
}
这样一改,还真可以了。但是好像还是没有解释为什么 getline()
这个函数名被占用了呢?根据 资料,getline()
是 a GNU extension
,因为本文着重于讲解如何从提示去分析问题,所以对于 getline()
函数如何造成这种冲突的不展开讲解。
三、解决方法
将函数名 getline
修改成其它名字, 比如改成 getaline
。
四、总结
这个问题之所以给我造成困扰,在于问题的原因表现得并不是那么直接——并不能直接从源代码看出来,同时也反映了我对 getline
是如何引入的并不了解,这是需要深入挖掘的地方。
欢迎搜索及关注:编程人
error: conflicting types for xxx in c相关推荐
- linux 内核编译错误 error: conflicting types for ‘syscall_trace_enter’
编译内核出现如下错误: arch/x86/kernel/ptrace.c:1472:17: error: conflicting types for 'syscall_trace_enter' In ...
- c语言conflicting types,gcc编译C程序出现”error conflicting types for function”编译错误的分析解决...
今天使用gcc编译C语言程序时出现 "error conflicting types for function" 编译错误,这个错误的原因是什么?如何解决?以下看正文的讲解. 在使 ...
- linux c 编译错误 conflicting types for ‘xxx’
原因一: 原来是因为没有先做函数声明,而函数位于main()之后. 在main函数前声明了函数原型后,一切ok. 原因二: 头文件的被循环引用,在引用时考虑清楚包含顺序 原因三: 头文件声明和定义参数 ...
- Xcode error: conflicting types for 'XXXX'
问题描述:在main方法中调用了一个写在main方法后面的方法,比如: void main(){A(); }void A(){} Xcode编译后就报错:conflicting types for ' ...
- linux c 编译错误 conflicting types for 的解决办法
编译时错误提示: error: conflicting types for xxx error: previous implicit declaration of xxx was here 原因与解决 ...
- (转载)conflicting types for xx各种错误的总结
http://blog.sina.com.cn/s/blog_5420e000010185o2.html 编译libvmi 0.8版本时,出现以下错误: libtool: compile: gcc ...
- conflicting types for xx错误
编译libvmi 0.8版本时,出现以下错误: libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -I.. -fvisibility=hidden -I/ ...
- 解决提示“previous definition of...“或者“conflicting types for...“问题方法
分享一个前几天在liunx下环境下使用gcc编译时候出现的一个语法错误,错误提示是: //这里只放出关键错误提示信息: note: previous definition of 'battery_lo ...
- OpenStack安装部署报错记录,Error processing default value xxx for Opt type of HostAddress
Error processing default value xxx for Opt type of HostAddress 前言 问题原因和如何解决 代码分析 正则记录 总结 前言 同事小伙伴在使用 ...
最新文章
- react-webpack-express
- 用计算机 发的,计算机的发分类及应用.ppt
- svn redis和rabbitmq服务启动
- HDL的综合和c语言的编译区别,C语言与verilog 的区别及相互转化
- Linux已经霸占了服务器领域
- java二分法查找_java 中二分法查找的应用实例
- VALSE学习(十六): Visual Question Generation and Answering-视觉问题生成和视觉问题
- 基于jQuery带标题的图片3D切换焦点图
- angularjs 指令详解
- 卸载pip包并卸载其依赖包
- 华为交换机 查ip冲突_交换机查找IP冲突
- C# 中 volatile 关键字的解读
- 达梦数据库安装及连接
- openwrt折腾记3-开通ipv6(二级路由)
- 油耗笔记OilNote-记油耗App
- 舰载光电跟踪与火控系统发展
- ASP + Serv-u 實現FTP的代碼
- Elasticsearch实战 | match_phrase搜不出来,怎么办?
- LeetCode算法刷题目录 (Java)
- Android 网络编程(二) HTTP协议解析