函数返回Int尽管返回类型定义不同

时间:2011-09-18 20:23:39

标签: c struct

所以我在这里有点困惑。我正在开发一个更大的项目,但遇到了一些问题,所以我用一个简单的结构编写了一个小测试用例:

#include <stdio.h>

typedef struct{
    int property1;
}test;

int main(){
    test testing = getNumber();
    printf("%d",testing.property1);
    return 0;
}

test getNumber(){
    test testing = {2};
    return testing;
}

我要做的就是从getNumber()返回的测试结构中读取一个属性。但是,编译器抱怨以下错误:

  

test.c(8):错误C2440:'初始化':无法从'int'转换为'test'

所以我的问题是:尽管我指定了一个测试返回类型,为什么这个函数试图返回一个int?我该如何解决?我只是对简单的事情视而不见了吗?

2 个答案:

答案 0 :(得分:5)

你错过了一个原型:

#include <stdio.h>

typedef struct{
    int property1;
}test;

test getNumber(void); // <<< missing prototype

int main(){
    test testing = getNumber();
    printf("%d",testing.property1);
    return 0;
}

test getNumber(void){
    test testing = {2};
    return testing;
}

答案 1 :(得分:2)

这里的错误信息有点含糊不清。 c函数的默认返回类型是int。编译器报告说它无法进行从inttest的转换。但事实上,它失败了,因为它不知道getNumber()是什么。编译器错误消息应该更清楚地说明对getNumber()的未定义调用或这些行上的某些事情。

C编译器采用从上到下的方法。使用什么变量,函数调用应该事先为它所知。所以当编译器看到以下语句时 -

test testing = getNumber();

直到此时它不知道getNumber()是什么。所以,你有两个选择让编译器开心。

  1. 向前声明函数声明。
  2. 或者将功能定义移到main()上方。