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() {
การประกาศตัวแปร ฯลฯ
นิพจน์...
//ไม่จำเป็นต้องส่งคืนอย่างชัดเจน
}
ฟังก์ชันไม่ส่งกลับค่าพิเศษหรือไม่มีพารามิเตอร์ขาเข้า
ชื่อฟังก์ชันเป็นโมฆะ (ตัวแปรประเภทข้อมูล) {
การประกาศตัวแปร ฯลฯ
นิพจน์...
//ไม่จำเป็นต้องส่งคืนอย่างชัดเจน
}
หากคุณต้องการหลายตัวแปร คุณเพียงใช้ "," เป็นตัวคั่น:
ฟังก์ชันไม่ส่งคืนค่าพิเศษ แต่มีพารามิเตอร์เดียว
ชื่อฟังก์ชันเป็นโมฆะ (ตัวแปรประเภทข้อมูล, ตัวแปรประเภทข้อมูล ฯลฯ ) {
การประกาศตัวแปร ฯลฯ
นิพจน์...
//ไม่จำเป็นต้องส่งคืนอย่างชัดเจน
}
ฟังก์ชันไม่ส่งคืนค่าพิเศษ แต่มีพารามิเตอร์มากกว่าหนึ่งตัว
ชื่อฟังก์ชันเป็นโมฆะ (ตัวแปรประเภทข้อมูล, ตัวแปรประเภทข้อมูล ฯลฯ ) {
การประกาศตัวแปร ฯลฯ
นิพจน์...
ส่งกลับค่าส่งคืน
}
ฟังก์ชันส่งคืนค่าของประเภทข้อมูลเฉพาะและมีพารามิเตอร์มากกว่าหนึ่งพารามิเตอร์
ประเภทreturnของฟังก์ชันจะต้องเหมือนกับประเภทข้อมูลของค่าที่ส่งคืนที่ฟังก์ชันส่งคืน ค่าส่งคืนเป็นค่าคงที่หรือตัวแปรก็ได้ ต้องนำหน้าด้วยคีย์เวิร์ด “return”
กฎต่อไปนี้ควบคุมประเภทการคืนสินค้า:
- แทบไม่มีข้อจำกัดเกี่ยวกับประเภทการส่งคืน ยกเว้นอาร์เรย์ (อาร์เรย์เป็นหัวข้อขั้นสูงอีกหัวข้อหนึ่งเกี่ยวกับวิธีสร้างข้อมูลของคุณ อยู่นอกเหนือขอบเขตของบทความนี้ และไม่ครอบคลุมในที่นี้
- การระบุว่าประเภทการส่งคืนเป็น "โมฆะ" หมายความว่าไม่จำเป็นต้องมีค่าส่งคืน คำว่า "การกลับมา" นั้นเป็นนัย นั่นหมายความว่าคุณต้องระบุอย่างชัดเจนว่า "return" ที่ส่วนท้ายของฟังก์ชัน "void"
การสร้างฟังก์ชั่นก่อน main() หรือหลัง?
คอมไพเลอร์จะอ่านไฟล์ของคุณจากบนลงล่าง ดังนั้นคำสั่งซื้อจึงมีความสำคัญ
ลองใช้ฟังก์ชันตัวส่วนร่วมมาก (GCD) แบบธรรมดาเป็นตัวอย่าง คุณจะได้รับข้อผิดพลาด:การใช้ตัวระบุที่ไม่ได้ประกาศ 'getGCD'
จริงๆ แล้วสิ่งนี้เป็นจริงไม่ว่าจะมาจาก main( ) หรือบล็อกฟังก์ชันการเรียกอื่นๆ กล่าวคือ "บล็อกฟังก์ชันที่ถูกเรียก" จะต้องอยู่หน้า "บล็อกฟังก์ชันการเรียกใช้"
สองวิธีที่เป็นไปได้:
int getGCD (int a, int b) {
ส่วนที่เหลือ int = 1;
ในขณะที่ (ส่วนที่เหลือ > 0) { ส่วนที่เหลือ
= 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) {
int ส่วนที่เหลือ = 1;
ในขณะที่ (ส่วนที่เหลือ > 0) { ส่วนที่เหลือ
= a % b;
ก = ข;
b = เศษ;
}
กลับ;
}
วางต้นแบบ (หรือที่เรียกว่าลายเซ็นต์) ของฟังก์ชันไว้หน้า "บล็อกฟังก์ชันการเรียก"
จะทำอย่างไรถ้าคุณต้องการทำให้ฟังก์ชันเป็นโมดูลในไฟล์ต่างๆ?
ขั้นตอนที่ 1: สร้างไฟล์ส่วนหัว และใส่ต้นแบบของฟังก์ชันลงในไฟล์นี้
เช่น สร้างไฟล์ชื่อ “myFuncs.h”
คุณต้อง "เพิ่ม" ไฟล์ส่วนหัวนี้ในโครงการของคุณก่อนที่จะรวบรวมโค้ดของคุณ ซึ่งช่วยให้ VEXcode Pro V5 IDE “รับรู้” การรวมไฟล์ส่วนหัวใหม่นี้ก่อนที่จะเริ่มสร้างโปรเจ็กต์ของคุณ
นี่คือวิธีการ:



ในไฟล์ส่วนหัวนี้ “common.h” (คุณสามารถตั้งชื่ออะไรก็ได้ที่คุณต้องการ ตราบใดที่เป็นตัวอักษรและตัวเลขโดยไม่มีช่องว่าง)
ขั้นตอนที่ 2: สร้างไฟล์ cpp แยกต่างหาก เช่น ชื่อ common.cpp

//นี่คือไฟล์ common.cpp
int getGCD(int a, int b) {
int ส่วนที่เหลือ = 1;
ในขณะที่ (ส่วนที่เหลือ > 0) { ส่วนที่เหลือ
= 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
หัวข้อในอนาคตจะกล่าวถึงในส่วนขั้นสูงของ VEX Library ในอนาคต:
- ส่งผ่านตามค่าเทียบกับส่งผ่านโดยการอ้างอิง
- ผ่านในอาร์เรย์
- ผ่านเข้าไปในโครงสร้าง