...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <stdio.h> #if __STDC_VERSION__ < 201112L #error This code requires a compiler supporting the C11 standard or newer #endif struct X { char a[8]; }; struct X salutation(void) { struct X result = { "Hello" }; return result; } struct X addressee(void) { struct X result = { "world" }; return result; } int main(void) { printf("%s, %s!\n", salutation().a, addressee().a); return 0; } |
Compliant Solution
...
This compliant solution stores the structures returned by the call to addressee()
before calling the printf()
function. Consequently, this program conforms to both C99 and C11.
...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <stdio.h> struct X { int a[6]; }; struct X addressee(void) { struct X result = { { 1, 2, 3, 4, 5, 6 } }; return result; } int main(void) { printf("%x", ++(addressee().a[0])); return 0; } |
Compliant Solution
This compliant solution stores the structure returned by the call to addressee()
as my_x
before calling the printf()
function. When the array is modified, its lifetime is no longer temporary but matches the lifetime of the block in main()
.
...