C ++, оператор препроцессора - PullRequest
4 голосов
/ 25 января 2012

Может кто-нибудь объяснить, что делает это утверждение?

#define CONST_SIG (void (*) () ) 1

Ответы [ 3 ]

3 голосов
/ 25 января 2012

Вы можете передать CONST_SIG в функцию, которая ожидает указатель функции и обрабатывает значение 1 как специальное значение для этого указателя функции.

3 голосов
/ 25 января 2012

Этот оператор определяет CONST_SIG как 1, приведенный к указателю на функцию, которая не получает параметров и возвращает void.Это может быть полезным, если у вас есть указатель на функцию и, возможно, вы проверите ее на истинность, тогда CONST_SIG будет верным.

Вы можете попробовать программу cdecl, котораядоступно во многих дистрибутивах Linux для «английского перевода» объявлений на языке Си.Пример вывода в этом случае:

cdecl> explain (void (*) () )
cast unknown_name into pointer to function returning void

Примечание: причина, по которой он говорит "unknown_name", заключается в том, что у нашего указателя нет имени.Например, имя «р» будет выглядеть так: (void (*p) () ).

1 голос
/ 25 января 2012

Эта ссылка может быть актуальной http://www.velocityreviews.com/forums/t715007-re-how-to-understand-this-cpp-syntax.html

...