본문 바로가기

C++ (learncpp)/C++ Basics

1.2 — Comments

주석은 프로그램의 소스 코드에 직접 삽입되는 프로그래머가 읽을 수 있는 메모입니다. 주석은 컴파일러에서 무시되며 프로그래머만 사용할 수 있습니다.

C++에는 두 가지 다른 스타일의 주석이 있으며 둘 다 동일한 목적을 수행합니다.

 

한 줄 주석

// 기호는 C++ 한 줄 주석으로 시작하여 컴파일러에 // 기호에서 줄 끝까지의 모든 것을 무시하도록 지시합니다. 예를 들어:

 

std::cout << "Hello world!"; // Everything from here to the end of the line is ignored

 

일반적으로 한 줄 주석은 한 줄의 코드에 대한 빠른 주석을 작성하는 데 사용됩니다.

 

std::cout << "Hello world!\n"; // std::cout lives in the iostream library
std::cout << "It is very nice to meet you!\n"; // these comments make the code hard to read
std::cout << "Yeah!\n"; // especially when lines are different lengths

 

줄 오른쪽에 주석이 있으면 특히 줄이 긴 경우 코드와 주석을 모두 읽기 어렵게 만들 수 있습니다. 줄이 상당히 짧다면 다음과 같이 주석을 간단히 정렬할 수 있습니다(일반적으로 탭 정지).

 

std::cout << "Hello world!\n";                 // std::cout lives in the iostream library
std::cout << "It is very nice to meet you!\n"; // this is much easier to read
std::cout << "Yeah!\n";                        // don't you think so?

 

그러나 줄이 긴 경우 오른쪽에 주석을 배치하면 줄이 정말 길어질 수 있습니다. 이 경우 한 줄 주석은 주석을 달고 있는 줄 위에 종종 배치됩니다.

 

// std::cout lives in the iostream library
std::cout << "Hello world!\n";

// this is much easier to read
std::cout << "It is very nice to meet you!\n";

// don't you think so?
std::cout << "Yeah!\n";

 

Author’s note (저자의 메모)

위의 문장은 코드 조각과의 첫 만남 중 하나를 나타냅니다. 스니펫은 완전한 프로그램이 아니기 때문에 자체적으로 컴파일할 수 없습니다. 오히려 특정 개념을 간결하게 보여주기 위해 존재합니다.

스니펫을 컴파일하려면 컴파일을 위해 전체 프로그램으로 변환해야 합니다. 일반적으로 해당 프로그램은 다음과 같습니다.

 

#include <iostream>

int main()
{
    // Replace this line with the snippet of code you'd like to compile

    return 0;
}

 

Multi-line comments (여러 줄 주석)

/* 및 */ 기호 쌍은 C 스타일의 여러 줄 주석을 나타냅니다. 기호 사이의 모든 것은 무시됩니다.

 

/* This is a multi-line comment.
   This line will be ignored.
   So will this one. */

 

기호 사이의 모든 것이 무시되기 때문에 프로그래머가 여러 줄 주석을 "미화(beautify)"하는 것을 가끔 볼 수 있습니다.

 

/* This is a multi-line comment.
 * the matching asterisks to the left
 * can make this easier to read
 */

 

여러 줄 스타일 주석은 중첩될 수 없습니다. 결과적으로 다음과 같은 예기치 않은 결과가 발생합니다.

 

/* This is a multi-line /* comment */ this is not inside the comment */
// The above comment ends at the first */, not the second */

 

컴파일러가 이것을 컴파일하려고 할 때 첫 번째 /*에서 첫 번째 */까지 모든 것을 무시합니다. "this is not inside the comment */"는 주석의 일부로 간주되지 않으므로 컴파일러는 컴파일을 시도합니다. 필연적으로 컴파일 오류가 발생합니다.

주석의 색상을 다르게 지정하면 주석의 일부로 간주되는 항목과 그렇지 않은 항목이 명확해지기 때문에 구문 형광펜을 사용하는 것이 매우 유용할 수 있습니다.

 

경고

다른 여러 줄 주석 안에 여러 줄 주석을 사용하지 마십시오. 여러 줄 주석 안에 한 줄 주석을 감싸는 것은 괜찮습니다.

 

주석의 올바른 사용

일반적으로 주석은 세 가지에 사용해야 합니다. 첫째, 주어진 라이브러리, 프로그램 또는 기능에 대해 주석은 라이브러리, 프로그램 또는 기능이 하는 일을 설명하는 데 가장 잘 사용됩니다. 일반적으로 파일이나 라이브러리의 맨 위에 있거나 함수 바로 앞에 배치됩니다. 예를 들어

 

// This program calculates the student's final grade based on his test and homework scores.
// This function uses Newton's method to approximate the root of a given equation.
// The following lines generate a random item based on rarity, level, and a weight factor.

 

이 모든 주석은 독자에게 실제 코드를 보지 않고도 라이브러리, 프로그램 또는 기능이 달성하려고 하는 것에 대한 좋은 아이디어를 제공합니다. 사용자(아마도 다른 사람 또는 이전에 작성한 코드를 재사용하려는 경우 귀하)는 코드가 자신이 달성하려는 것과 관련이 있는지 여부를 한 눈에 알 수 있습니다. 이는 모든 사람이 모든 코드에 익숙하지 않은 팀의 일원으로 작업할 때 특히 중요합니다.

 

/* To calculate the final grade, we sum all the weighted midterm and homework scores
    and then divide by the number of scores to assign a percentage, which is
    used to calculate a letter grade. */
// To generate a random item, we're going to do the following:
// 1) Put all of the items of the desired rarity on a list
// 2) Calculate a probability for each item based on level and weight factor
// 3) Choose a random number
// 4) Figure out which item that random number corresponds to
// 5) Return the appropriate item

 

이러한 주석은 개별 코드 행이 무엇을 하는지 이해하지 않고도 코드가 목표를 달성하는 방법에 대한 아이디어를 사용자에게 제공합니다.

 

셋째, 명령문 수준에서 주석을 사용하여 코드가 수행하는 이유를 설명해야 합니다. 잘못된 명령문 주석은 코드가 수행하는 작업을 설명합니다. 명령문이 수행하는 작업을 설명하기 위해 주석이 필요한 너무 복잡한 코드를 작성한 경우에는 명령문에 주석을 달지 말고 다시 작성해야 할 것입니다.

다음은 나쁜 줄 주석과 좋은 명령문 주석의 몇 가지 예입니다.

나쁜 주석:

 

// Set sight range to 0
sight = 0;

 

이유: 명령문을 보면 시야가 0으로 설정되어 있음을 이미 알 수 있습니다.

좋은 주석:

 

// The player just drank a potion of blindness and can not see anything
sight = 0;

 

이유: 이제 플레이어의 시야가 0으로 설정되는 이유를 알 수 있습니다.

나쁜 주석:

 

// Calculate the cost of the items
cost = quantity * 2 * storePrice;

 

이유: 비용 계산임을 알 수 있지만 수량에 2를 곱한 이유는 무엇입니까?

 

좋은 주석:

 

// We need to multiply quantity by 2 here because they are bought in pairs
cost = quantity * 2 * storePrice;

 

이유: 이제 이 공식이 왜 의미가 있는지 알 수 있습니다.

프로그래머는 종종 한 가지 방식으로 문제를 해결할 것인지 아니면 다른 방식으로 해결할 것인지 어려운 결정을 내려야 합니다. 댓글은 다른 결정 대신 한 결정을 내린 이유를 자신에게 상기시키거나 다른 사람에게 말할 수 있는 좋은 방법입니다.

 

좋은 주석:

 

// We decided to use a linked list instead of an array because
// arrays do insertion too slowly.

 

// We're going to use Newton's method to find the root of a number because
// there is no deterministic way to solve these equations.

 

마지막으로, 주석은 코드가 무엇을 하는지 모르는 사람이 이해할 수 있는 방식으로 작성되어야 합니다. 프로그래머가 "이것이 무엇을 하는지는 분명합니다! 이 일을 잊을 리가 없어." 뭔지 맞춰봐? 그것은 분명하지 않으며 얼마나 빨리 잊어 버리는지에 놀랄 것입니다. :) 당신(또는 다른 누군가)은 나중에 인간의 언어로 코드의 무엇을, 어떻게, 왜 적어준 것에 대해 감사할 것입니다. 코드의 개별 라인을 읽는 것은 쉽습니다. 그들이 달성하려는 목표를 이해하는 것은 아닙니다.

 

모범 사례
코드에 자유롭게 주석을 달고 코드가 무엇을 하는지 모르는 사람에게 말하는 것처럼 주석을 작성하십시오. 특정 선택을 한 이유를 기억할 것이라고 가정하지 마십시오.

 

저자의 메모

이 튜토리얼 시리즈의 나머지 부분에서 코드 블록 내부의 주석을 사용하여 특정 항목에 주의를 기울이거나 작동 방식을 설명하는 데 도움을 줄 것입니다(프로그램이 계속 컴파일되는 동안). 예리한 독자는 위의 기준에 따르면 이러한 댓글의 대부분이 끔찍하다는 것을 알 수 있습니다. :) 튜토리얼의 나머지 부분을 읽으면서 댓글은 좋은 댓글이 어떤 모습인지 보여주려는 것이 아니라 의도적인 교육 목적을 제공한다는 것을 명심하십시오.

 

코드 주석 처리

하나 이상의 코드 라인을 주석으로 변환하는 것을 코드 주석 처리라고 합니다. 이것은 코드의 일부가 컴파일된 프로그램에 포함되지 않도록 (일시적으로) 제외하는 편리한 방법을 제공합니다.

한 줄의 코드를 주석 처리하려면 // 스타일 주석을 사용하여 코드 줄을 일시적으로 주석으로 바꾸면 됩니다.

주석 제거:

 

std::cout << 1;

 

주석 처리됨:

 

//    std::cout << 1;

 

코드 블록을 주석 처리하려면 여러 줄의 코드에 //를 사용하거나 /* */ 스타일 주석을 사용하여 코드 블록을 일시적으로 주석으로 바꿉니다.

주석 제거:

 

std::cout << 1;
std::cout << 2;
std::cout << 3;

 

주석 처리됨:

//    std::cout << 1;
//    std::cout << 2;
//    std::cout << 3;

 

혹은

 

/*
    std::cout << 1;
    std::cout << 2;
    std::cout << 3;
*/

 

이 작업을 수행하려는 몇 가지 이유가 있습니다.

아직 컴파일되지 않은 새로운 코드를 작업 중이며 프로그램을 실행해야 합니다. 컴파일러 오류가 있으면 컴파일러에서 코드를 컴파일할 수 없습니다. 컴파일되지 않는 코드를 주석 처리하면 프로그램을 컴파일할 수 있으므로 실행할 수 있습니다. 준비가 되면 코드의 주석을 제거하고 계속 작업할 수 있습니다.
컴파일은 되지만 제대로 작동하지 않는 새 코드를 작성했으며 나중에 수정할 시간이 없습니다. 깨진 코드를 주석 처리하면 깨진 코드가 실행되지 않고 수정할 수 있을 때까지 문제가 발생합니다.
오류의 원인을 찾으려면. 프로그램이 원하는 결과를 생성하지 않거나 충돌하는 경우 코드의 일부를 비활성화하여 제대로 작동하지 않는 원인을 분리할 수 있는지 확인하는 것이 때때로 유용할 수 있습니다. 하나 이상의 코드 줄을 주석 처리하고 프로그램이 예상대로 작동하기 시작하면(또는 충돌이 중지됨) 마지막으로 주석 처리한 것이 문제의 일부일 가능성이 높습니다. 그런 다음 해당 코드 행이 문제를 일으키는 이유를 조사할 수 있습니다.
한 코드 조각을 다른 코드 조각으로 바꾸고 싶습니다. 원본 코드를 삭제하는 대신 주석 처리하고 새 코드가 제대로 작동하는지 확인할 때까지 참조용으로 남겨둘 수 있습니다. 새 코드가 작동하는지 확인하면 이전에 주석 처리된 코드를 제거할 수 있습니다. 새 코드가 작동하지 않으면 언제든지 새 코드를 삭제하고 이전 코드의 주석을 제거하여 이전 상태로 되돌릴 수 있습니다.
코드를 주석 처리하는 것은 개발 중에 수행하는 일반적인 작업이므로 많은 IDE에서 코드의 강조 표시된 부분에 대한 주석 처리를 지원합니다. 이 기능에 액세스하는 방법은 IDE에 따라 다릅니다.

 

Visual Studio 사용자의 경우

편집 메뉴 > 고급 > 선택 항목 주석 처리(또는 선택 항목 주석 해제)를 통해 선택 항목에 주석을 달거나 주석 처리를 해제할 수 있습니다.

 

코드 블럭 사용자의 경우

편집 메뉴 > 댓글(또는 댓글 달기, 댓글 토글 또는 기타 댓글 도구)을 통해 선택 항목에 댓글을 달거나 댓글을 달지 않을 수 있습니다.

 



일반 주석에 항상 한 줄 주석을 사용하는 경우 항상 여러 줄 주석을 사용하여 충돌 없이 코드를 주석 처리할 수 있습니다. 여러 줄 주석을 사용하여 코드를 문서화하는 경우 주석을 사용하여 코드를 주석 처리하는 것이 더 어려울 수 있습니다.

여러 줄 주석이 포함된 코드 블록을 주석 처리해야 하는 경우 #if 0 전처리기 지시문을 사용할 수도 있습니다. 이에 대해서는 2.9과 -- 전처리기 소개에서 설명합니다.

 



  • 라이브러리, 프로그램 또는 기능 수준에서 주석을 사용하여 무엇을 설명합니다.
  • 라이브러리, 프로그램 또는 함수 내에서 주석을 사용하여 방법을 설명합니다.
명령문 수준에서 주석을 사용하여 이유를 설명합니다.

 

reference : https://www.learncpp.com/cpp-tutorial/comments/