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.
định nghĩa hàm
Bây giờ chúng ta đã xem qua một số mẫu, hãy xem dạng tổng quát của định nghĩa hàm:
void function-name() {
Khai báo biến, v.v.
Biểu thức...
// không cần trả lại rõ ràng.
}
Hàm không trả về giá trị đặc biệt cũng như không có tham số đầu vào.
void function-name(data-type Variable) {
Khai báo biến, v.v.
Biểu thức...
// không cần trả lại rõ ràng.
}
Nếu bạn muốn có nhiều biến, bạn chỉ cần sử dụng "," làm dấu phân cách:
Hàm không trả về giá trị đặc biệt nào nhưng có một tham số.
Tên hàm void (biến kiểu dữ liệu, biến kiểu dữ liệu, v.v.) {
Khai báo biến, v.v.
Biểu thức...
// không cần trả lại rõ ràng.
}
Một hàm không trả về giá trị đặc biệt nào nhưng có nhiều hơn một tham số.
Tên hàm void (biến kiểu dữ liệu, biến kiểu dữ liệu, v.v.) {
Khai báo biến, v.v.
Biểu thức...
trả về giá trị trả về
}
Hàm trả về giá trị của một kiểu dữ liệu cụ thể và có nhiều hơn một tham số đầu vào.
Kiểutrả vềcủa hàm phải giống với kiểu dữ liệu của giá trị trả về mà hàm trả về. Giá trị trả vềcó thể là giá trị không đổi hoặc biến. Trước nó phải có từ khóa “return.”
Các quy tắc sau đây chi phối kiểu trả về:
- Hầu như không có hạn chế nào về kiểu trả về, ngoại trừ mảng. (Mảng là một chủ đề nâng cao khác liên quan đến cách tạo dữ liệu của bạn. Nó nằm ngoài phạm vi của bài viết này và không được đề cập ở đây.
- Chỉ định rằng kiểu trả về “void” có nghĩa là không cần giá trị trả về. Mệnh đề “trở lại” là ngầm định. Điều đó có nghĩa là bạn phải nêu rõ ràng “return” ở cuối hàm “void”.
Tạo hàm trước main() hay sau?
Trình biên dịch đọc tệp của bạn từ trên xuống dưới. Vì vậy, thứ tự không quan trọng.
Hãy lấy hàm Mẫu số chung lớn nhất (GCD) đơn giản làm ví dụ. Bạn sẽ gặp lỗi:sử dụng mã định danh không được khai báo 'getGCD'
Trên thực tế, điều này đúng cho dù nó đến từ khối chức năng gọi chính ( ) hay khối chức năng gọi khác, tức là “khối chức năng được gọi” phải đứng trước “khối chức năng gọi”.
Hai giải pháp khả thi:
int getGCD(int a, int b) {
int dư = 1;
while (dư lượng > 0) {
dư = a % b;
a = b;
b = số dư;
}
trả về a;
}
int main() {
Brain.Screen.printAt(5,60, “GCD ( %d, %d ) = %d”, getGCD(60, 100) );
}
Di chuyển “hàm được gọi” phía trên “khối hàm gọi” trong ví dụ "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 dư = 1;
while (dư lượng > 0) {
dư = a % b;
a = b;
b = số dư;
}
trả lại a;
}
Đặt nguyên mẫu (còn gọi là chữ ký) của hàm trước “khối hàm gọi”.
Điều gì sẽ xảy ra nếu bạn muốn mô-đun hóa các chức năng trong các tệp khác nhau?
Bước 1: Tạo tệp tiêu đề và đặt nguyên mẫu của hàm vào tệp này.
ví dụ: tạo một tập tin có tên “myFuncs.h”
Bạn cần “thêm” tệp tiêu đề này vào dự án của mình trước khi biên dịch mã. Điều này cho phép VEXcode Pro V5 IDE “nhận biết” việc đưa vào tệp tiêu đề mới này trước khi nó bắt đầu xây dựng dự án của bạn.
Đây là cách thực hiện:



Trong tệp tiêu đề này “common.h” (bạn có thể đặt tên bất cứ thứ gì bạn muốn, miễn là nó có chữ và số không có khoảng trắng.)
Bước 2: Tạo một file cpp riêng, ví dụ có tên common.cpp

// đây là tệp common.cpp
int getGCD(int a, int b) {
int còn lại = 1;
while (dư lượng > 0) {
dư = a % b;
a = b;
b = số dư;
}
trả lại a;
}
Di chuyển hàm getGCD(...) vào tệp này
#include "vex.h"
#include "common.h"
sử dụng không gian tên vex;
int main() {
vexcodeInit();
Brain.Screen.printAt(5,60, "GCD ( %d, %d ) = %d", getGCD(60, 100) );
}
Bây giờ, tất cả những gì bạn có trong tệp cpp chính sẽ bao gồm những thứ sau
Tham khảo:https://api.vexcode.cloud/v5/html/namespacevex.html
Các chủ đề trong tương lai sẽ được đề cập trong các phần nâng cao hơn của Thư viện VEX trong tương lai:
- Truyền theo giá trị so với truyền theo tham chiếu
- Truyền vào một mảng
- Truyền vào một cấu trúc