delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2003/08/29/05:18:11

From: "News Reader" <nospam AT aol DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: struct bug?
Date: Fri, 29 Aug 2003 11:01:56 +0200
Organization: UTA/netway (Customer)
Lines: 56
Message-ID: <bin4ql$sfh$1@newsreader1.netway.at>
NNTP-Posting-Host: pat-ei.lucent.wellcom.at
X-Trace: newsreader1.netway.at 1062147733 29169 195.230.174.18 (29 Aug 2003 09:02:13 GMT)
X-Complaints-To: abuse AT uta DOT at
NNTP-Posting-Date: 29 Aug 2003 09:02:13 GMT
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

/*
The following short source does not compile,
because Gcc obviously has problems with

    sizeof("structured type member")   .

Although there is plenty of workaraound (just use
a variable instead of the type), I am still keen to
understand why the compiler can handle the entire
structure (e.g. 'abt' as stated below), but not a
structure member (e.g. 'abt.a').

This looks like a bug to me, but I will gladly
accept knowlegeable explanations of someone with
more insight than myself.

Thanks.
*/


#include <stdio.h>

// Types

typedef struct { int a; int b; } abt;
struct cdt { int c; int d; };

// Vars

struct { int e; int f; } ef;
struct cdt cd;
abt ab;

// Main()

int main ()
{
  printf("\n\n");

  printf("Sz(ab):    %ld\n", sizeof(ab)  );  // These compile, no problem
  printf("Sz(ab.a):  %ld\n", sizeof(ab.a));
  printf("Sz(abt):   %ld\n",sizeof(abt) );   // this still compiles
  printf("Sz(abt.a): %ld\n",sizeof(abt.a));  // >>> BUT THIS ONE DOESN'T

  printf("Sz(cd):    %ld\n", sizeof(cd)  );  // This is ok, although ...
  printf("Sz(cd.c):  %ld\n", sizeof(cd.c));  // ... we get the error below
  printf("Sz(cdt):   %ld\n",sizeof(cdt)  );  // >>> cdt: 'undeclared' ...
  printf("Sz(cdt.c): %ld\n",sizeof(cdt.c));  // >>> ... compiler tells me

  printf("Sz(ef):    %ld\n", sizeof(ef)  );  // vars gave no trouble ...
  printf("Sz(ef.e):  %ld\n", sizeof(ef.e));  // ... just types, sometimes

  return(0);
}


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019