Компилятор выдает ошибку "expected expression before ‘void’" - почему? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

void foo(void (*callback)()){
    нечто();
    callback();
    еще_одно_нечто();
}
а в майне:
foo(void bar(void){
    printf("hello\n");
});
Компилятор выдает ошибку "expected expression before ‘void’" - почему? Можно ли в си сделать декораторы?(я понимаю, что я не реализовал полноценный декораток, а скорее сделал обертку)

Решение задачи: «Компилятор выдает ошибку "expected expression before ‘void’" - почему?»

textual
Листинг программы
#include <stdio.h>
 
void foo() {
    printf("i'm foo\n");
}
 
void bar(void (*baz)()) {
    printf("i'm bar\n");
    baz();
}
 
int main(void)
{
    bar(foo);
    
    void car(void (*tar)()) {
        tar(foo);
    };
    car(bar);
    return 0;
}

Объяснение кода листинга программы

Код представляет собой небольшую программу на языке C, которая содержит несколько функций. Основная функция — main(), которая инициирует вызов других функций.

  1. Функция main() инициирует вызов функции bar(), передавая в качестве аргумента функцию foo().
  2. Функция bar() принимает указатель на функцию в качестве аргумента. Затем она выводит сообщение i'm bar и вызывает функцию, на которую указывает переданный ей указатель.
  3. Функция foo() просто выводит сообщение i'm foo.
  4. Функция main() также содержит функцию car(), которая объявлена внутри неё. Эта функция также принимает указатель на функцию в качестве аргумента. Внутри функции car() вызывается переданная ей функция, и в качестве аргумента передаётся функция bar(). Ошибка компиляции expected expression before ‘void’ возникает из-за того, что функция car() объявлена как void, то есть она не возвращает значение, но должна иметь выражение перед объявлением. Кроме того, функция car() объявлена внутри функции main(), и её область видимости ограничена этой функцией. Это означает, что вызов функции car() в строке car(bar); за пределами функции main() будет ошибочным, так как функция car() не будет видна в этом контексте.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы