3 ms·
With C99 it's not that obvious. Compound literals are outside of C++ standard. However GCC for example supports them, but a bit differently [0]. $ cat foobar
by hawski 8y ago
With C99 it's not that obvious. Compound literals are outside of C++ standard. However GCC for example supports them, but a bit differently [0].
$ 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.html https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html
- slavik81 8y agoThe stated he was only using the subset of C99 that could compile as C++.