C / C ++ 전 처리기 자체에서 단일 파운드 / 해시 부호 (#)의 목적은 무엇입니까?


145

Boost 라이브러리 소스 코드를 살펴본 결과 , 전 처리기 지시문이없는 단일 파운드 기호가있는 경우가 종종 있습니다. GCC 전 처리기 매뉴얼 및 사양 안내서를 읽었으며 이에 대한 내용을 찾을 수 없습니다.

(1) #ifndef BOOST_CONFIG_HPP
(2) #  include <boost/config.hpp>
(3) #endif
(4) #
(5) #if defined(BOOST_HAS_PRAGMA_ONCE)
(6) #  pragma once
(7) #endif

라인 4에서 파운드 기호 뒤에는 아무것도 없습니다. 이것이 어떤 영향을 미칩니 까? C 전 처리기 (CPP) 사양에 정의되어 있습니까?

Boost는 크로스 플랫폼 라이브러리이므로 CPP가 올바르게 구문 분석해야한다고 가정합니다. 코드 전체에서 임의의 파운드 / 해시 표시가 미치는 영향 / 부수는 무엇입니까?


6
@ 자이 비스 GCC 제품군에서 전 처리기의 실행 파일 이름은 "cpp"입니다 (컴파일러는 gcc 및 g ++ 임)
deviantfan

3
CPP는 C-Plus-Plus를 나타냅니다.
djeidot

6
전체는 아니고. 의 첫 번째 문장 참조 en.wikipedia.org/wiki/C_preprocessor
P45 임박

7
@djeidot "cpp"는 모호합니다. 그렇기 때문에 사람들은 C-Plus-Plus를 언급 할 때 "c ++"또는 "cxx"(x는 + 45도 회전)를 사용합니다.
Mike Ounsworth

12
@djeidot 아니요, CPP는 C-PreProcessor입니다. C ++가 존재하기 전에 존재했습니다.
Leandros

답변:


185

#라인 자체의 A 는 전혀 효과가 없습니다. 나는 그것이 미학적 가치에 사용되고 있다고 가정합니다.

C 표준은 다음과 같이 말합니다.

6.10.7 널 지시문

의미론

양식의 전처리 지시문

# new-line

효과가 없습니다.

C ++ 표준은 다음과 같이 말합니다.

16.7 널 지시문 [cpp.null]

양식의 전처리 지시문

# new-line

효과가 없습니다.


4
그러나 이것은 그것을 사용하는 목적을 설명하지 않으며 그 존재의 근거를 제시하지 않습니다.
StellarVortex 2019

8
"이것은 어떤 영향을 미칩니 까? C 전 처리기 (CPP) 사양에 정의되어 있습니까? ... 코드 전체에서 임의 파운드 / 해시 기호가 미치는 영향 / 부수는 무엇입니까?" 그게 내가 대답 한 것입니다. 그것은 효과가 없지만 저자의 사용 이유를 추측하고 싶지 않았습니다. 나는 지금 그렇게했다.
Jonathan Wakely

전처리기에 아무런 의미가 없다는 정답을 받았습니다. 다른 프로그램 (예 : IDE 또는 LINT)이 지시문 블록을 논리 단위로 유지하는 데 도움이 될 것이라고 추측합니다. 일부 IDE를 사용하면 프로그래머가 텍스트 블록을 확장하거나 축소하여 파일의 논리적 구조를 추적 할 수 있습니다.
스펜서

107

소스 코드를 예쁘게 보이게합니다.

전체 블록이 전 처리기 섹션이라는 사실을 강조합니다.

실제로 C 및 C ++ 전처리 기는 모두 한 줄을 무시 해야합니다# .


16
또한 일부 텍스트 편집기 (예를 들어,에서 쉽게 탐색 할 수 있습니다 {또는 }정력).
wchargin

@WChargin, 그것은 당신이 그것을 보는 방법에 달려 있습니다. 당신은 추가, 두 처리기 블록 사이를 탐색 할 경우 #사용하지 못하도록하는 것 {또는 }. 실제로, }두 블록의 중간으로 이동할 수없는 것보다 (OP의 예에서) 블록을 뛰어 넘기 위해 두 번 누르는 것이 더 쉬울 수 있습니다 .
Shahbaz

3
@Shahbaz 확실히! 경험상 "논리 단위를 함께 유지"하여 "단락"이 실제로 "아이디어"를 의미합니다. 전 처리기 선언에서도이 규칙을 따릅니다. 물론 그것은 개인적인 스타일의 문제입니다.
wchargin

46

항상 다른 리소스에 의존하지 않고 신뢰할 수있는 출처를 확인하십시오. C는 ISO 9899 :: 2011로 표준화되었으며 C ++에는 ISO 표준도 있습니다. 둘 다 잘 받아 들이며 짧은 초안으로 최종 초안을 사용할 수 있습니다. C 표준은 6.10.7로 표시됩니다 (C ++의 텍스트는 거의 동일 함).

양식의 전처리 지시문

# new-line

효과가 없습니다.

이것은이다 널 지침 만큼, ;핵심 언어의 선행 표현하지 않고는이다 널 문 .

전 처리기의 경우, 형식 / 가독성을 위해 행이 의미 적으로 함께 속해 있음을 강조하기위한 것입니다. 세미콜론 OTOH는 의미 적으로 관련이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.