C에서 긴 printf 문을 여러 줄로 나눌 수 있습니까?


88

다음과 같은 진술이 있습니다.

나는 그것을 나누고 싶다. 다음을 시도했지만 작동하지 않습니다.

어떻게 깰 수 있습니까?


1
몇 가지 좋은 제안이 주어졌지만 둘 다 4 개의 개별 printf () 호출만큼 명확하거나 유지 관리 할 수 ​​없습니다.
Clifford

@Clifford : 그러면 C ++를 작성할 수 있으므로 cout이 더 잘 보입니다.
테스트

답변:


175

문자열 리터럴을 여러 줄로 나누려면 다음과 같이 여러 문자열을 각 줄에 하나씩 연결할 수 있습니다.


86
두 문자열 사이의 공백이 연결이라는 잘 알려지지 않은 C 사실을 설명하기 위해 주석을 달았습니다.
Brian Postow

2
@Lundin 각 변수와 그 값을 자체 줄에 명확하게 표시하면 훨씬 쉽게 읽을 수 있습니다. 모든 변수와 값을 한 줄에 입력하는 IDE의 디버거를 상상할 수 있습니까? 난 못해. (예, 나는 그것이 각 문자열 사이에 개행 문자를 넣어하지 않습니다 알지만, 디버거에서 변수의 일기 좋게에 소스 코드의 일기 좋게을 비교하고 있습니다)
byxor

이 연결은 전처리기에 의해 이루어 집니까?
debuti

23

C 컴파일러는 인접한 문자열 리터럴을 하나로 붙일 수 있습니다.

전처리 기는 CR (또는 Windowsland의 경우 CR / LF)을 계산하지 않고 행의 마지막 문자로 백 슬래시를 사용할 수 있습니다.


6
첫 번째는 이미 제안되었으며, 두 번째는 '\' 뒤에 공백이 있으면 중단된다는 사실로 어려움을 겪습니다 . 발생하면 당황 스러울 수있는 버그.
Clifford

1
이 두 가지 예 중 어느 것도 C 전처리 기와 전혀 관련이 없습니다.
Dan Molding

@Dan 내 cpp는 / (위의 내 편집 참조)을 이해하는 것 같습니다. 이것이 표준 동작인지 확실하지 않습니다.
sigjuice

@Dan 인접 리터럴 결합은 전 처리기 또는 컴파일러 (실제 컴파일 전 마지막 단계)로 수행 할 수 있지만, 그렇지 않으면 다중 행 매크로를 구현할 수 없기 때문에 행 연속 처리는 전처리기에 의해 수행됩니다. 또한 여기를 참조하십시오 -gcc.gnu.org/onlinedocs/cpp/Initial-processing.html
qrdl

2
@qrdl : 안타깝게도 두 번째 말씀이 맞습니다. 줄 연속은 항상 전처리기에 의해 수행됩니다. 때때로 나는 내가 모든 것을 아는 사람이 아니라는 것을 상기시켜야 할 필요가있다 ;) 나는 여전히 정상적인 경우 컴파일러가 문자열 리터럴을 조인한다고 생각한다.
Dan Molding

20

몇 가지 다른 서식 옵션 :

테마에 변형을 추가 할 수 있습니다. 아이디어는 printf()변환 speficiers와 각각의 변수가 모두 "멋지게"정렬되어 있다는 것입니다 (일부 "nicely"값에 대해).


여기에 기능은 없지만 이전에 본 적이없는 참신한 아이디어입니다. 나는 그것을 좋아한다, 좋은 코멘트 @pmg!
rpj

3

C에서 복잡한 함수를 분할하는 사실상 표준 방법은 인수 당입니다.

또는 다음과 같은 경우 :

문자열을 분할해서는 안되며 \C 줄을 끊는 데 사용해서는 안됩니다 . 이러한 코드는 빠르게 완전히 읽기 / 유지 관리 할 수 ​​없게됩니다.


3

printf위에서 본 것처럼 하나의 문을 사용하여 문자열 리터럴을 인쇄하는 것이 좋은 프로그래밍 관행 이라고 생각하지 않습니다 . 오히려 아래 코드를 사용할 수 있습니다.

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