Что означает этот кусок кода? void (* сигнал (int sig, void (* func) (int))) (int);
Я наткнулся на этот кусок кода и совершенно заблудился, интерпретируя его значение.
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
Каково подробное объяснение кода в строке 2?
я знаю этоvoid
а такжеint
являются типами, * func - указатель на функцию, а скобки - для приоритета. Но я все еще не получаю (* сигнал ...), (INT), и все это вместе взятые. Чем детальнее, тем лучше.
Возможно, я знал значение / эффект этой декларации. Но мне пришлось провести еще несколько испытаний, чтобы помочь мне понять, что происходит, как показано ниже:
1 #include <signal.h>
2 void (*signal)(int sig, void (*func)(int));
3 void (*signal)(int); // then void (signal)(int) again.
4 //void (*signal(int sig, void (*func)(int)))(int); //break this line into two lines above
5
6 int main(){}
В приведенном выше коде я сломалvoid (*signal(int sig, void (*func)(int)))(int)
в две строки. Для строки 3 я попробовал обаvoid (*signal)(int)
а такжеvoid (signal)(int)
, с тем же результатом ошибки, который указал, что я пытался переопределитьsignal
:
TestDeclaration.c: 2: ошибка: «сигнал» объявлен как символ другого типа /usr/include/signal.h:93: ошибка: здесь было предыдущее объявление «сигнал»
TestDeclaration.c: 3: ошибка: «сигнал» повторно объявлен как символ другого типа /usr/include/signal.h:93: ошибка: предыдущее объявление «сигнала» было здесь
Теперь я знаю, что оба процесса являются неправильными способами декларирования, но почему они неверны? Почему оригинальный способ декларации НЕ РЕДАКЛАЦИЯ?