1.1自定义函数
函数定义与C类似,包含返回类型、函数名、参数列表和代码块。
当参数列表中参数的类型相同可以使用逗号分隔,而无需单独声明类型,其它类型参数使用分号分隔。
代码语言:javascript复制int test(int a, b; string c) {
if (a > b) {
printf(c);
}
}
函数支持重载,参数类型或数量不同、返回类型不同都将得到支持。
代码语言:javascript复制void print(basis b) {
printf("basis: { i: %s, j: %s, k: %s }n", b.i, b.j, b.k);
}
void print(matrix m) {
printf("matrix: %sn", m);
}
void print(bases b) {
printf("bases <%s> {n", b.description);
printf(" "); print(b.m);
printf(" "); print(b.n);
printf(" "); print(b.o);
printf("}n");
}
basis rotate(basis b; vector axis; float amount) {
matrix m = 1;
rotate(m, amount, axis);
basis result = b;
result.i *= m;
result.j *= m;
result.k *= m;
return result;
}
void rotate(basis b; vector axis; float amount) {
b = rotate(b, axis, amount);
}
也可以对函数使用function关键字以避免歧义。
代码语言:javascript复制function int test(int a, b; string c) {
if (a > b) {
printf(c);
}
}
要点:
- 自定义函数必需在使用前声明。
- 自定义函数由编译器内联,故不支持递归,可使用着色器调用替代。
- 可使用const关键字声明参数为只读。可通过export关键字将参数声明为输出参数。
- 一个函数可以有多个return语句。
- 可以访问全局变量,建议将全局变量以参数的形式传入自定义函数中。
- 支持嵌套函数。