Что означает этот кусок кода? 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: ошибка: предыдущее объявление «сигнала» было здесь

Теперь я знаю, что оба процесса являются неправильными способами декларирования, но почему они неверны? Почему оригинальный способ декларации НЕ РЕДАКЛАЦИЯ?

Ответы на вопрос(0)

Ваш ответ на вопрос