【发布时间】:2019-05-11 12:44:32
【问题描述】:
我有以下代码:
struct something {
char *(*choices)[2];
};
char* arr[2] = {"foo", "bar"};
int main(void) {
struct something obj;
obj.choices = &arr;
return 0;
}
当我使用普通的 C 编译器 (gcc) 编译它时,我没有收到任何错误。但是,我正在为 Z80 编译,它引发了 ERROR (152) Operands are not assignment compatible,它被描述为:
试图分配一个类型无法提升为目标类型的值。
我不明白&arr 和char *(*choices)[2] 的类型有什么不同。我该怎么做才能解决这个问题?
(我使用的是 Zilog z80 编译器,它是 ZDS 5.2.0 的一部分)
【问题讨论】:
-
"普通 C 编译器 (gdb)" 你的意思是这里的 gcc 而不是调试器 gdb,对吧?
-
您似乎遇到了错误。您可能想向供应商提出错误。
-
编译器是否声称支持 ANSI C ?
-
那个 repo 不是编译器。编译器来自Zilog。您必须询问他们支持的 C 语言版本。
-
也许尝试使用
memcpy?如果只有sizeof(char*(*)[2]) == sizeof(void*)你可以void *val = &arr; memcpy(&obj.choices, &val, sizeof(void*))。