一、问题描述

#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相关推荐

  1. linux 内核编译错误 error: conflicting types for ‘syscall_trace_enter’

    编译内核出现如下错误: arch/x86/kernel/ptrace.c:1472:17: error: conflicting types for 'syscall_trace_enter'  In ...

  2. c语言conflicting types,gcc编译C程序出现”error conflicting types for function”编译错误的分析解决...

    今天使用gcc编译C语言程序时出现 "error conflicting types for function" 编译错误,这个错误的原因是什么?如何解决?以下看正文的讲解. 在使 ...

  3. linux c 编译错误 conflicting types for ‘xxx’

    原因一: 原来是因为没有先做函数声明,而函数位于main()之后. 在main函数前声明了函数原型后,一切ok. 原因二: 头文件的被循环引用,在引用时考虑清楚包含顺序 原因三: 头文件声明和定义参数 ...

  4. Xcode error: conflicting types for 'XXXX'

    问题描述:在main方法中调用了一个写在main方法后面的方法,比如: void main(){A(); }void A(){} Xcode编译后就报错:conflicting types for ' ...

  5. linux c 编译错误 conflicting types for 的解决办法

    编译时错误提示: error: conflicting types for xxx error: previous implicit declaration of xxx was here 原因与解决 ...

  6. (转载)conflicting types for xx各种错误的总结

    http://blog.sina.com.cn/s/blog_5420e000010185o2.html 编译libvmi 0.8版本时,出现以下错误: libtool: compile:  gcc ...

  7. conflicting types for xx错误

    编译libvmi 0.8版本时,出现以下错误: libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I.. -fvisibility=hidden -I/ ...

  8. 解决提示“previous definition of...“或者“conflicting types for...“问题方法

    分享一个前几天在liunx下环境下使用gcc编译时候出现的一个语法错误,错误提示是: //这里只放出关键错误提示信息: note: previous definition of 'battery_lo ...

  9. OpenStack安装部署报错记录,Error processing default value xxx for Opt type of HostAddress

    Error processing default value xxx for Opt type of HostAddress 前言 问题原因和如何解决 代码分析 正则记录 总结 前言 同事小伙伴在使用 ...

最新文章

  1. react-webpack-express
  2. 用计算机 发的,计算机的发分类及应用.ppt
  3. svn redis和rabbitmq服务启动
  4. HDL的综合和c语言的编译区别,C语言与verilog 的区别及相互转化
  5. Linux已经霸占了服务器领域
  6. java二分法查找_java 中二分法查找的应用实例
  7. VALSE学习(十六): Visual Question Generation and Answering-视觉问题生成和视觉问题
  8. 基于jQuery带标题的图片3D切换焦点图
  9. angularjs 指令详解
  10. 卸载pip包并卸载其依赖包
  11. 华为交换机 查ip冲突_交换机查找IP冲突
  12. C# 中 volatile 关键字的解读
  13. 达梦数据库安装及连接
  14. openwrt折腾记3-开通ipv6(二级路由)
  15. 油耗笔记OilNote-记油耗App
  16. 舰载光电跟踪与火控系统发展
  17. ASP + Serv-u 實現FTP的代碼
  18. Elasticsearch实战 | match_phrase搜不出来,怎么办?
  19. LeetCode算法刷题目录 (Java)
  20. Android 网络编程(二) HTTP协议解析

热门文章

  1. 阿里入股优酷=几乎买下了半个中国互联网?
  2. 将QQl里面的休息都迁移过来了
  3. 名画326 金农《花卉图册十二开》
  4. 【Bleak】三、扫描(指定设备地址)
  5. 牛腩新闻发布系统之技术篇(二)——生成验证码
  6. c语言htons函数用法,在內核中C語言實現htons()函數
  7. c语言排序(反向快速排序)
  8. 码农保命秘诀之全身检查_专属全身体检项目大全
  9. 大数据生态和Spark简介
  10. 小希的迷宫——HDU1272