적어도 C에서는 printf
함수 계열 을 사용하여 서식이 지정된 문자열을 인쇄 한다는 것을 누구나 알고 있습니다. 이러한 함수는 퍼센트 부호 ( %
)를 사용 하여 형식 지정자의 시작을 나타냅니다. 예를 들어, %d
를 인쇄하는 수단 int
, 및 %u
의미를 인쇄 unsigned int
. printf
함수 및 형식 자리 표시자가 작동 하는 방식에 익숙하지 않거나 단순히 새로 고침이 필요한 경우 Wikipedia 기사 를 시작하는 것이 좋습니다.
내 질문은, 이것이 원래 또는 미래에 형식 지정자로 선택되어야하는 특별한 이유가 있습니까?
분명히 결정은 오래 전에 이루어졌으며 (C 언어의 전임자에게도 가능성이 높았 음) 그 이후로 거의 “표준”이되었습니다 (C뿐만 아니라 다른 여러 언어에서도). 구문을 다양한 각도로 채택 했으므로 너무 늦어서 변경되지 않습니다. 그러나 누군가 왜이 선택이 처음에 이루어질 수 있었는지, 그리고 비슷한 기능을 가진 새로운 언어를 디자인 할 때 선택이 적절한 지에 대한 통찰력이 있는지 궁금합니다.
예를 들어 C # (및 다른 .NET 언어 제품군)을 사용하여 Microsoft는 문자열 형식화 기능의 작동에 대해 약간 다른 결정을 내 렸습니다. printf
C 의 구현과 달리 어느 정도의 유형 안전이 시행 될 수는 있지만 해당 매개 변수의 유형을 표시 할 필요는 없지만 색인이없는 중괄호 쌍 ( {}
) 을 사용하기로 결정했습니다. 다음과 같이 형식 지정자로 사용하십시오.
string output = String.Format("In {0}, the temperature is {1} degrees Celsius.",
"Texas", 37);
Console.WriteLine(output);
// Output:
// In Texas, the temperature is 37 degrees Celsius.
이 String.Format
메소드의 일반적인 복합 형식에 대한 기사와 마찬가지로 메소드 의 문서 에는 자세한 정보가 포함되어 있지만 정확한 세부 사항은 중요하지 않습니다. 요점은 단순히 %
형식 지정자의 시작을 나타내는 데 사용 하는 오랜 관행을 버렸다는 것 입니다. C 언어는 단지 쉽게 사용할 수도 {d}
와 {u}
,하지만하지 않았다. 왜,이 결정이 회고에 적합한 지, 그리고 새로운 구현이 그것을 따라야하는지에 대해 어떤 생각이 있습니까?
분명히 이스케이프 가능한 그래서이 문자열 자체에 포함 할 수 있어야하지 않을 것을 선택 할 수없는 문자가 없습니다, 그러나 그 문제는 아주 잘 만 사용하여 이미 해결 이 그들입니다. 다른 고려 사항은 무엇입니까?
답변
@Secure가 지적했듯이 C의 printf
기능은 BCPL의 writef
기능에서 영감을 얻었습니다 . BCPL 에 대한 Wikipedia 페이지를 보면 BCPL 이 형식 지정자를 소개하는 writef
데 사용 된 예도 있습니다 %
.
따라서 %
BCPL이했기 때문에 또는 BCPL이했던 것과 같은 이유로 C가 사용 된 것으로 추론 할 수 있습니다 . 내 직감은 그것이 %
가장 일반적으로 사용되는 ASCII 문자 중 하나 라는 것 입니다 … 또는 저자가 생각했습니다. 또한 다양한 대안을 계량하는 데 많은 시간을 소비하지 않았을 가능성이 있습니다. 그 당시 BCPL과 C는 모호한 언어였으며 저자들은 다루어야 할 중요한 것들이 가장 많았습니다.
그러나 작품에는 작은 스패너가 있습니다. C는 BCPL에서 영감을 받았지만 C가 BCPL I / O 라이브러리를 빌 렸는지 아니면 다른 방법으로 빌 렸는지는 명확하지 않습니다. BCPL의 I / O 라이브러리는 infix byte indexing operator가 언어에 추가 된 시간에 대해 진화 과정을 거쳤다는 것을 어렴풋이 기억합니다. (실제로, 누가 그것에 대해 알고 있는지 알고 있습니다.)
답변
Wikipedia 항목에는에 관한 특정 기록이 많지 않고 printf
일반적인 문자를 이스케이프 처리 하는 내용이 포함되어 있습니다 .
http://en.wikipedia.org/wiki/Escape_character
“이스케이프 문자”라는 용어에 대한 초기 언급은 Bob Bemer의 IBM 기술 문서에 있습니다. 분명히 ASCII 문자 집합에 대한 작업 중에이 메커니즘을 발명 한 사람입니다.
내 추측은 : 백 슬래시는 이미 문자열 리터럴에 사용되고 다른 문자열은 형식 문자열에 필요했습니다. 대부분의 사람들은 정상적인 사용 및 발생 빈도가 가장 적은 것으로 가정했습니다.
BTW, 다른 관련 기사는 내가 전에 들었던 용어와 관련이 있습니다.
http://en.wikipedia.org/wiki/Leaning_toothpick_syndrome
에 대한 기사 printf
에는 더 많은 정보 스 니펫이 있지만 그 이유는 아닙니다.
http://en.wikipedia.org/wiki/Printf
C의 variadic printf는 BCPL의 writef 함수에서 시작되었습니다.