$ cat foobar.c
#include <stdio.h>
struct foo {
int x;
int y;
};
int foobar(struct foo *f)
{
return f->x + f->y;
}
int
main(int argc, char *argv[]) {
(void)argc; (void)argv;
printf("%d\n", foobar(&(struct foo){10, 20}));
return 0;
}
$ gcc -Wall -Wcast-align -Wextra -pedantic -std=c99 foobar.c -o foobar && ./foobar
30
$ g++ -Wall -Wcast-align -Wextra -pedantic foobar.c -o foobar && ./foobar
foobar.c: In function ‘int main(int, char**)’:
foobar.c:17: warning: ISO C++ forbids compound-literals
foobar.c:17: warning: taking address of temporary
30
$ # taking address of temporary means that it's undefined behavior
[0] https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.htmlBetter examples (of actually useful things) would be things like designated initializers, struct literals, declaring array lengths in args using static, etc.
int *x = malloc(sizeof(int));struct Foo { int virtual; };
[1] https://github.com/spc476/SPCDNS
[2] https://github.com/spc476/SPCDNS/blob/ca5052c3d0c3252071a18e...
[3] I am NOT a fan of C++.
[4] But I had to anyway, but I used the C pre-processor to rename the field.
C99 native complex numbers