10. Configuration for functions
10.1. Ellipsis in function calls
The directive:
#pragma TenDRA ident ... allow
may be used to enable or disable the use of ...
as a primary expression in a function defined with ellipsis. The type of such an expression is implementation defined. This expression is used in the definition of the va_start
macro in the <stdarg.h>
header. This header automatically enables this switch.
An ellipsis is not an identifier and should not be used in a function call, even if, as in the program below, the function prototype contains an ellipsis:
int f (int a, ...) { return 1; } int main() { int x, y; x = f(y, ...); return 1; }
In default mode the checker raises an error if an ellipsis is used as a parameter in a function call. The severity of this error can be modified by using:
#pragma TenDRA ident ... permit
If permit is replaced by allow
the ellipsis is ignored, if warning
is used tdfc2 produces a warning and if disallow
is used the default behaviour is restored.
10.2. Static block level functions
The ISO C standard (Section 6.5.1) states that the declaration of an identifier for a function that has block scope shall have no explicit storage-class specifier other than extern. By default, tdfc2 raises an error for declarations which do not conform to this rule. The behaviour can be modified using:
#pragma TenDRA block function static permit
where permit is allow
(accept block scope function declarations with other storage-class specifiers), disallow
or warning
.