함수#
소개#
함수는 C++ 프로그래밍의 핵심 요소로, 특정 작업을 수행하도록 설계된 재사용 가능하고 효율적인 코드 조각들을 묶어줍니다. 함수는 프로그램 내에서 여러 번 호출될 수 있으므로 코드 구성이 용이하고 코드 중복을 방지하는 데 도움이 됩니다. 또한 함수를 사용하면 디버깅이 훨씬 쉬워집니다.
이 페이지에서는 C++에서 함수를 사용하는 기본 사항을 다룹니다. 여기에는 다음 내용이 포함됩니다.
함수 구조 및 구문 — 반환 유형, 이름 및 매개변수를 포함하여 C++에서 함수를 작성하는 방법.
함수 프로토타입 — 프로토타입 함수란 무엇이며 왜 사용되는가.
함수 정의 및 호출 — 프로그램에서 함수를 만들고 호출하는 방법.
반환 값 — 함수가 호출자에게 데이터를 반환하는 방법.
콜백 함수 — 함수를 다른 함수에 전달하고 이벤트에 대한 응답으로 자동으로 호출하는 방법.
기본 인수를 사용하는 함수 — 인수가 제공되지 않을 때 매개변수에 기본값을 부여하는 방법.
함수 구조 및 구문#
C++에서 함수는 반환 타입, 이름, 매개변수를 명시하여 선언해야 합니다. 기본 구문은 다음과 같습니다.
return_type function_name(parameters) {
// Code to execute when the function is called
return result; // Optional, used to return a value
}
기능 부품 |
설명 |
|---|---|
|
The data type that the function returns, some common options are:
|
|
함수의 이름입니다. |
|
선택 사항입니다. 쉼표로 구분된 형식 지정 매개변수 목록은 |
|
선택 사항입니다. 함수가 반환하는 값입니다. 함수의 |
참고: 함수는 호출되기 전에 선언되어야 하거나 함수 프로토타입을 제공해야 합니다.
기능 프로토타입#
C++에서는 코드를 위에서 아래로 읽습니다. 즉, 함수는 호출되기 전에 컴파일러에 알려져 있어야 합니다.
함수 프로토타입을 사용하면 함수의 전체 코드를 작성하기 전에 함수를 사용할 수 있습니다. 이를 통해 프로그램 상단에 main() 함수를 유지하고 함수 정의는 나중에 배치하여 구성 및 가독성을 높일 수 있습니다.
프로토타입이 없으면 main() 함수모든 함수를 정의해야 하므로 프로젝트가 커짐에 따라 진행 상황을 파악하기가 더 어려워질 수 있습니다.
// The function's prototype
void greeting();
int main() {
greeting();
}
// Write the function's body after
void greeting() {
Brain.Screen.print("Hello!");
}
함수 정의 및 호출#
Functions with No Parameters#
함수에 입력이 필요하지 않은 경우 매개변수 없이 정의할 수 있습니다. 함수가 값을 반환하지 않으면 반환 형식으로 void 을 사용하세요.
// Define a function to display a message
void greeting() {
Brain.Screen.print("Hello!");
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Call the function to display the message
greeting();
}
Functions with Parameters#
함수에 매개변수를 추가하여 함수가 사용할 정보를 전달할 수도 있습니다.
참고: 텍스트는 C 스타일 문자열(const char*) 또는 C++ 문자열(std::string )을 사용하여 전달할 수 있습니다.
// Define a function with a parameter
void namedGreeting(const char* name) {
Brain.Screen.print("Hello, %s!", name);
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
namedGreeting("Stranger");
}
반환 값#
함수는 return 키워드를 사용하여 호출자에게 데이터를 반환할 수 있습니다. 이를 통해 출력값을 캡처하여 프로젝트에서 사용할 수 있습니다.
// Define a function that multiplies numbers by 2
int timesTwo(int number) {
return number * 2;
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display the return value
Brain.Screen.print("%d", timesTwo(2));
}
참조에 의한 전달#
기본적으로 C++는 함수 매개변수를 값으로 전달합니다. 즉, 함수는 원래 변수의 복사본을 받습니다. 함수 내부에서 변경된 내용은 원래 값에 영향을 미치지 않습니다.
// Add 1 to the number
void addOne(int number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will still be 5
}
함수가 원래 변수를 수정할 수 있도록 하려면 & 기호를 사용하여 매개변수를 참조로 전달할 수 있습니다.
// Add 1 to the number
void addOne(int& number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will now be 6
}
참조로 전달하면 함수는 값을 반환하지 않고 함수 외부에서 정의된 변수를 업데이트할 수 있습니다.
콜백 함수#
콜백 함수는 다른 함수에 전달되어 특정 이벤트가 발생했을 때 자동으로 호출되는 함수입니다.
콜백은 일반적으로 버튼 클릭이나 센서 업데이트와 같은 이벤트에 사용됩니다.
사용자가 직접 함수를 호출하는 대신, 프로젝트에서 이벤트가 발생할 때 자동으로 함수를 호출해 줍니다.
void onPressed() {
Brain.Screen.print("Screen pressed!");
}
// Call onPressed whenever the screen is pressed
int main() {
vexcodeInit();
Brain.Screen.pressed(onPressed);
}
Callback Signatures#
모든 콜백 함수는 다음과 같은 특정 시그니처를 따라야 합니다.
반환 유형
매개변수의 개수
매개변수 유형
필수 함수 시그니처는 API에 의해 결정됩니다. 콜백 함수는 이 시그니처와 정확히 일치해야 합니다.
// This callback function cannot include any parameters
void callback(void);
// This callback function includes four parameters
void callback(axisType axis, double x, double y, double z);
매개변수 이름은 설명적이며 다양할 수 있지만, 반환 유형, 매개변수 순서 및 매개변수 유형은 정확히 일치해야 합니다.
기본 인수를 가진 함수#
함수는 하나 이상의 매개변수에 대한 기본값을 정의할 수 있습니다. 기본값은 함수 호출 시 해당 매개변수에 값이 제공되지 않은 경우에 사용됩니다.
기본 인수에 대한 규칙:
기본 인수는 함수 정의의 마지막 매개변수여야 합니다.
매개변수에 기본값이 지정되면, 그 이후의 모든 매개변수에도 기본값이 지정되어야 합니다.
함수가 프로토타입에 기본 인수를 지정하는 경우 함수 정의에서 해당 기본값을 다시 지정해서는 안 됩니다.
// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {
for (int i = 0; i < repeatCount; i++) {
Brain.Screen.print("Hello, %s!", name);
Brain.Screen.newLine();
}
}
int main() {
vexcodeInit();
// Say what name to greet (V5) and
// use default value for repeatCount (1)
greeting("V5");
Brain.Screen.newLine();
// Overrides the default value to 3
greeting("V5", 3);
}