了解在 VEXcode Pro V5 中创建函数的语法

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'

 VEXcode_V5_Text_xi2kumoPkA.png

实际上,无论是来自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 库的更高级部分中涵盖:

  • 按值传递与按引用传递
  • 传入一个数组
  • 传入一个结构体

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: