关于C++数据成员对齐的示例

dat*_*ili -9 c++

我试图实现Stack Overflow问题C++ Data Member Alignment和Array Packing.这是代码:

#include <stdio.h>
#include <stddef.h>
typedef struct {
    unsigned char a;
    unsigned char b;
    unsigned char c;
}foo;

typedef struct{
    unsigned short i;
    unsigned char a;
    unsigned char b;
    unsigned char c;
} Bar;

typedef struct {foo f[5];} f_b;
typedef struct {Bar[5];} b_f;
#define ALIGNMENT_OF(t) offsetof( struct { char x; t test; }, test )

int main(void){
    printf("Foo:: Size: %d; Alignment: %d\n", sizeof(foo), ALIGNMENT_OF(foo));
    printf("Bar:: Size: %d; Alignment: %d\n", sizeof(Bar), ALIGNMENT_OF(Bar));
    printf("F_B:: Size: %d; Alignment: %d\n", sizeof(f_b), ALIGNMENT_OF(f_B));
    printf("B_F:: Size: %d; Alignment: %d\n", sizeof(b_f), ALIGNMENT_OF(b_f));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这里有错误:

1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(16): error C2059: syntax error : '['
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(16): error C2238: unexpected token(s) preceding ';'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2332: 'struct' : missing tag name
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2143: syntax error : missing '(' before ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2143: syntax error : missing ';' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2227: left of '->test' must point to class/struct/union/generic type
1>          type is 'int'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(19): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2332: 'struct' : missing tag name
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2143: syntax error : missing '(' before ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2143: syntax error : missing ';' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2227: left of '->test' must point to class/struct/union/generic type
1>          type is 'int'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(20): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2332: 'struct' : missing tag name
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2143: syntax error : missing '(' before ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2143: syntax error : missing ';' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2065: 'f_B' : undeclared identifier
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2146: syntax error : missing ';' before identifier 'test'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2227: left of '->test' must point to class/struct/union/generic type
1>          type is 'int'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(21): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2332: 'struct' : missing tag name
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2143: syntax error : missing '(' before ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2143: syntax error : missing ')' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2143: syntax error : missing ';' before '{'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2227: left of '->test' must point to class/struct/union/generic type
1>          type is 'int'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\data_packing\data_packing.cpp(22): error C2059: syntax error : ')'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

但在代码中,它没有显示红线表示错误.我该如何解决这个问题?

Phi*_*ter 5

看看它在哪里\data_packing.cpp(16):?括号中的16是一个行号.