短的C程序,求调试

#include<stdio.h>
char a='=';
void main()
{int i=0;
int compa(int);
i=compa(i);
printf("%d",i);
}
int compa(int i)
{
switch(a)
{
case'>':i=0;break;
case'=':i=3;break;
case'<':i=6;break;
}
return(i);
}

Debug/always here.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.

输出因该是3,求调试,谢谢!

我在VC2005 和 Linux 下都能编过。给你提个小建议:
(1)main()函数的类型必须是int ,不是void.
“The C programming Language(《C 程序设计语言》)用的就是 main( )。”--- 这是因为第一版的C语言只有一种类型,那就是int,没有char,没有long,没有float,…………既然只有一种类型,那么就可以不写,后来的改 进版为了兼容以前的代码于是规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main(),而不是等同于void main()。在C99中,标准要求编译器至少给 main() 这种用法来个警告。 最新的 C99 标准中,只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[] )
(2) 函数的声明最好放在函数体外,比如说你这个代码,最好是把函数compa的声明从main函数里面提出来,有助于增强代码的可读性和可维护性。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-14
…函数调用那里,应该是compj(a)…
第2个回答  2011-09-14

int compa(int);
放到main函数外面
第3个回答  2011-09-14
问题应该不是这段代码本身,而是连接错误,根据提示你是不是在其他地方有多重定义? 比如你这个全局char a
第4个回答  2011-09-14
链接错误, 函数名问题,改了!另外你的程序完全没必要那么复杂! 可以看靠下面:

#include <stdio.h>

char a = '=';

int mycompa(void)
{
return (62 - a) * 3; // ascii : > 62 = 61 < 60
}

void main(void)
{
printf("%d\n", mycompa());
}
第5个回答  2011-09-14
//把多余的i删掉

#include <stdio.h>

char a='=';

void main(void)
{
int i;
int compa(void);

i = compa();

printf("%d",i);
}

int compa(void)
{
int i;

switch(a)
{
case '>': i = 0; break;
case '=': i = 3; break;
case '<': i = 6; break;
}

return(i);
}
相似回答