PETSC_NODISCARD#
Mark the return value of a function as non-discardable Not available in Fortran
Notes#
Hints to the compiler that the return value of a function must be captured. A diagnostic may (but is not required to) be emitted if the value is discarded. It is safe to use this in both C and C++ source files.
In this context “captured” means assigning the return value of a function to a named
variable or casting it to void
. Between the two, assigning to a named variable is the most
portable way of silencing any warnings, since PETSC_NODISCARD
may expand to GCC’s
__attribute__((warn_unused_result))
which will still emit warnings when casting results to
void
.
Example Usage#
class Foo
{
int x;
public:
PETSC_NODISCARD Foo(int y) : x(y) { }
};
PETSC_NODISCARD int factorial(int n)
{
return n <= 1 ? 1 : (n * factorial(n - 1));
}
factorial(10); // Warning: ignoring return value of function declared 'nodiscard'
auto x = factorial(10); // OK, capturing return value
(void)factorial(10); // Maybe OK, casting to void
auto y = factorial(10); // OK, capturing in y (and casting y to void to silence
(void)y; // set-but-not-used warnings)
Foo(x); // Warning: Ignoring temporary created by a constructor declared 'nodiscard'
auto f = Foo(x); // OK, capturing constructed object
(void)Foo(x); // Maybe OK, casting to void
auto g = Foo(x); // OK, capturing in g (and casting g to void to silence set-but-not-used
(void)g; // warnings)
See Also#
Level#
beginner
Location#
Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages