【问题标题】:C error: "conflicting types for"C 错误:“冲突类型”
【发布时间】:2014-06-21 22:17:20
【问题描述】:

我的程序包含以下代码:

static short index(key)
 unsigned char *key;
{
    long i, sum = 0;
    for (i = 0; key[i]; i++)
        sum += key[i];
    return(sum % TABLE_SIZE);
}

但是,它给出了以下错误:

table.c:46:14: error: conflicting types for 'index'
 static short index(key)
              ^

我是 C 新手,阅读原型等,但我无法解决问题。

【问题讨论】:

  • a) 为什么要使用这种旧的参数语法? b) 第 46 行是什么?
  • 他可能在用一本旧书。
  • 你有一个老式(过时的)函数定义。自 1989 年以来,现代等价物是 static short index(unsigned char *key) { /* ... */ } - 除了,正如 merlin2011 的回答所说,您应该选择 index 以外的名称。没有充分的理由使用旧式的函数声明或定义;总是使用原型。
  • 我收到的错误消息是“警告:内置函数‘index’的类型冲突”。您的错误消息中是否包含“内置”一词?你用的是什么编译器?如果是gcc,什么版本(gcc --version)?

标签: c types


【解决方案1】:

indexC 库中的一个函数。如果您为函数选择不同的名称,该错误就会消失。

man 页面,我们看到它需要一个const char* 和一个int

 #include <strings.h>

 char *index(const char *s, int c);

【讨论】:

  • &lt;strings.h&gt; 标头和index 函数既非标准又过时。标准替换是在&lt;string.h&gt; 中声明的strchr()。调用你自己的函数index 应该不会引起问题,除非你有一个 #include &lt;strings.h&gt;,你可能不应该有它。
  • @KeithThompson,我有一个现代的gcc,但如果没有#include,我仍然会发生冲突。我相信错误是在链接时发生的。
  • 我刚试了一下,我确实得到了一个错误(来自编译器,而不是来自链接器):c.c:3: warning: conflicting types for built-in function ‘index’。即使它是非标准的,gcc 也会在特殊处理时识别它(因为 gcc 本身默认是非标准的)。如果我用gcc -std=... 编译,诊断就会消失。尽管如此,尽管index() 已过时且不标准,但最好避免使用该名称。您可能会更新您的答案以提及这一点。
  • 感谢您的建议。我更改了“索引”函数的名称,没有更多错误。
猜你喜欢
  • 2014-03-10
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2013-03-25
  • 2023-03-31
  • 2012-10-04
相关资源
最近更新 更多