PIC*_*ain 2 c struct 8051 sdcc
我正在使用C语言编写程序,并将SDCC编译器用于8051架构设备.我正在尝试编写一个名为GetName的函数,它将从Flash Memory中读取8个字符并以某种形式返回字符数组.我知道不可能在C中返回一个数组,所以我试图用这样的结构来做:
//********************FLASH.h file*******************************
MyStruct GetName(int i); //Function prototype
#define NAME_SIZE 8
typedef struct
{
char Name[NAME_SIZE];
} MyStruct;
extern MyStruct GetName(int i);
// *****************FLASH.c file***********************************
#include "FLASH.h"
MyStruct GetName( int i)
{
MyStruct newNameStruct;
//...
// Fill the array by reading data from Flash
//...
return newNameStruct;
}
Run Code Online (Sandbox Code Playgroud)
我还没有任何对此函数的引用,但由于某种原因,我得到一个编译器错误,上面写着"函数无法返回聚合".这是否意味着我的编译器不支持返回结构的函数?或者我只是做错了什么?
ken*_*ytm 13
SDCC尚不支持赋值和返回结构(如果他们的Wiki是最新的):
尚未在sdcc中实现:
- 数据类型为double.
- 无法分配结构和联合,作为函数参数或返回值传递.
- 在函数参数中注册存储类说明符.
也许你应该做一个
void GetName(MyStruct* ret_name, int i);
Run Code Online (Sandbox Code Playgroud)
功能而不是.
这就是说,你应该把函数原型之前的main和之后的MyStruct.如果没有原型,则假定函数返回int.
MyStruct GetName(int i);
void main(void) { ...
Run Code Online (Sandbox Code Playgroud)
(此外,该main功能应该是int main(void)或int main(int argc, char** argv).它不应该返回void.)
所有post-ANSI C89/90编译器都允许返回struct对象.经典(迂腐)K&R C编译器没有.
但是,无论如何,您必须先声明该函数.即在你打电话之前.和char[8] Name你的结构里是不是一个有效的声明.有效表格是char Name[8].
您的指针返回数组函数已正确声明.这是你的尺寸宏被打破了.应该
#define NAME_SIZE 8
Run Code Online (Sandbox Code Playgroud)
注意:没有=字符.