The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.
VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.
Определение функции
Теперь, когда мы рассмотрели несколько примеров, давайте посмотрим на общую форму определения функции:
void function-name() {
Объявления переменных и т. д.
Выражения...
// Явный возврат не требуется.
}
Функция не возвращает ни специального значения, ни входящих параметров.
void function-name(data-type variable) {
Объявления переменных и т. д.
Выражения...
// Явный возврат не требуется.
}
Если вам нужно несколько переменных, просто используйте запятую в качестве разделителя:
Функция не возвращает специального значения, а возвращает один параметр.
void function-name(data-type variable, data-type variable, etc) {
объявлений переменных и т. д.
выражение...
// Явный возврат не требуется.
}
Функция не возвращает специального значения, но имеет более одного параметра.
void function-name(data-type variable, data-type variable, etc) {
объявлений переменных и т. д.
выражение...
return return-value
}
Функция возвращает значение определенного типа данных и имеет более одного входного параметра.
Тип возвращаемого значения функциидолжен совпадать с типом данных возвращаемого значения этой функции. Возвращаемое значениеможет быть константой или переменной. Ему должно предшествовать ключевое слово «return».”
Следующие правила регулируют тип возвращаемого значения:
- Ограничений на тип возвращаемого значения практически нет, кроме массива. (Массив — еще одна более сложная тема, касающаяся создания данных. Это выходит за рамки данной статьи и здесь не рассматривается.
- Указание типа возвращаемого значения «void» означает, что возвращаемое значение не требуется. Пункт «возврат» неявный. Это означает, что вы должны явно указать «return» в конце «void» функции.
Как создать функцию: до или после вызова main()?
Компилятор читает ваш файл сверху вниз. Таким образом, порядок имеет значение.
Давайте возьмем в качестве примера простую функцию наибольшего общего знаменателя (НОД). Вы получите ошибку:использование необъявленного идентификатора 'getGCD'
На самом деле это справедливо независимо от того, исходит ли он из main() или другого вызывающего функционального блока, т.е. «вызываемый функциональный блок» должен предшествовать «вызывающему функциональному блоку».
Два возможных решения:
int getGCD(int a, int b) {
int remainder = 1;
while (remainder > 0) {
remainder = a % b;
a = b;
b = remainder;
}
return a;
}
int main() {
Brain.Screen.printAt(5,60, “GCD ( %d, %d ) = %d”, getGCD(60, 100) );
}
Переместите «вызываемую функцию» над «блоком вызывающей функции» в примере «main()».
int getGCD(int, int);
int main() {
Brain.Screen.printAt(5,60, "GCD ( %d, %d ) = %d", getGCD(60, 100) );
}
int getGCD(int a, int b) {
int remainder = 1;
while (remainder > 0) {
remainder = a % b;
a = b;
b = remainder;
}
return a;
}
Поместите прототип (также называемый сигнатурой) функции перед «блоком вызывающей функции».
Что делать, если вы хотите разделить функции на модули в разных файлах?
Шаг 1: Создайте заголовочный файл и поместите в него прототип функции.
например, создайте файл с именем «myFuncs.h»
Вам необходимо «добавить» этот заголовочный файл в свой проект перед компиляцией кода. Это позволяет среде IDE VEXcode Pro V5 «знать» о включении этого нового заголовочного файла до того, как она начнет создавать проект.
Вот как:



В этом заголовочном файле «common.h» (вы можете назвать все, что захотите, главное, чтобы оно было буквенно-цифровым и без пробелов.)
Шаг 2: Создайте отдельный файл .cpp, например, с именем common.cpp.

//Это файл common.cpp
int getGCD(int a, int b) {
int remainder = 1;
while (remainder > 0) {
remainder = a % b;
a = b;
b = remainder;
}
return a;
}
Переместите функцию getGCD(...) в этот файл.
#include "vex.h"
#include "common.h"
using namespace vex;
int main() {
vexcodeInit();
Brain.Screen.printAt(5,60, "GCD ( %d, %d ) = %d", getGCD(60, 100) );
}
Теперь все, что у вас есть в основном файле cpp, будет состоять из следующего:
Ссылка:https://api.vexcode.cloud/v5/html/namespacevex.html
Будущие темы будут рассмотрены в более продвинутых разделах библиотеки VEX:
- Передача по значению или передача по ссылке
- Передать массив
- Передача структуры