Outline
Purpose
Provide a macro to suppress "unused" warnings.
Macros
- BSLA_MAYBE_UNUSED: suppress compiler warnings on unused entities
- BSLA_MAYBE_UNUSED_IS_ACTIVE: defined if
BSLA_MAYBE_UNUSED
is active
- See also
- bsla_annotations
Description
This component provides a preprocessor macro that will suppress "unused" warnings on a locally defined function, type, or variable that is not used.
Macro Reference
BSLA_MAYBE_UNUSED
: This annotation indicates that the so-annotated function, variable, or type is possibly unused and the compiler should not generate a warning for the unused identifier.
BSLA_MAYBE_UNUSED_IS_ACTIVE
: The macro BSLA_MAYBE_UNUSED_IS_ACTIVE
is defined if BSLA_MAYBE_UNUSED
expands to something with the desired effect; otherwise BSLA_MAYBE_UNUSED_IS_ACTIVE
is not defined and BSLA_MAYBE_UNUSED
expands to nothing.
Usage
This section illustrates intended use of this component.
Example 1: "Unused" Warnings
First, we define a namespace, warn
, within the unnamed namespace with a type, a function, and a variable in it. They are unused:
namespace {
namespace warn {
double x;
struct ResultRec {
double d_x;
double d_y;
};
int quadratic(double *zeroA,
double *zeroB,
double *zeroC,
double cubeFactor,
double a,
double b,
double c)
{
typedef int UnusedTypedef;
const double discriminant = b * b - 4 * a * c;
if (discriminant < 0 || 0.0 == a) {
*zeroA = *zeroB = 0.0;
return -1;
}
const double root = ::sqrt(discriminant);
*zeroA = (-b + root) / (2 * a);
*zeroB = (-b - root) / (2 * a);
return 0;
}
}
}
Then, we observe the warnings:
.../bsla_maybeunused.t.cpp:145:21: warning: typedef 'UnusedTypedef' locally
defined but not used [-Wunused-local-typedefs]
typedef int UnusedTypedef;
^~~~~~~~~~~~~
.../bsla_maybeunused.t.cpp:133:27: warning: unused parameter 'zeroC'
[-Wunused-parameter]
double *zeroC,
^~~~~
.../bsla_maybeunused.t.cpp:134:26: warning: unused parameter 'cubeFactor'
[-Wunused-parameter]
double cubeFactor,
^~~~~~~~~~
.../bsla_maybeunused.t.cpp:131:9: warning: 'int {anonymous}::warn::
quadratic(double*, double*, double*, double, double, double, double)'
defined but not used [-Wunused-function]
int quadratic(double *zeroA,
^~~~~~~~~
.../bsla_maybeunused.t.cpp:124:12: warning: '{anonymous}::warn::x' defined
but not used [-Wunused-variable]
double x;
^
Note that none of the compilers currently in use by the development team issue a warning on the unused warn::ResultRec
, but some in the future might. In the meantime, BSLA_MAYBE_UNUSED
is tolerated on type declarations without resulting in a syntax error.
Next, we define a namespace, nowarn
, within the unused namespace with exactly the same unused entities, using the BSLA_MAYBE_UNUSED
annotation to silence the warnings:
namespace {
namespace nowarn {
double d_x;
double d_y;
};
double *zeroB,
double a,
double b,
double c);
int quadratic(double *zeroA,
double *zeroB,
double a,
double b,
double c)
{
const double discriminant = b * b - 4 * a * c;
if (discriminant < 0 || 0.0 == a) {
*zeroA = *zeroB = 0.0;
return -1;
}
const double root = ::sqrt(discriminant);
*zeroA = (-b + root) / (2 * a);
*zeroB = (-b - root) / (2 * a);
return 0;
}
}
}
#define BSLA_MAYBE_UNUSED
Definition bsla_maybeunused.h:239
Finally, we observe that the warnings for the nowarn
namespace are suppressed.
◆ BSLA_MAYBE_UNUSED
#define BSLA_MAYBE_UNUSED |