C错误:“;“的冲突类型”;

C错误:“;“的冲突类型”;,c,types,C,Types,我的程序包括以下代码: 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(

我的程序包括以下代码:

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新手,读过关于原型设计等方面的书,但我无法解决这个问题。

索引是
C
库中的一个函数。如果为函数选择不同的名称,该错误将消失

从页面中,我们可以看到它需要一个
const char*
和一个
int

 #include <strings.h>

 char *index(const char *s, int c);
#包括
字符*索引(常量字符*s,int c);

索引
C
库中的一个函数。如果为函数选择不同的名称,该错误将消失

从页面中,我们可以看到它需要一个
const char*
和一个
int

 #include <strings.h>

 char *index(const char *s, int c);
#包括
字符*索引(常量字符*s,int c);

a)为什么要使用这种旧的参数语法?b) 第46行是什么?他可能在用一本旧书。你有一个老式的(过时的)函数定义。自1989年以来,现代的等价物是
静态短索引(unsigned char*key){/*…*/}
——只是,正如merlin2011的回答所说,您应该选择一个名称而不是
索引
。没有充分的理由使用老式的函数声明或定义;始终使用原型。我收到的错误消息是“警告:内置函数'index'的类型冲突”。您的错误消息是否包含“内置”一词?你在用什么编译器?如果是gcc,那么是什么版本(
gcc--version
)?a)为什么要使用这个旧的参数语法?b) 第46行是什么?他可能在用一本旧书。你有一个老式的(过时的)函数定义。自1989年以来,现代的等价物是
静态短索引(unsigned char*key){/*…*/}
——只是,正如merlin2011的回答所说,您应该选择一个名称而不是
索引
。没有充分的理由使用老式的函数声明或定义;始终使用原型。我收到的错误消息是“警告:内置函数'index'的类型冲突”。您的错误消息是否包含“内置”一词?你在用什么编译器?如果是gcc,那么是哪个版本(
gcc--version
),
标题和
索引
函数都是非标准的,并且已经过时。标准替换是在
中声明的
strchr()
。调用自己的函数
index
应该不会引起问题,除非你有一个
#include
,你可能根本就不应该有它。@KeithThompson,我有一个现代的
gcc
,没有
#include
,我仍然存在冲突。我相信错误发生在链接时。我刚刚尝试过,但我确实收到了一个错误(来自编译器,而不是链接器):
c.c:3:警告:内置函数“index”的类型冲突
。gcc在特殊情况下会识别它,即使它是非标准的(因为gcc本身在默认情况下是非标准的)。如果我使用
gcc-std=…
编译,诊断就会消失。尽管
index()
已经过时且不标准,但最好避免使用该名称。您可以更新您的答案以提及此内容。谢谢您的建议。我更改了“index”函数的名称,不再出现错误。
标题和
index
函数都是非标准且过时的。标准替换是在
中声明的
strchr()
。调用自己的函数
index
应该不会引起问题,除非你有一个
#include
,你可能根本就不应该有它。@KeithThompson,我有一个现代的
gcc
,没有
#include
,我仍然存在冲突。我相信错误发生在链接时。我刚刚尝试过,但我确实收到了一个错误(来自编译器,而不是链接器):
c.c:3:警告:内置函数“index”的类型冲突
。gcc在特殊情况下会识别它,即使它是非标准的(因为gcc本身在默认情况下是非标准的)。如果我使用
gcc-std=…
编译,诊断就会消失。尽管
index()
已经过时且不标准,但最好避免使用该名称。您可以更新您的答案以提及此内容。谢谢您的建议。我更改了“index”函数的名称,不再出现错误。