Posted to tcl by apw at Fri Aug 03 19:48:25 GMT 2007view pretty

#include <stdio.h>
#define foo(x) ({struct st *v; v = moo(x); v == NULL ? NULL : v->poo; })

struct st {
int poo;
} st = {
3
};

int moo(int i) {
if (i == 1)
    return (int)&st;
    return NULL;
}

int main(int argc, char *argv[]) {
int j = foo(1);
fprintf(stderr, "j:%d\n", j);
}

Comments

Posted by patthoyts at Fri Aug 03 20:00:12 GMT 2007 [text] [code]

C:\temp\func>cl -W3 -Od -Zi -MDd aps.c -link -subsystem:console -debug Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. aps.c aps.c(13) : warning C4047: 'return' : 'int ' differs in levels of indirection fr om 'void *' aps.c(18) : error C2059: syntax error : '{' aps.c(18) : error C2065: 'v' : undeclared identifier aps.c(18) : warning C4047: '==' : 'int ' differs in levels of indirection from ' void *' aps.c(18) : error C2223: left of '->poo' must point to struct/union aps.c(18) : error C2059: syntax error : ')' aps.c(19) : error C2143: syntax error : missing ')' before '(' aps.c(19) : error C2143: syntax error : missing ')' before '&' aps.c(19) : error C2091: function returns function aps.c(19) : error C2143: syntax error : missing '{' before '&' aps.c(19) : error C2059: syntax error : '&' aps.c(19) : error C2059: syntax error : ')' aps.c(19) : error C2059: syntax error : ')' aps.c(20) : error C2059: syntax error : 'return' aps.c(21) : error C2059: syntax error : '}'

Posted by patthoyts at Fri Aug 03 20:04:41 GMT 2007 [text] [code]

int main(int argc, char *argv[]) { int j = ({struct st *v; v = moo(1); v == ((void *)0) ? ((void *)0) : v->poo;}); fprintf((&_iob[2]), "j:%d\n", j); return 0; }

Posted by kbk at Fri Aug 03 20:11:14 GMT 2007 [text] [code]

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. test.c test.c(12) : error C2059: syntax error : '{' test.c(12) : error C2065: 'v' : undeclared identifier test.c(12) : warning C4047: '=' : 'int ' differs in levels of indirection from 'struct st *' test.c(12) : warning C4047: '==' : 'int ' differs in levels of indirection from 'void *' test.c(12) : error C2223: left of '->poo' must point to struct/union test.c(12) : error C2059: syntax error : ')' test.c(13) : error C2059: syntax error : '{' test.c(13) : error C2059: syntax error : ')' test.c(14) : error C2143: syntax error : missing ')' before '(' test.c(14) : error C2143: syntax error : missing ')' before '&' test.c(14) : error C2091: function returns function test.c(14) : error C2143: syntax error : missing '{' before '&' test.c(14) : error C2059: syntax error : '&' test.c(14) : error C2059: syntax error : ')' test.c(14) : error C2059: syntax error : ')' test.c(15) : error C2059: syntax error : '}'