The strategy used is mainly targeted at C++ code. With some
restriction, it may be used for C code. Here are the main
feature that probably don't work with C.
In C++ one can write the following code.
static char *tb[]={
foo(1),foo(22)
};
where foo is a function. The C++ compiler will generate
the proper code which will be probably called once. The MSG_U
macro (and others) are not hiding function call, but are indeed
dynamic in some sens. C does not support this. Other
translation strategy based on dictionary do have the same
limitation though.
The example using the static char *tb[] is also causing a problem
in C++ if the variable is declared outside of a function. The
problem appear because the "hidden" initialization code generated
by the compiler is called very early, often before main() is called.
Normally, the function translat_load() which bring the
dictionary in memory is called by main().
Fortunately, the current implementation, where _dictionary_system
is a pointer will trigger a seg fault whenever this condition
is met. This fault will be trigger all the time, because all
initialization are called before main. The strategy is safe.