void, влияющий на вывод программы - PullRequest
1 голос
/ 03 июля 2019

Я вызываю одну функцию, в которой печатаются значения, но когда void добавляется перед вызовом, функция не выдает правильный (или какой-либо) вывод.

Я пробовал различные методы

#include <stdio.h> 

void func1(); 
void func2(); 

void func1() 
{ 
    printf("Inside func1()\n"); 
} 

void func2() 
{ 
    printf("Inside func2()\n"); 
} 

int main() 
{ 
    void func1(); 
    void func2(); 
    printf("Inside main()\n"); 

    return 0; 
} 

Вывод: -

Inside main 

Когда void удаляется перед вызовом func1 и func2, выход изменяется.

#include <stdio.h> 

void func1(); 
void func2(); 

void func1() 
{ 
    printf("Inside func1()\n"); 
} 

void func2() 
{ 
    printf("Inside func2()\n"); 
} 

int main() 
{ 
    func1(); 
    func2(); 
    printf("Inside main()\n"); 

    return 0; 
} 

Выходэто: -

Inside func1
Inside func2
Inside main 

Кто-нибудь может объяснить, как void влияет на желаемый результат?

Ответы [ 4 ]

4 голосов
/ 03 июля 2019

Оператор void func1(); в main является объявлением функции . Это не работает во время выполнения.

func1(); фактически вызывает функцию.

Так работает грамматика языка, вот и все. Это довольно умно, если вы думаете об этом.

2 голосов
/ 03 июля 2019

В этом случае void func1(); не является вызовом функции, это просто означает: где-то может быть функция с этой сигнатурой, я хочу использовать ее, даже если она не объявлена ​​как forward. Обычно мы называем это объявлением функции , и мы используем его не внутри main, а в начале файла.

0 голосов
/ 04 июля 2019

Объявление всегда начинается с имени типа. Когда ты пишешь

int func();

вы заявляете компилятору, что у вас есть функция, которая принимает неопределенное количество параметров и возвращает int (так что компилятор знает об этом).

Когда вы пишете

func();

вы говорите компилятору выполнить функцию func(); и отбросить ее результат в обычном операторе выполнения.

Всегда у вас есть оператор C , начинающийся с идентификатора типа , это не должно быть выполнено, но сообщить компилятору о существовании такой вещи (объявить ее)

В вашем примере вы изменили два объявления в начале main() на операторы выполнения. Таким образом, компилятор сгенерировал код для их выполнения, что привело к выводу, полученному при выполнении.

0 голосов
/ 03 июля 2019

Объявление функции - это действие, сообщающее компилятору имя функции, тип возвращаемого значения и параметры. например: - void func1();

Определение функции обеспечивает фактическое тело функции. например: -

void func1() 
{ 
    printf("Inside func1()\n"); 
} 

Чтобы вызвать функцию, вам просто нужно передать необходимые параметры вместе с именем функции, и если функция возвращает значение, вы можете сохранить возвращенное значение.

Например: - func1();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...