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) {
変数の宣言など
式...
//明示的な戻り値は不要です。
}
複数の変数を指定したい場合は、区切り文字として「,」を使用します。
関数は特別な値を返しませんが、パラメータが 1 つあります。
void 関数名(データ型変数、データ型変数など) {
変数宣言など
式...
//明示的な戻り値は不要です。
}
関数は特別な値を返しませんが、複数のパラメータを返します。
void 関数名(データ型変数、データ型変数など) {
変数宣言など
式...
戻り値
を返す }
関数は、複数のパラメータを入力して、特定のデータ型の値を返します。
関数の戻りの型はその関数が返す戻り値のデータ型と同じでなければなりません。戻り値またはは、定数または変数のいずれかになります。先頭にキーワード「return」を付ける必要があります。」
戻り値の型は次の規則によって決まります。
- 戻り値の型には、配列を除いてほとんど制限がありません。(配列は、データの作成方法に関するもう 1 つの高度なトピックです。これはこの記事の範囲外であるため、ここでは説明しません。
- 戻り値の型を「void」に指定すると、戻り値が不要になります。「返却」条項は暗黙的です。つまり、「void」関数の最後に「return」を明示的に記述する必要があります。
main() の前に関数を作成するか、後に作成するか?
コンパイラはファイルを上から下に読み取ります。したがって、順序は重要です。
単純な最大公約数 (GCD) 関数を例として考えてみましょう。エラーが発生します:未宣言の識別子 'getGCD' の使用
実際、これは main() からのものであっても、他の呼び出し関数ブロックからのものであっても当てはまります。つまり、「呼び出される関数ブロック」は「呼び出し関数ブロック」より前になければなりません。
考えられる解決策は 2 つあります。
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」という名前のファイルを作成します。
コードをコンパイルする前に、このヘッダー ファイルをプロジェクトに「追加」する必要があります。これにより、VEXcode Pro V5 IDE は、プロジェクトのビルドを開始する前に、この新しいヘッダー ファイルが含まれていることを「認識」できるようになります。
その方法は次のとおりです。



このヘッダー ファイル「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 ライブラリのより高度なセクションで取り上げられる予定です。
- 値渡しと参照渡し
- 配列を渡す
- 構造物を渡す