ну какой же тут strlen()?
Тут мы объявляем массив указателей на функции
Код
static const CHAR *(* const readfns[sizeof(read_str)/4])(void) =
{
una, fnb, fnc, ...
};
Таким образом размер массива мы должны знать на этапе компиляции. Т.е. выражение внутри [] должно быть constant expression, соответственно strlen(), выполняющийся в рантайме, вы туда ну никак не подставите!
По поводу того что мнемоника занимает 4 байта, а sizeof() возвращает кол-во байт вы разобрались уже. sizeof() на этапе компиляции известен.
The truth is out there...