Компилятор выдает ошибку "expected expression before ‘void’" - почему? - C (СИ)
Формулировка задачи:
void foo(void (*callback)()){ нечто(); callback(); еще_одно_нечто(); } а в майне: foo(void bar(void){ printf("hello\n"); });
Решение задачи: «Компилятор выдает ошибку "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()
, которая инициирует вызов других функций.
- Функция main() инициирует вызов функции
bar()
, передавая в качестве аргумента функциюfoo()
. - Функция bar() принимает указатель на функцию в качестве аргумента. Затем она выводит сообщение
i'm bar
и вызывает функцию, на которую указывает переданный ей указатель. - Функция foo() просто выводит сообщение
i'm foo
. - Функция main() также содержит функцию
car()
, которая объявлена внутри неё. Эта функция также принимает указатель на функцию в качестве аргумента. Внутри функцииcar()
вызывается переданная ей функция, и в качестве аргумента передаётся функцияbar()
. Ошибка компиляцииexpected expression before ‘void’
возникает из-за того, что функцияcar()
объявлена какvoid
, то есть она не возвращает значение, но должна иметь выражение перед объявлением. Кроме того, функцияcar()
объявлена внутри функцииmain()
, и её область видимости ограничена этой функцией. Это означает, что вызов функцииcar()
в строкеcar(bar);
за пределами функцииmain()
будет ошибочным, так как функцияcar()
не будет видна в этом контексте.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д