外部常量与typedef结构体

3

I have in .h file:

typedef struct MyName {

uint8_t AA;
uint8_t BB; 
};

extern const MyName NewName[num];

在 .c 文件中,我有:

const MyName NewName[num] = {{0x01,0x02}, {0x03,0x04}};

编译器报错“unknown type name” MyName,我该如何解决?谢谢您的帮助。

是的,我一般的印象是typedef意味着和...同义,所以在这种情况下,你并没有指定这个结构体与什么同义。 - Brett Caswell
2个回答

5

typedef 应该是什么意思呢?

typedef struct myName 
{
    uint8_t AA;
    uint8_t BB; 
} 
MyName;

如果没有最后的MyName,你实际上还没有进行任何typedef操作。


我正要说这个...虽然我对C语言的掌握还不够,无法确定自己是否正确...不过,关于这个问题:typedef struct _MyName {} const MyName ?? - Brett Caswell
必须承认,我从未在typedef本身中包含const,但你确实可以这样做。我不这样做的原因是因为可能有些情况下我需要一个非const的结构体实例。 - user3386109
2
原始代码实际上是非法的,尽管一些常见的编译器似乎可以接受它而不发表评论(显然只是忽略了“typedef”关键字)。 - M.M
由于定义结构的这种格式已经过时,并且存在其他问题,比如使用typedef。更好的做法是去掉'typedef'文本,并且在每次提到结构体时都使用struct _MyName。顺便说一句:使用前导下划线是非常糟糕的做法,因为它可能与编译器生成的名称发生冲突。 - user3629249
“_MyName”是一个保留的标识符,请勿使用。 - Potatoswatter

2
正确的写法是:
在.h文件中。
struct MyName 
{
   uint8_t AA;
   uint8_t BB; 
};

extern const struct MyName NewName[];
extern const int num;

在 .c 文件中应该是这样的:
const struct MyName NewName[] = {{0x01,0x02}, {0x03,0x04}};
const int num = sizeof( NewName ) / sizeof(struct MyName);

感谢您的翻译工作。 - ASG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接