Как переменная в C ++ может быть названа вызовом функции?

Проходя некоторые уроки по аллегро, я нашел странный вызов.

int al_init();

Функция al_init() инициализирует allegro, чтобы можно было использовать функции allegro. Что с int al_init(); линия? Если я изменю эту строку кода, чтобы исключить int он работает так же, но если я вообще вычеркну строку, это не сработает. Что делает эта линия? Единственное, что я могу себе представить, это то, что он создает целое число и присваивает ему возвращаемое значение al_init() функция, с этим, вероятно -1 за неудачу и 0 для успеха и т. д. Но если это то, что он делает, то как вы можете даже проверить возвращаемое значение?

1

Решение

В 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,
2

Другие решения

Вы уверены, что не смотрите на объявление функции?

1

Согласно синтаксическим правилам C, прототип определяется как:

<return-type> function-name (param1, param2, ..);

И вызов функции определяется как:

function-name(param1, param2,...);, Таким образом, очевидно, что он определяет прототип функции, а НЕ вызывает функцию.

C89 и предыдущие правила были:

С вышеупомянутым правилом другое правило было:
Для неявного целочисленного возвращаемого типа прототип должен был быть определен вне любого исполняемого кода функции. Если бы он был внутри функции, он назывался бы вызовом функции, а не определением функции-прототипа.


Помимо этого, давайте начнем с вопроса:

Проходя некоторые уроки по аллегро, я нашел странный вызов. 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);

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector