【发布时间】:2021-03-19 10:04:34
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[20];
int favoriteNum;
} person;
int main(){
person Gec = {"Gec", 1000}; //initialize var Gec of type struct person
Foo = (person) {"Foo", 7}; //initialize var Foo of type struct person
printf("%s's favorite number is %d.\n", Gec.name, Gec.favoriteNum);
printf("%s's favorite number is %d.\n", Foo.name, Foo.favoriteNum);
return 0;
}
得到
“错误:使用未声明的标识符 'Foo'”。
会不会是我的版本不支持使用复合文字?还是我做错了什么?语句person Gec = {"Gec", 1000}; 在功能上是否与Gec = (person) {"Gec", 1000}; 相同?在实验室作业中看到了这一点,但没有详细解释。
【问题讨论】:
-
Foo = (person) {"Foo", 7};-->person Foo = (person) {"Foo", 7};编译器没有神奇的方法来计算变量类型,你必须提供它。 -
Foo仍然需要用类型声明。与 C++ 和其他一些支持这种“魔法”的语言不同,C 不会从对象的初始值设定项类型推断对象的类型。 -
这里有关于compound literals的很好的教程
-
“在实验室作业中看到了这个,但没有详细解释。” 您需要找到它,并将其添加到问题中,因为它没有说出你认为它说的话。在某些语言中,第一次使用标识符时会推断类型,并且可以更改与标识符关联的类型。在 C 中,您必须在声明标识符时为每个标识符显式指定类型,并且该类型不能更改。
标签: c struct compiler-errors initialization