On Apr 30, 4:11*pm, Peter Nilsson <ai...@acay.com.auwrote:
Paul wrote:
...Could anyone suggest a way of making this work (using
the preprocessor)?
#define MyList *1,2,3,4
#define Sum(a,b,c,d) a+b+c+d
*x = Sum(MyList);
(n.b. i can pass 'MyList' to a function, but i'd rather pass it to a macro).
* #include <stdio.h>
* #define MyList 1, 2, 3, 4
* #define Sum(a,b,c,d) ((a) + (b) + (c) + (d))
* #define SUM(LIST) Sum(LIST)
* int main(void)
* {
* * printf("%d\n", SUM(MyList));
* * return 0;
* }
C:\tmp>cl /W4 /Ox oopsie.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762
for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
oopsie.c
oopsie.c(12) : warning C4003: not enough actual parameters for macro
'Sum'
oopsie.c(12) : error C2059: syntax error : ')'
C:\tmp>type oopsie.c
#include <stdio.h>
#define MyList 1, 2, 3, 4
#define Sum(a,b,c,d) ((a) + (b) + (c) + (d))
#define SUM(LIST) Sum(LIST)
int main(void)
{
printf("%d\n", SUM(MyList));
return 0;
}
My effort:
#include <stdio.h>
int main(void) {puts("10");return 0;}
It might be possible to accomplish the OP's task, but this one is even
worse than the sizeof without sizeof as far as brain dead requests go.
Someone needs to get "The C Puzzle Book" of the professor's desk and
give him a real textbook.
IMO-YMMV
P.S.
Let's head this one off at the pass:
6.11: I came across some "joke" code containing the "expression"
5["abcdef"] . How can this be legal C?
A: Yes, Virginia, array subscripting is commutative in C. This
curious fact follows from the pointer definition of array
subscripting, namely that a[e] is identical to *((a)+(e)), for
*any* two expressions a and e, as long as one of them is a
pointer expression and one is integral. This unsuspected
commutativity is often mentioned in C texts as if it were
something to be proud of, but it finds no useful application
outside of the Obfuscated C Contest (see question 20.36).
References: Rationale Sec. 3.3.2.1; H&S Sec. 5.4.1 p. 124,
Sec. 7.4.1 pp. 186-7.