что регистрирует const char * const * name; имею в виду и почему эта переменная вне функции? [дубликат]

Jan 01 2021
void
usage (cpp)
    register const char *const *cpp;
{
    (void) fprintf (stderr, *cpp++, program_name, cvs_cmd_name);
    for (; *cpp; cpp++)
    (void) fprintf (stderr, *cpp);
    error_exit ();
}

Я не понимаю, почему регистровая переменная не находится внутри фигурных скобок и что это (пустота) перед fprintf? Также зарегистрируйте const char * const * cpp, я никогда раньше не видел ничего подобного

Ответы

6 JacobBlomquist Jan 01 2021 at 04:52

registerКлючевое слово намек на компилятор , что вы хотите , что значение , которое будет храниться в специальном реестре на процессоре. Это может ускорить чтение и запись. Однако с современными компиляторами такая оптимизация не только не нужна, но и зачастую приводит к обратным результатам.

Причина, по которой он находится между объявлением функции и блоком, заключается в том, что в старом c (до C90) вы не объявляли тип параметра рядом с параметром, а между объявлением функции и блоком.

Например:

int main(argc, argv)
char ** argv;
{
 ...
}

Обратите внимание, что я ничего не сделал, argcпотому что, если вы явно не определяете тип, по умолчанию он принимает значение int.

Вы будете видеть это чаще, чем думаете. Я часто сталкивался с этим, когда работал над FFMPEG.

Приведение (void) предотвращает появление предупреждений / ошибок о неиспользуемых параметрах. Я столкнулся с этим, когда работал над PortAudio с функцией обратного вызова низкого уровня.

13 SamVarshavchik Jan 01 2021 at 04:26

Причина вы никогда «не видели этого раньше», потому что это использует синтаксис оригинала, историческая, K & R C версии . Вы, должно быть, смотрите на настоящий старый код C. Я только что посмотрел, и ANSI C (C90) вышел в 1990 году, так что этому коду должно быть не менее 30 лет или около того.

Я полагаю, это то, что нужно знать, если нужно иметь дело с историческим кодом C, но в противном случае вы можете просто забыть об этом.

(void)Бросок означает то же самое , что значит сегодня.