Chris McDonald wrote:
I've been trying to wean myself off using parentheses after the sizeof
operator (and after the return keyword, too), but my understanding is
challenged by the 4th use of sizeof in the following code:
#include <stdio.h>
struct {
int i;
char *p;
} var;
typedef struct {
int i;
char *p;
} TYPE;
int main(int argc, char *argv[])
{
printf("1: %d\n", sizeof var);
printf("2: %d\n", sizeof(var));
printf("3: %d\n", sizeof TYPE);
printf("4: %d\n", sizeof(TYPE));
return 0;
}
I understand that (TYPE) is not a value, so is the 3rd use of sizeof a
sort of 'special case' of what sizeof permits?
(gcc v4.0.1 and earlier, just to make this possibly OT)
A bit confused; Thanks,
The third use is an error for which the compiler must
issue a diagnostic. It is not some kind of special case
for sizeof; the construct simply doesn't work at all. (If
it works for your compiler, you are probably running the
compiler in a "C-with-extras" mode; gcc is famous/notorious
for creative departures from Standard C. Try using the
command-line options "-W -Wall -ansi -pedantic" or similar.)
By the way, "%d" is an incorrect conversion specifier for
the result of sizeof. "%d" must match an ordinary signed int,
but sizeof produces a size_t. The precise makeup of size_t
varies from one compiler to another, but it is certainly not
a signed value. I have used compilers where all of the examples
you show (except #3, which doesn't compile) would print zero.
--
Eric Sosman
es*****@acm-dot-org.invalid