jordan@aerospace.aero.org (Larry M. Jordan) (01/29/91)
Given the following declaration: struct NODE; typedef NODE *LVAL; struct NODE { char n_type; char n_flags; union ninfo { struct cons { LVAL xl_car; LVAL xl_cdr; } n_cons; struct vector { unsigned length; LVAL *xv_data; } n_vector; ... } n_info; }; which of the following is "correct": [1] int i = sizeof(NODE::ninfo); [2] int i = sizeof(union ninfo); ? Well, Zortech v2.1 can handle [2], but produces an error for [1]. While another vendor can handle [1], but chokes on [2]. Whose right? What does the ARM say?
Reid Ellis <rae@gpu.utcs.toronto.edu> (01/30/91)
In <98561@aerospace.AERO.ORG> jordan@aerospace.aero.org (Larry M. Jordan) writes: > struct NODE { > ... > union ninfo { > ... > } n_info; > }; > >which of the following is "correct"? > > [1] int i = sizeof(NODE::ninfo); > > [2] int i = sizeof(union ninfo); Well, ARM says [1] is correct, but not a lot of compilers have implemented nested types yet, so you'd be taking your chances to use them right now. You might be best off for now using an #ifdef like #ifdef OLD_cplusplus int i = sizeof(ninfo); // you don't need an explicit "union", // do you? #else int i = sizeof(NODE::ninfo); #endif Reid -- Reid Ellis 176 Brookbanks Drive, Toronto ON, M3A 2T5 Canada rae@gpu.utcs.toronto.edu || rae%alias@csri.toronto.edu CDA0610@applelink.apple.com || +1 416 446 1644