arm-linux-gcc по сравнению с arm-elf-gcc

В этом случае не имеет особого смысла использовать оператор switch, поскольку вы рассматриваете несколько сравнений строк.

Вместо этого вы можете выполнить поиск в таблице на основе таблицы, отсортированной в алфавитном порядке:

const char* STR_TABLE[] =  // must be sorted in alphabetic order
{
  "exit",
  "history",
  "parse",
  ...
};

const size_t STR_TABLE_SIZE = sizeof(STR_TABLE) / sizeof(STR_TABLE[0]);

Затем можно выполнить поиск в таблице правильной строки. Наивной реализацией является цикл for:

for(size_t i=0; i<STR_TABLE_SIZE; i++)
{
  if(strcmp(STR_TABLE[i], user_input)==0)
  {
    // found, do something
    break;
  }
}

Это лучший вариант, когда количество строк в таблице ограничено. Для больших таблиц вы должны использовать бинарный поиск. Примерно так:

int strcmp_wrapper (const void* obj1, const void* obj2)
{
  return strcmp(obj1, *(const char**)obj2);
}

const char** result = bsearch(user_input, 
                              STR_TABLE,
                              STR_TABLE_SIZE,
                              sizeof(const char*),
                              strcmp_wrapper);

if(result != NULL)
{
  printf("User picked option %s at index %d.", *result, (int)(result - STR_TABLE));
}                               
5
задан user126593 23 December 2008 в 21:24
поделиться

3 ответа

ELF является двоичным форматом, который используют Linux и многие другие:

Формат ELF заменил более старые форматы исполняемых файлов, такие как a.out и COFF во многих подобных Unix операционных системах, таких как Linux, Солярис, IRIX, FreeBSD, NetBSD, OpenBSD, DragonFly BSD, Слог и HP-UX (за исключением 32-разрядных программ PA-RISC, которые продолжают использовать SOM). ELF также видел некоторое принятие в операционных системах не-Unix, таких как версия Itanium OpenVMS и Пересмотр BeOS 4 и позже для компьютеров на базе x86 (где это заменило Портативный Формат исполняемых файлов; версия PowerPC осталась с Предпочтительным Форматом исполняемых файлов). Портативный PlayStation, PlayStation 2, PlayStation 3, консоли Wii и GP2X также используют ELF. AmigaOS 4 и MorphOS, также работающий на машинах PowerPC, используйте ELF. На платформе Amiga исполняемый файл ELF заменил предыдущий EHF (Расширенный Формат Ломтя), который использовался на Amigas, оборудованном платами расширения процессора PPC. ОС Symbian v9 использует формат E32Image [3], который основан на формате файла ELF.

Большая часть Sony Ericsson (например, W800i, W610, K790, и т.д.), некоторый Siemens (SGOLD и платформы SGOLD2: от Siemens C65 до S75 и BenQ-Siemens E71/EL71) и Motorola (например, E398, SLVR L7, v360, v3i и весь телефонный LTE2, который имеет патч, применяются) телефоны могут выполнить файлы ELF с помощью патча, который добавляет ассемблерный код к основному встроенному микропрограммному обеспечению (Известный как ELFPack в подземной культуре модификации).

0
ответ дан 15 December 2019 в 01:13
поделиться

I seem to remember at some point that that bit in the middle didnt matter. As already mentioned elf is the standard file format, you want to use that anyway and will get that anyway independent of the binary name. What may (or not) matter more is the calling convention, I dont know if when calling a shared library function you have to get your calling convention to match or if it is handled for you somewhere else.

0
ответ дан 15 December 2019 в 01:13
поделиться

Имена компиляторов не обязательно что-то значат. В зависимости от того, кто создал компиляторы (и назвал их), вы получите разные результаты. Возможно, для конкретной конфигурации существует правильное имя, но какой-то случайно скомпилированный gcc может быть неправильным.

Что касается компиляторов CodeSourcery (вероятно, наиболее правильные имена), см. страницу их платформ , чтобы узнать, что означают их имена.

2
ответ дан 15 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: