如何获得内部结构的尺寸

时间:2018-11-16 10:59:53

标签: c sizeof

我正在尝试获取内部结构的大小,即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 Bstruct A::struct B

2 个答案:

答案 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)

请注意,C对嵌套结构的支持仅是逻辑上的。每个结构都独立存在。

issubset

https://ideone.com/rHaanj