Чем объясняется код? - PullRequest
       6

Чем объясняется код?

4 голосов
/ 19 декабря 2010

Может кто-нибудь сказать мне, что следующий код?Это объявление функции или заявление?Это действительный код?

static void (*const handle_screens[NO_OF_SCREENS]) (void) =
    { status_screens, settings_screens, access_screens, configuration_screens,
      history_screens };

Ответы [ 3 ]

9 голосов
/ 19 декабря 2010

это постоянный массив указателей на функции и сигнатуры void foo(void)

Это самые простые.Google C Комплексная декларация для захватывающих.

6 голосов
/ 19 декабря 2010

Если ничего не помогает, и вы не уверены на 100%, что декларация объявляет, проверьте утилиту cdecl. Это утилита для Linux, но кто-то также создал для нее веб-интерфейс на cdecl.org . Выберите случайное число для вставки для NO_OF_SCREENS #define, и вы получите:

> static void (*const handle_screens[1]) (void);

declare handle_screens as static array 1 of const pointer to function (void) returning void

Ссылка на результат.

1 голос
/ 19 декабря 2010

Существует общее правило (которое я только что обновил в своей памяти), описывающее, как декодировать объявления и определения Си.Следуя инструкциям по этой ссылке, ваша декларация: handle_screens является статическим массивом с NO_OF_SCREENS записями const указателей на функции без аргументов, возвращающих void.

Этот массив инициализируется пятью функциямитак что держу пари, что NO_OF_SCREENS лично равен 5.Это означает, что EnabrenTane правильно говорит, что определения функций: void foo(void).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...