Yes C99 provides compound literals for this (see it live):
return (struct A) { 42 } ;
which is covered in the draft C99 standard section 6.5.2.5
Compound literals and says:
A postfix expression that consists of a parenthesized type name followed by a brace enclosed list of initializers is a compound literal. It provides an unnamed object whose
value is given by the initializer list.84)
and:
The value of the compound literal is that of an unnamed object initialized by the
initializer list. If the compound literal occurs outside the body of a function, the object
has static storage duration; otherwise, it has automatic storage duration associated with
the enclosing block.
and provides several examples including:
EXAMPLE 3 Initializers with designations can be combined with compound literals. Structure objects
created using compound literals can be passed to functions without depending on member order:
drawline((struct point){.x=1, .y=1}, (struct point){.x=3, .y=4});
gcc
also has a nice document on this in it's extension section since it supports this feature outside of C99 as well as clang
.
(void)
as the parameters - otherwise a prototype isn't formed, and the compiler will let you call it with arguments (causing undefined behaviour) – Patel