typedef signed t;
|
|
typedef int plain;
|
|
struct tag {
|
|
unsigned t:4; // t is the name of the field
|
|
const t:5; // t is the name of the type of the unnamed 5-bit field
|
|
plain r:5;
|
|
};
|
|
|
|
struct tag2 {
|
|
int xx:8;
|
|
int :8; // a field with no name
|
|
int :8; // a field with no name
|
|
int yy:8;
|
|
};
|
|
|
|
typedef int a, (*b)(a intarg);
|
|
// ^ ^----------------------------------------|-------|
|
|
// (1) where does it say in the std that this name becomes a type name
|
|
// even before the end of the typedef declarator list that is a part of?
|
|
|
|
// (2) where in the std does is say how the scope of typedef names is
|
|
// handled (global, function-level, block-level, etc.)?
|
|
|
|
// (3) what are the exact rules about typedef scopes, and the different
|
|
// contexts in which a typedef can occur that causes it to have non-local
|
|
// or non-global scope?
|
|
|
|
// (4) printTree to show the real AST in addition to outputNode which prints
|
|
// source code.
|
|
|
|
int c(int x) { return x; }
|
|
|
|
b e = c;
|
|
|
|
unsigned x;
|
|
unsigned long int y;
|