8. Configuration for initialisers

  1. 8.1. Initialisation of compound types
  2. 8.2. Variable initialisation

8.1. Initialisation of compound types

Many older C dialects do not allow the initialisation of automatic variables of compound type. Thus, for example:

void f ()
{
	struct {
		int a;
		int b;
	} x = { 3, 2 };
}

would not be allowed by some older compilers, although by default tdfc2 does not raise any errors since the code is legal according to the ISO C standard. The checker's behaviour may be changed using:

#pragma TenDRA initialization of struct/union (auto) permit

where permit is allow, warning or disallow. This feature is particularly useful when developing a program which is intended to be compiled with a compiler which does not support automatic compound initialisations.

8.2. Variable initialisation

The ISO C standard (Section 6.5.7) states that all expressions in an initialiser for an object that has static storage duration or in an initialiser-list for an object that has aggregate or union type shall be constant expressions. The pragma:

#pragma TenDRA variable initialization permit

may be used to allow non-constant initialisers if permit is replaced by allow. The other option for permit is disallow which restores the default behaviour of flagging non-constant initialisers for objects of static storage duration as errors.