代码之家  ›  专栏  ›  技术社区  ›  James Mitchell

返回char的C函数给出了冲突类型错误

  •  2
  • James Mitchell  · 技术社区  · 7 年前

    我是C新手,编写了以下返回字符的代码。

    int main(int argc, char * argv[]){
       char c = test();
       printf("num = %c \n", c);
    }
    
    char test(){
       char c = 'z';
       return c;
    }
    

    但在编译时,我遇到了以下错误:

    read.c:8:1: warning: data definition has no type or storage class [enabled by default]
     test();
     ^
    read.c:71:6: error: conflicting types for ‘test’
     char test(){
          ^
    read.c:8:1: note: previous declaration of ‘test’ was here
     test();
     ^
    

    5 回复  |  直到 7 年前
        1
  •  4
  •   Asleepace    7 年前

    这是因为您要么必须在main之上定义函数原型,要么将函数移到main之上。

    char test();
    
    int main(int argc, char * argv[]){
       char c = test();
       printf("num = %c \n", c);
    }
    
    char test(){
       char c = 'z';
       return c;
    }
    

    char test(){
       char c = 'z';
       return c;
    }
    
    int main(int argc, char * argv[]){
       char c = test();
       printf("num = %c \n", c);
    }
    
        2
  •  0
  •   P.P    7 年前

    您尚未提供的原型 test() main() . 要么这样 char test(void);

    另一种选择是移动 测试() 主() 确保定义本身提供原型的函数。

     error: conflicting types for ‘test’
    

    在C99 C之前的版本中,编译器隐式地提供了 int 返回的原型 测试() )这与 (实际有 char 作为返回类型)。注意,这不再有效(在C99和更高版本中)。

        3
  •  0
  •   Gabriel Magri    7 年前

    char test();
    
    int main(int argc, char * argv[]){
       char c = test();
       printf("num = %c \n", c);
    }
    
    char test(){
       char c = 'z';
       return c;
    }
    
        4
  •  0
  •   Vlad from Moscow    7 年前

    使用名称之前 test 在本声明中

    char c = test();
    

    还有这个消息

    read.c:8:1: warning: data definition has no type or storage class [enabled by default]
     test();
     ^
    

    表示编译器不知道表达式的类型 test() c 作为初始值设定项。

    int . 然而,它遇到了函数具有返回类型的情况 char . 这些编译器消息说明了这一点

    read.c:71:6: error: conflicting types for ‘test’
     char test(){
          ^
    read.c:8:1: note: previous declaration of ‘test’ was here
     test();
     ^
    

    所以在使用函数之前,你必须声明它

    char test( void );
    

    main

    int main(int argc, char * argv[]){
    

    主要的

    int main( void ){
    

    所以这个程序看起来像

    #include <stdio.h>
    
    char test( void );
    
    int main( void ) 
    {
        char c = test();
        printf( "num = %c\n", c );
    
        return 0;
    }
    
    char test( void )
    {
        char c = 'z';
    
        return c;
    }
    
        5
  •  0
  •   Mureinik    7 年前

    你在打电话 test 在宣布之前。要么在 main 功能,或提供其原型:

    /* Prototype of test */
    char test();
    
    int main(int argc, char * argv[]) {
       char c = test();
       printf("num = %c \n", c);
    }
    
    char test() {
       char c = 'z';
       return c;
    }