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

功能定义

现在我们已经完成了一些示例,让我们看一下函数定义的一般形式:

void function-name() {

	变量声明等
	表达式...
	// 不需要显式返回。
}

函数不返回特殊值,也不返回传入参数。

void function-name(data-type variable) {

	变量声明等
	表达式...
	// 不需要显式返回。
}

如果需要多个变量,只需使用“,”作为分隔符:

一个函数不返回特殊值,而是返回一个参数。

void function-name(数据类型变量、数据类型变量等) {

	变量声明等。
	表达式...
	// 不需要显式返回。
}

一个函数不返回特殊值,但有多个参数。

void function-name(数据类型变量、数据类型变量等) {

	变量声明等。
	表达式...
	返回返回值
}

函数返回特定数据类型的值,并且具有多个输入参数。

返回函数的类型必须与函数返回的返回值的数据类型相同. 返回值可以是常数值或变量。 它必须以关键字“return 开头。

以下规则控制返回类型:

  • 返回类型几乎没有限制,除了数组。 (数组是关于如何创建数据的另一个更高级的主题。 它超出了本文的范围,不在此处介绍。
  • 指定返回类型“void”意味着不需要返回值。 子句“return”是隐含的。 这意味着您必须在“void”函数的末尾显式声明“return”。

在 main() 之前还是之后创建一个函数?

编译器从上到下读取您的文件。 因此,顺序确实很重要。

让我们以简单的最大公分母 (GCD) 函数为例。 你会得到一个错误:use of undeclared identifier ' getGCD'

 VEXcode_V5_Text_xi2kumoPkA.png

实际上,无论是来自 main() 还是其他调用功能块都是如此,即“被调用功能块”必须在“调用功能块”之前。

两种可能的解决方案:

int getGCD(int a, int b) {
  int 余数 = 1;
  while (remainder > 0) {
    余数 = a % b ;
    a = b;
    b = 余数;
  }
  返回一个;
}


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) {
  整数余数 = 1;
  while (remainder > 0) {
    余数 = a % b ;
    a = b;
    b = 余数;
  }
  返回一个;
}
	

将函数的原型(也称为签名)放在“调用函数块”之前。


如果您希望模块化不同文件中的函数怎么办?

第一步:创建一个头文件,将函数的原型放入这个文件中。

例如创建一个名为“myFuncs.h”的文件

在编译代码之前,您需要将此头文件“添加”到您的项目中。 这允许 VEXcode Pro V5 IDE 在开始构建您的项目之前“意识到”包含这个新头文件。

方法如下:

在这个头文件“common.h”中(你可以随意命名,只要它是没有空格的字母数字。)

第 2 步:创建一个单独的 cpp 文件,例如,名为 common.cpp

//这是common.cpp文件

int getGCD(int a, int b) {
  int剩余 = 1;
  while (remainder > 0) {
    余数 = a % b ;
    a = b;
    b = 余数;
  }
  返回一个;
}

将函数 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

将来的主题将在知识库的更高级部分中涵盖:

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

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