No, the struct is sized so the largest of the two structs in the union will fit.
To check, declare them all separately:
#include<stdio.h>
typedef struct moditem_struct
{
char modgrpnum[3];
char modsubgrpnum[3];
char modhypen[1];
char moditemextn[3];
char moditemsubindtr[1];
} mod_struct;
typedef struct mod_whole
{
char whole_mod_item[12];
} whole_fyitem;
typedef struct modernitem_struct
{
union
{
mod_struct ms;
whole_fyitem wf;
} w_union;
} full_mod_item;
full_mod_item moditem;
mod_struct ms;
whole_fyitem wf;
int main()
{
printf("%ld\n", sizeof(mod_struct));
printf("%ld\n", sizeof(whole_fyitem));
printf("%ld\n", sizeof(full_mod_item));
return 0;
}
And you will get "sensible" results:
11
12
12