함수#

소개#

함수는 C++ 프로그래밍의 핵심 요소로, 특정 작업을 수행하도록 설계된 재사용 가능하고 효율적인 코드 조각들을 묶어줍니다. 함수는 프로그램 내에서 여러 번 호출될 수 있으므로 코드 구성이 용이하고 코드 중복을 방지하는 데 도움이 됩니다. 또한 함수를 사용하면 디버깅이 훨씬 쉬워집니다.

이 페이지에서는 C++에서 함수를 사용하는 기본 사항을 다룹니다. 여기에는 다음 내용이 포함됩니다.

함수 구조 및 구문#

C++에서 함수는 반환 타입, 이름, 매개변수를 명시하여 선언해야 합니다. 기본 구문은 다음과 같습니다.

return_type function_name(parameters) {
  // Code to execute when the function is called
  return result;  // Optional, used to return a value
}

기능 부품

설명

return_type

The data type that the function returns, some common options are:

  • void — Returns nothing
  • int — Returns an integer value
  • double — Returns a floating-point number
  • bool — Returns true or false
  • char — Returns a single character
  • const char* — Returns a text string
  • user-defined types — Returns a struct or class object

function_name

함수의 이름입니다.

parameters

선택 사항입니다. 쉼표로 구분된 형식 지정 매개변수 목록은 type name형식으로 작성됩니다. 여기서 type 은 매개변수의 데이터 형식을 지정하고 name 은 함수 내부에서 해당 값에 접근하는 데 사용되는 식별자입니다. 매개변수는 함수 호출 시 입력 값을 받습니다.

result

선택 사항입니다. 함수가 반환하는 값입니다. 함수의 return_type 이 void이 아닌 경우 이 값을 제공해야 하며 해당 유형은 지정된 return_type 과 정확히 일치해야 합니다.

참고: 함수는 호출되기 전에 선언되어야 하거나 함수 프로토타입을 제공해야 합니다.

기능 프로토타입#

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);
}