Я читал в разных местах, что функции, объявленные в main(), не могут быть вызваны из main. Но ниже программа fun3() объявляется внутри main() и вызывается external main() в других функциях, а IT WORKS, выдавая вывод 64.следует ссылку http://code.geeksforgeeks.org/7EZZxQ. Однако, если я меняю fun3() возвращаемый тип int на void, он не может скомпилировать, в чем причина такого поведения?Сфера применения функции в c
#include <stdio.h>
#include <stdlib.h>
int main()
{
void fun1(int);
void fun2(int);
int fun3(int);
int num = 5;
fun1(num);
fun2(num);
}
void fun1(int no)
{
no++;
fun3(no);
}
void fun2(int no)
{
no--;
fun3(no);
}
int fun3(int n)
{
printf("%d",n);
}
ошибка в сборке, когда объявление fun3() изменено.
#include <stdio.h>
#include <stdlib.h>
int main()
{
void fun1(int);
void fun2(int);
void fun3(int); //fun3 return type changed to void error in compilation
int num = 5;
fun1(num);
fun2(num);
}
void fun1(int no)
{
no++;
fun3(no);
}
void fun2(int no)
{
no--;
fun3(no);
}
void fun3(int n) //fun3 return type changed to void error in compilation
{
printf("%d",n);
}
Хотя мой ответ - это обоснованное предположение, было бы полезно, если бы вы рассказали нам, какой компилятор вы используете, какую версию его и какую ошибку вы получаете при изменении аргумента (вероятно, мы также покажем нам измененный код). –
Скомпилируйте все предупреждения ('-Wall -Wextra -pedantic' для gcc), прочитайте, что компилятор говорит вам (и может быть) получить просветленным. – alk
@JoachimPileborg Я включил ссылку онлайн-компилятора в вопрос ... я обновлю код с тем, где его не получается :) – codeluv