갑자기 생각난 의문, %%에 관해 (in C)
글쓴이: leesort / 작성시간: 일, 2006/11/26 - 5:24오후
printf의 argument로 '%'를 입력할때에
"%%"를 사용합니다.
" 를 출력할 때에나
\ 를 출력할 때 등등 백슬래쉬를 사용합니다. ex) "\"", "\\"...
단순히 '%'를 출력하기 위해
"\%" 이렇게 하지않고 "%%"이렇게 된 이유가 혹시 있을까요?
제가 약간이나마 짐작하는 것은 '%'를 percentage,
즉 수학 개념이 포함되어있음을 표시하기위해 단순 출력인 백슬래쉬랑
구분하는것 같기도 한데...
정확한 이유가 있을까요?
Forums:
그건 말임다
\ 문자의 경우에는 애초에 그에 해당하는 값으로 바뀝니다만, %는 printf, scanf를 통해 나오면서 바뀌잖습니까.
자세한건 다음 분이 -3-
- Tirin.
- Tirin.
C에서 문자열은 큰
C에서 문자열은 큰 따옴표(")로 묶입니다. 그래서 문자열 내에 큰 따옴표가 들어갈 경우에 문제가 생기겠죠. 그래서 큰 따옴표를 넣을 때는 앞에 역슬래시(\)를 넣어서 다음에 올 따옴표는 문자열을 묶는 따옴표가 아니라 문자 그대로의 따옴표라고 말해 주는 것입니다. 제어문자도 보이는 문자로는 나타내기 어려우므로 역슬래시를 써서 표현을 하죠. 이것은 C언어 자체의 문법입니다.
그런데 printf나 scanf 등에서는 출력할 변수의 형이 무엇인지 알 필요가 있어서 문자열을 입력받는데 형지정자 기호로 퍼센트(%)를 쓰죠. printf나 scanf가 기본적으로 제공되지만 문법적인 것은 아니죠. 만약에 문자열 안에 역슬래시(\) 다음에 퍼센트(%)를 쓴다면 C 문법으로서 먼저 제어문자라고 판단을 할 것입니다. C 문법 기반 위에서 구현되어야 할 printf가 scanf가 이를 어기고 역슬래시를 다음에 오는 퍼센트를 퍼센트 문자 자체로 인식할 수가 없는 것이겠죠. 그래서 printf나 scanf는 퍼센트 두개(%%)를 그들만의 약속으로 퍼센트 문자 자체로 인식하게 한 것이죠.
엄밀하게 맞는 이야기는 아니겠지만 대충 이렇게 이해할 수 있겠네요.
--
foldl (flip (:)) [] "universe"
흠 대충은.
C언어에서는 \% 라는 것을 사용할 이유가 엄밀히 말하면 없는데
printf, scanf등에서 \% 사용하면 C언어를 어기게 되서 따로 %%라 해놓은건가요?
------------------------------------------
------------사진은 제가 아님----------------
------------------------------------------
특별한 이유는 없어
특별한 이유는 없어 보입니다만 파싱이 더 단순해서 혹은 구현 당시에는 그게 더 단순해서가 아닐까요 ?
\는 컴파일러가. %는 printf,scanf등의 함수에서..
\는 컴파일시에 특수문자를 입력하기위해 사용되는 문자이고..
%는 printf, scanf등의 function내부에서 format으로 인식하는 문자입니다.
%를 format문자가 아닌 % 문자 자체로 인식하라고 printf, scanf에게 알려줘야지
컴파일러한테 \% 해서 이거 % 문자다 라고 알려줘봐야 아무 소용 없겠지요..
\는 문자열 상수
\는 문자열 상수 단계에서 처리되고 %는 printf 함수 내부에서 처리됩니다. 서로 다른 단계에서 처리가 이루어진다는걸 생각하면 왜 \%가 아닌지 쉽게 이해하실 수 있을 겁니다.
좋은 지식들
좋은 지식들 감사합니다~
------------------------------------------
------------사진은 제가 아님----------------
------------------------------------------
댓글 달기