함수#
소개#
함수는 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() 함수모든 함수를 정의해야 하므로 프로젝트가 커짐에 따라 진행 상황을 파악하기가 더 어려워질 수 있습니다.
함수 프로토타입을 정의하십시오 (
int main()외부).// The function's prototype void greeting();
int main()내부 함수를 호출합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); greeting(); }함수의 본문을 작성하세요.
void greeting() { Brain.Screen.print("Hello!"); }
함수 정의 및 호출#
Functions with No Parameters#
함수에 입력이 필요하지 않은 경우 매개변수 없이 정의할 수 있습니다. 함수가 값을 반환하지 않으면 반환 형식으로 void 을 사용하세요.
함수를 정의하십시오 (
int main()외부).// Define a function to display a message void greeting() { Brain.Screen.print("Hello!"); }
int main()내부 함수를 호출합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call the function to display the message greeting(); }
Functions with Parameters#
함수에 매개변수를 추가하여 함수가 사용할 정보를 전달할 수도 있습니다.
참고: 텍스트는 C 스타일 문자열(const char*) 또는 C++ 문자열(std::string )을 사용하여 전달할 수 있습니다.
함수를 정의하십시오 (
int main()외부).// Define a function with a parameter void namedGreeting(const char* name) { Brain.Screen.print("Hello, %s!", name); }
int main()안에 매개변수를 넣어 함수를 호출합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call the function to display the message namedGreeting("Stranger"); }
반환 값#
함수는 return 키워드를 사용하여 호출자에게 데이터를 반환할 수 있습니다. 이를 통해 출력값을 캡처하여 프로젝트에서 사용할 수 있습니다.
함수를 정의하십시오 (
int main()외부).// Define a function that multiplies numbers by 2 int timesTwo(int number) { return number * 2; }
int main()안에 매개변수를 넣어 함수를 호출합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Display the return value Brain.Screen.print("%d", timesTwo(2)); }
참조에 의한 전달#
기본적으로 C++는 함수 매개변수를 값으로 전달합니다. 즉, 함수는 원래 변수의 복사본을 받습니다. 함수 내부에서 변경된 내용은 원래 값에 영향을 미치지 않습니다.
함수를 정의하십시오 (
int main()외부).// Add 1 to the number void addOne(int number) { number++; }
int main()안에 매개변수를 넣어 함수를 호출합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); int value = 5; addOne(value); // "value" will still be 5 }
함수가 원래 변수를 수정할 수 있도록 하려면 & 기호를 사용하여 매개변수를 참조로 전달할 수 있습니다.
함수를 정의하십시오 (
int main()외부).// Add 1 to the number void addOne(int& number) { number++; }
int main()안에 매개변수를 넣어 함수를 호출합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); int value = 5; addOne(value); // "value" will now be 6 }
참조로 전달하면 함수는 값을 반환하지 않고 함수 외부에서 정의된 변수를 업데이트할 수 있습니다.
콜백 함수#
콜백 함수는 다른 함수에 전달되어 특정 이벤트가 발생했을 때 자동으로 호출되는 함수입니다.
콜백은 일반적으로 버튼 클릭이나 센서 업데이트와 같은 이벤트에 사용됩니다.
사용자가 직접 함수를 호출하는 대신, 프로젝트에서 이벤트가 발생할 때 자동으로 함수를 호출해 줍니다.
콜백 함수를 정의하십시오(
int main()외부).// Create a callback function void onPressed() { Brain.Screen.print("Screen pressed!"); }
int main()내부에 콜백을 등록합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call onPressed whenever the screen is pressed 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);
매개변수 이름은 설명적이며 다양할 수 있지만, 반환 유형, 매개변수 순서 및 매개변수 유형은 정확히 일치해야 합니다.
기본 인수를 가진 함수#
함수는 하나 이상의 매개변수에 대한 기본값을 정의할 수 있습니다. 기본값은 함수 호출 시 해당 매개변수에 값이 제공되지 않은 경우에 사용됩니다.
기본 인수에 대한 규칙:
기본 인수는 함수 정의의 마지막 매개변수여야 합니다.
매개변수에 기본값이 지정되면, 그 이후의 모든 매개변수에도 기본값이 지정되어야 합니다.
함수가 프로토타입에 기본 인수를 지정하는 경우 함수 정의에서 해당 기본값을 다시 지정해서는 안 됩니다.
함수를 정의하십시오 (
int main()외부).// 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()내부 함수를 호출합니다.int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Say what name to greet (EXP) and // use default value for repeatCount (1) greeting("EXP"); Brain.Screen.newLine(); // Overrides the default value to 3 greeting("EXP", 3); }
// 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 (EXP) and
// use default value for repeatCount (1)
greeting("EXP");
Brain.Screen.newLine();
// Overrides the default value to 3
greeting("EXP", 3);
}