Namespaces
Variants

Comments

From cppreference.net
< c

주석은 일종의 코드 내 문서화 역할을 합니다. 프로그램에 삽입되면 컴파일러에 의해 효과적으로 무시됩니다; 주석은 소스 코드를 읽는 사람들을 위한 메모로만 사용되도록 의도되었습니다.

목차

구문

/* 주석 */ (1)
// 주석 (2) (C99부터)
1) 흔히 "C 스타일" 또는 "다중 라인" 주석으로 알려져 있습니다.
2) 흔히 "C++ 스타일" 또는 "한 줄" 주석으로 알려져 있습니다.

모든 주석은 프로그램에서 번역 단계 3 에서 각 주석을 단일 공백 문자로 대체하여 제거됩니다.

C 스타일

C 스타일 주석은 일반적으로 대량의 텍스트 블록이나 작은 코드 조각을 주석 처리하는 데 사용됩니다. 그러나 단일 라인을 주석 처리하는 데에도 사용할 수 있습니다. 텍스트를 C 스타일 주석으로 삽입하려면 해당 텍스트를 /* */ 로 감싸면 됩니다. C 스타일 주석은 컴파일러에게 /* */ 사이의 모든 내용을 무시하도록 지시합니다. 비록 C 표준의 일부는 아니지만, /** **/ 는 종종 문서화 블록을 나타내는 데 사용됩니다. 두 번째 별표가 단순히 주석의 일부로 처리되기 때문에 이것은 문법적으로 유효합니다.

문자 상수 , 문자열 리터럴 , 또는 주석 내부를 제외하고, /* 문자는 주석을 시작합니다. 이러한 주석의 내용은 멀티바이트 문자를 식별하고 주석을 종료하는 */ 문자를 찾기 위해서만 검사됩니다. C 스타일 주석은 중첩될 수 없습니다.

C++-style

C++-style 주석은 일반적으로 한 줄의 텍스트나 코드를 주석 처리하는 데 사용됩니다. 그러나 여러 개를 함께 배치하여 여러 줄 주석을 형성할 수도 있습니다. 텍스트를 C++-style 주석으로 삽입하려면 텍스트 앞에 // 를 붙이고 텍스트 뒤에 개행 문자를 추가하면 됩니다. C++-style 주석은 컴파일러에게 // 와 개행 문자 사이의 모든 내용을 무시하도록 지시합니다.

문자 상수 , 문자열 리터럴 , 또는 주석 내부를 제외하고, // 문자는 다음 개행 문자까지(개행 문자는 제외)의 모든 멀티바이트 문자를 포함하는 주석을 시작합니다. 이러한 주석의 내용은 멀티바이트 문자를 식별하고 주석을 종료하는 개행 문자를 찾기 위해서만 검사됩니다. C++-style 주석은 중첩될 수 있습니다:

//  y = f(x);   // invoke algorithm

C-style 주석은 C++-style 주석 내에 나타날 수 있습니다:

//  y = f(x);   /* invoke algorithm */

C++-style 주석은 C-style 주석 내에 나타날 수 있습니다. 이는 소스 코드의 작은 블록을 제외하는 메커니즘입니다:

/*
    y = f(x);   // invoke algorithms
    z = g(x);
*/
(C99부터)

참고 사항

주석은 전처리기 단계 이전에 제거되기 때문에 매크로를 사용하여 주석을 형성할 수 없으며, 종료되지 않은 C-스타일 주석은 #include된 파일에서 확장되지 않습니다.

/* 매크로를 사용하여 주석을 형성하려는 시도 */
/* 하지만 공백이 "//" 문자를 대체합니다 */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
...  
PRINTF("Error in file %s at line %i\n", __FILE__, __LINE__);

주석 처리 외에, 소스 코드 제외에 사용되는 다른 메커니즘은 다음과 같습니다:

#if 0
    puts("이 코드는 컴파일되지 않습니다");
    /* C 스타일 주석과 충돌하지 않음 */
    // C++ 스타일 주석과 충돌하지 않음
#endif

그리고

if(0) {
    puts("이 코드는 컴파일되지만 실행되지 않습니다");
    /* C 스타일 주석과 충돌하지 않음 */
    // C++ 스타일 주석과 충돌하지 않음
}

C99에서 // 주석의 도입은 일부 드문 상황에서 호환성을 깨는 변경이었습니다:

a = b //*divisor:*/ c
+ d; /* C89 컴파일: a = b / c + d;
        C99 컴파일: a = b + d; */

예제

#include <stdio.h>
/*
C-style comments can contain
multiple lines.
*/
/* Or, just one line. */
// C++-style comments can comment one line.
// Or, they can
// be strung together.
int main(void)
{
  // The below code won't be run
  // puts("Hello");
  // The below code will be run
  puts("World");
  // A note regarding backslash + newline.
  // Despite belonging to translation phase 2 (vs phase 3 for comments),
  // '\' still determines which portion of the source code is considered
  // as 'comments':
  // This comment will be promoted to the next line \
  puts("Won't be run"); // may issue a warning "multi-line comment"
  puts("Hello, again");
}

출력:

World
Hello, again

참고문헌

  • C17 표준 (ISO/IEC 9899:2018):
  • 6.4.9 주석 (p: 54)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.4.9 주석 (p: 75)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.4.9 주석 (p: 66)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.1.9 주석

참고 항목

C++ 문서 에서 Comments 참조