Рубрики

Что происходит, когда функция вызывается до ее объявления в C?

В C, если функция вызывается до ее объявления, компилятор принимает тип возвращаемого значения функции как int .

Например, следующая программа завершается неудачно при компиляции.

#include <stdio.h>

int main(void)

{

    // Обратите внимание, что fun () не объявлен

    printf("%d\n", fun());

    return 0;

}

  

char fun()

{

   return 'G';

}

если функция char fun () в вышеприведенном коде определена до main (), то она будет отлично скомпилирована и запущена.
например, следующая программа будет работать правильно.

#include <stdio.h>

  

char fun()

{

   return 'G';

}

  

int main(void)

{

    // Обратите внимание, что fun () не объявлен

    printf("%d\n", fun());

    return 0;

}

Следующая программа компилируется и запускается нормально, потому что функция определена перед main ().

#include <stdio.h>

  

int fun()

{

   return 10;

}

  

int main(void)

{

    printf("%d\n", fun());

    return 0;

}

А как насчет параметров? компилятор не предполагает ничего о параметрах. Поэтому компилятор не сможет выполнять проверку типов аргументов и арности во время компиляции, когда функция применяется к некоторым аргументам. Это может вызвать проблемы. Например, следующая программа прекрасно скомпилирована в GCC и выдает значение мусора в качестве вывода.

#include <stdio.h>

  

int main (void)

{

    printf("%d", sum(10, 5));

    return 0;

}

int sum (int b, int c, int a)

{

    return (a+b+c);

}

Существует заблуждение, что компилятор принимает входные параметры также int. Если бы компилятор принял входные параметры int, вышеуказанная программа потерпела бы неудачу при компиляции.

Всегда рекомендуется объявлять функцию перед ее использованием, чтобы мы не увидели никаких неожиданностей при запуске программы (см. Это для более подробной информации).

Источник:
http://en.wikipedia.org/wiki/Function_prototype#Uses

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Что происходит, когда функция вызывается до ее объявления в C?

0.00 (0%) 0 votes