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 函数名(数据类型变量) { 变量声明等 表达式... //不需要显式返回。 } 如果你想要多个变量,你只需使用“,”作为分隔符:
函数不返回特殊值,但带有一个参数。
void 函数名(数据类型变量、数据类型变量等) { 变量声明等。 表达式... //不需要显式返回。 }
函数不返回特殊值,但具有多个参数。
void 函数名(数据类型变量、数据类型变量等) { 变量声明等。 表达式... 返回返回值 }
函数返回一种特定数据类型的值,并且具有多个输入参数。
函数的return类型必须与函数返回值的数据类型相同。 返回值可以是常量值或变量。 它前面必须带有关键字“return”。”
以下规则控制返回类型:
- 除了数组之外,返回类型几乎没有限制。 (数组是关于如何创建数据的另一个更高级的主题。 它超出了本文的范围,这里不予讨论。
- 指定返回类型“void”意味着不需要返回值。 “返回”条款是隐含的。 这意味着您必须在“void”函数的末尾明确声明“return”。
在 main() 之前还是之后创建函数?
编译器从上到下读取您的文件。 因此,顺序确实很重要。
让我们以简单的最大公分母(GCD)函数为例。 你会得到一个错误:use of undeclared identifier 'getGCD'
实际上,无论是来自main()还是其他调用功能块都是如此,即“被调用功能块”必须位于“调用功能块”之前。
两种可能的解决方案:
int getGCD(int a, int b) { int 余数 = 1; while (余数 > 0) { 余数 = a % b; a = b; b = 余数; } 返回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 余数 = 1; while (余数 > 0) { 余数 = a % b; a = b; b = 余数; } 返回a; }
将函数的原型(也称为签名)放在“调用函数块”之前。
如果您希望将不同文件中的函数模块化怎么办?
第一步:创建一个头文件,并将函数的原型放入该文件中。
例如创建一个名为“myFuncs.h”的文件
在编译代码之前,您需要将此头文件“添加”到您的项目中。 这使得 VEXcode Pro V5 IDE 在开始构建项目之前“知道”包含这个新头文件。
具体方法如下:
在此头文件“common.h”中(您可以随意命名,只要它是字母数字且没有空格即可。)
步骤2:创建一个单独的cpp文件,例如,名为common.cpp
//这是common.cpp文件 int getGCD(int a, int b) { int RM = 1; while (余数 > 0) { 余数 = a % b; a=b; b = 余数; } 返回a; }
将函数 getGCD(...) 移至此文件中
#include "vex.h" #include "common.h" 使用命名空间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 库的更高级部分中涵盖:
- 按值传递与按引用传递
- 传入一个数组
- 传入一个结构体