Проходя некоторые уроки по аллегро, я нашел странный вызов.
int al_init();
Функция al_init()
инициализирует allegro, чтобы можно было использовать функции allegro. Что с int al_init();
линия? Если я изменю эту строку кода, чтобы исключить int
он работает так же, но если я вообще вычеркну строку, это не сработает. Что делает эта линия? Единственное, что я могу себе представить, это то, что он создает целое число и присваивает ему возвращаемое значение al_init()
функция, с этим, вероятно -1
за неудачу и 0
для успеха и т. д. Но если это то, что он делает, то как вы можете даже проверить возвращаемое значение?
В C / C ++ есть объявления функций и определения функций:
Объявления выглядеть так:
int a_function();
void another_function();
double yet_another_function();
Объяснение:
int
, void
, double
) описывает тип значения, возвращаемого функцией. int
(вот почему это работает при удалении int
от int al_init()
, но не тогда, когда вы полностью удалите объявление)void
означает, что это не должно возвращать значение (хотя технически это может, но это для более редких случаев)Определения выглядеть так:
int a_function() {
std::cout << "hello world!";
int x = 1;
int y = 2;
return (x + y);
}
Обратите внимание на разницу:
;
{
а также }
, но нет ;
!a_function
, он не ожидает аргументов и возвращает значение типа int
,Вы уверены, что не смотрите на объявление функции?
Согласно синтаксическим правилам C, прототип определяется как:
<return-type> function-name (param1, param2, ..);
И вызов функции определяется как:
function-name(param1, param2,...);
, Таким образом, очевидно, что он определяет прототип функции, а НЕ вызывает функцию.
С вышеупомянутым правилом другое правило было:
Для неявного целочисленного возвращаемого типа прототип должен был быть определен вне любого исполняемого кода функции. Если бы он был внутри функции, он назывался бы вызовом функции, а не определением функции-прототипа.
Помимо этого, давайте начнем с вопроса:
Проходя некоторые уроки по аллегро, я нашел странный вызов.
int
al_init();
Это неверно, похоже на прототип функции или объявление
Функция al_init () инициализирует allegro, так что allegro
функции могут быть использованы. Что с int al_init (); линия? Если я
измените эту строку кода, чтобы исключить int, он работает так же, но если
Я вынимаю линию вообще, она не работает.
Что не работает? Останавливает компиляцию? Это было бы очевидно, потому что он не сможет найти al_init()
функция. Также причина, по которой он работает без «int», заключается в том, что он неявно предполагает, что он возвращает целое число.
Что делает эта линия?
Это говорит компилятору, что al_init()
Функция библиотеки определяется в другом месте, как правило, в .lib
или же .a
или же .dll
, и вы хотели бы использовать его в своей программе.
Единственное, что я могу себе представить, это то, что он создает целое число и присваивает
это возвращаемое значение функции al_init (),
Абсолютно неверная интерпретация кода, она не создает целое число и не присваивает ему никакого значения.
с вероятностью -1 для неудачи и 0 для успеха и т. д. Но если
это то, что это делает, то как вы можете даже проверить возвращение
значение?
Поскольку вы хотите знать, что вернула эта функция, вы можете сделать это во время фактического вызова al_init ():
int retval = al_init();
printf("al_init() returned %d",retval);