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 함수 이름() {

	변수 선언 등
	표현식...
	// 명시적인 반환 값은 필요하지 않습니다.
}

함수는 특별한 값이나 들어오는 매개변수를 반환하지 않습니다.

void 함수 이름(데이터 형식 변수) {

	변수 선언 등
	표현식...
	// 명시적인 반환 값은 필요하지 않습니다.
여러 변수를 사용

구분 기호로 ","를 사용하면 됩니다.

함수는 특별한 값을 반환하지 않지만 하나의 매개변수를 사용하여 반환합니다.

void 함수 이름(데이터 유형 변수, 데이터 유형 변수 등) {

	변수 선언 등
	표현식...
	// 명시적인 반환 값은 필요하지 않습니다.
}

함수는 특별한 값을 반환하지 않지만 둘 이상의 매개변수를 사용하여 반환합니다.

void 함수 이름(데이터 유형 변수, 데이터 유형 변수 등) {

	변수 선언 등
	표현식...
	반환값
}

함수는 특정 데이터 유형의 값을 반환하고 하나 이상의 매개변수를 입력합니다.

함수의타입해당 함수가 반환하는 값의 데이터 타입과 동일해야 합니다. 반환 값상수 값 또는 변수 값일 수 있습니다. 이 키워드 앞에는 "return"이라는 키워드가 와야 합니다."

반환 유형은 다음 규칙에 따라 결정됩니다.

  • 배열을 제외하고 반환 유형에 대한 제한은 거의 없습니다. (배열은 데이터 생성 방법에 관한 또 다른 고급 주제입니다. 이는 이 기사의 범위를 벗어나므로 여기서 다루지 않습니다.
  • 반환 유형을 "void"로 지정하면 반환 값이 필요하지 않음을 의미합니다. "반품"이라는 문구가 암시되어 있습니다. 이는 "void" 함수 끝에 "return"을 명시적으로 명시해야 함을 의미합니다.

main() 함수 전에 함수를 만들어야 할까요, 아니면 후에 만들어야 할까요?

컴파일러는 파일을 위에서 아래로 읽습니다. 따라서 순서가 중요합니다.

간단한 GCD(최대 공통 분모) 함수를 예로 들어 보겠습니다. 'getGCD'라는 선언되지식별자를 사용했다는 오류가 발생합니다

 VEXcode Pro V5 코드 편집기에서 main 함수가 getGCD를 정의하기 전에 호출하는 것을 보여주는 예시입니다. getGCD는 선언되지 않은 식별자 오류로 강조 표시되어 있습니다.

실제로 이것은 main( )에서 왔든 다른 호출 함수 블록에서 왔든 마찬가지입니다. 즉, “호출된 함수 블록”은 “호출하는 함수 블록”보다 앞에 와야 합니다.

두 가지 가능한 솔루션:

int getGCD(int a, int b) {
  int remainder = 1;
  while (remainder > 0) {
    remainder = a % b;
    a = b;
    b = remainder;
  }
  return 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 remainder = 1;
  while (remainder > 0) {
    remainder = a % b;
    a = b;
    b = remainder;
  }
  return a;
}
	

함수의 프로토타입(시그니처라고도 함)을 "호출 함수 블록" 앞에 놓습니다.


함수들을 서로 다른 파일에 모듈화하고 싶다면 어떻게 해야 할까요?

1단계: 헤더 파일을 생성하고, 함수의 프로토타입을 이 파일에 넣습니다.

예를 들어 "myFuncs.h"라는 파일을 만듭니다.

코드를 컴파일하기 전에 이 헤더 파일을 프로젝트에 "추가"해야 합니다. 이를 통해 VEXcode Pro V5 IDE는 프로젝트 빌드를 시작하기 전에 이 새 헤더 파일의 포함을 "인식"할 수 있습니다.

방법은 다음과 같습니다.

VEXcode Pro V5 인터페이스에서 포함 폴더 컨텍스트 메뉴가 열려 있고 새 파일 옵션이 선택되어 헤더 파일을 생성합니다.

새 파일 생성 창에서 C++ 헤더 파일 옵션이 선택되고 파일 이름으로 common.h가 입력되었습니다.

VEXcode Pro V5 코드 편집기에서 별도의 common.cpp 파일에 정의된 getGCD 함수를 보여줍니다.

이 헤더 파일 "common.h"에서 (공백 없이 영숫자만 사용한다면 원하는 대로 이름을 지정할 수 있습니다.)

2단계: common.cpp와 같은 이름의 별도 cpp 파일을 생성합니다.

새 파일 생성 창이 열리고 C++ 소스 파일 옵션이 선택된 상태에서 파일 이름으로 common.cpp가 입력되었습니다.

//이것은 common.cpp 파일입니다.

int getGCD(int a, int b) {
  int remainder = 1;
  while (remainder > 0) {
    remainder = a % b;
    a = b;
    b = remainder;
  }
  return a;
}

getGCD(...) 함수를 이 파일로 이동하세요.

#include "vex.h"
#include "common.h"
using namespace 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 라이브러리의 고급 섹션에서 다루어질 것입니다.

  • 값으로 전달 vs. 참조로 전달
  • 배열로 전달
  • 구조에 전달

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

Last Updated: