Законен ли этот сегмент кода в C? - PullRequest
4 голосов
/ 10 февраля 2011

функция wait () объявлена ​​в другой функции. Это законно?

void panic(const int reason, const char *strg) 
{
int ErrNo;
struct machine_attributes mach;
int ret, docstat, cnt;
pid_t pid, wait(int *), setsid(void); 
    ......
}

Спасибо!

Ответы [ 2 ]

6 голосов
/ 10 февраля 2011

Да, если это объявление соответствует фактическому определению функции.

pid_t pid, wait(int *), setsid(void);

Здесь объявляются три объекта: pid_t с именем pid, функция (принимающая int* и возвращающая pid_t) с именем wait и функция (не принимающая параметров и возвращающая pid_t) с именем setsid.

Объявление pid также является определением.

0 голосов
/ 10 февраля 2011

Да, это допустимый C, и он может быть полезен в редких случаях, например, если у вас есть простой исходный файл C (не POSIX-ориентированный), который использует wait с static связью для функции своего собственный, и вдруг понимаете, что вам нужно вызвать POSIX wait из функции в этом файле. Ограничивая объявление в вызывающей функции, вы избегаете конфликта с файлом static определение wait.

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

И да, некоторые могут назвать это ужасным взломом / злоупотреблением языком. : -)

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