我正在尝试获取内部结构的大小,即struct B
。但是我遇到了编译错误:
prog.c:在“ main”函数中: prog.c:10:53:错误:在':'令牌之前应有')' printf(“%d |%d”,sizeof(struct A),sizeof(struct A :: struct B));
以下是我的代码:
#include <stdio.h>
struct A
{
struct B{};
};
int main() {
printf("%d | %d", sizeof(struct A), sizeof(struct A::struct B));
return 0;
}
您能建议我如何用C语言实现吗?
已更新
来自@Jabberwocky的答案解决了上述问题。但是下面的代码呢?也可以在here中找到:
#include <stdio.h>
struct A
{
struct B{};
};
struct B
{};
int main() {
printf("%d | %d", sizeof(struct A), sizeof(struct B), sizeof(struct A::struct B));
return 0;
}
在这种情况下,出现如下编译错误:
prog.c:8:8:错误:重新定义了“结构B”
结构B
^
prog.c:5:10:注意:最初在此处定义
struct B {};
^
prog.c:在“ main”函数中:
prog.c:12:71:错误:令牌“:”前应有“)”
printf(“%d |%d”,sizeof(struct A),sizeof(struct B),sizeof(struct A :: struct B));
在这里,我如何区分struct B
和struct A::struct B
答案 0 :(得分:6)
#include <stdio.h>
struct A
{
struct B{}; // this should not compile anyway in C as C
// does not allow empty structs
// but this would compile: struct B{int a;};
};
int main() {
printf("%d | %d", sizeof(struct A), sizeof(struct B));
// just write struct B
return 0;
}
工作示例:
#include <stdio.h>
struct A
{
int b;
struct B { int a; };
};
int main() {
printf("%d | %d", sizeof(struct A), sizeof(struct B));
return 0;
}
在32位系统上可能的输出:
8 | 4
答案 1 :(得分:4)