У меня есть структура, к которой должна иметь доступ только одна функция. Функция преобразует токены, такие как "k, K, kb, KB, m, M, mb, MB, ...", в фактическую единицу. Целью этого является упрощение файла конфигурации.
Итак, предположим, что у нас есть:
static uint32_t real_unit(const char *str)
{
struct u2type {
char key[3];
uint32_t val;
} const u2types[] = {
{ "k", KB_UNIT },
{ "K", KB_UNIT },
{ "kb", KB_UNIT },
{ "KB", KB_UNIT },
{ "m", MB_UNIT },
{ "M", MB_UNIT },
{ "mb", MB_UNIT },
{ "MB", MB_UNIT },
{ "g", GB_UNIT },
{ "G", GB_UNIT },
{ "gb", GB_UNIT },
{ "GB", GB_UNIT },
{ { 0 }, 0 }
};
... code to look up str ...
}
Я видел другие программы, в которых struct u2type была бы объявлена как статическая (опять же, внутри функции), и я не вижу, насколько это полезно. Структура не изменится, она всегда будет одинаковой при каждом входе в функцию. Вот почему я сделал это const.
Тем не менее, я видел, как многие люди делали statc struct foo {...} const foos [] = {...} внутри функции, где область видимости просто очевидна.
Есть ли польза от этого? Я пытаюсь изучить выходные данные ASM, прежде чем перейти к SO с такими вопросами по оптимизации, но я не гуру сборки:)
EDIT:
Да, я знаю, что этот подход пахнет как ноги. У некоторых проектов просто странные требования (обычно обязательные для нечетных людей). Вопрос, однако, остается совершенно отдельным от использования функции.