2012-06-11 2 views
-4

기타 사회 호기심 ... C++ 문장

천 년 전 내가 처음으로 C 및 C++ 클래스를 tokk 때 단순한 오백년 전에 처음으로 프로그래밍 클래스 (포트란 66) 등을 가지고 갈 때, 언어 전반에 걸쳐 꽤 표준적인 구두점 연습이있었습니다. 나는 Basic (떨림), PL/1, PL/AS, Rexx 심지어 파스칼에서 그들을 보았다. 좋습니다, APL2는이 토론의 일부가 아닙니다.

각 언어에는 고유 한 구두점이 있습니다. 파스칼의 시대는 Fortran의 쉼표로 구분 된 do 루프입니다. 거의 모든 사람의 세미콜론입니다. 내가 배운 것처럼

, 각 언어는 키워드가 (위해 수행하는 경우, 동안 등까지) 공백 (또는 왼쪽 여백) < 공간 등 > < 경우 공간 >에 의해 출발하는

각 언어에는 함수 호출, 호출 된 함수의 서브 루틴이 있습니다. 일부 내장 된 일부 사용자 코드. 그들은 < 공백없이 왼쪽 여백 > function_name (매개 변수);에 의해 출발했다. sqrt (x) 또는 rand (y)에서와 같이;

최근에는 구두점 규칙이 새로 추가 된 것으로 보입니다. 특히 C++에서 변수 선언의 끝 부분에 이니셜 라이저가 붙는 곳 int x (0); 또는 auto_ptr <p> p (새 기즈모); 이것은 누군가가 함수 prototoye를 선언하거나 함수를 정수로 사용한다고 생각하게한다. (허?).

그런 다음 "if"와 "for"가 괄호로 자란 것처럼 보입니다. if (true) for (;;) 등 키워드가 언제 기능을 수행했는지.

마지막으로 함수가 괄호를 벗긴 것처럼 보입니다.

질문 : 언제 옛날 방식이 사라졌고이 새로운 방식이 유행에 들어갔습니까? 내 옆에있는 사람이 읽는 것을 짜증나게하고 구두점을 배치하는 데 사용 된 정보가 없어 졌습니까? 나는 K & R이 "if"나 "for"의 끝 부분에 바이트를 저장하기 위해 {을 넣었다. 그 변명을 여기에서 사용할 수 없습니다. 하드 디스크 공간이 100 MiB를 넘어 서서 가독성 손실에 대한 핑계로 죽었다.

귀하의 의견을 듣고 있습니다. 이렇게하는 것이 좋은 이유가 있다면, 기꺼이 배울 것이고, 아마도 50 년 후에 익숙해 질 것입니다. 물론 컴파일러가 이러한 (IMHO) 오자를 인식하고 계속 진행하는 것이 좋지만, 그렇게 코딩 할 수 있기 때문에 당신이 할 수있는 것은 아닙니다. 맞습니까?

감사합니다.

+3

이것은 프로그래머에 속합니다. – bitmask

+1

코드가 기본 표준을 따르는 한 IMHO는 설명적인 변수 이름과 멋진 깨끗한 코드를 가지고 있습니다. 또한 의견! 의견이 있어야합니다! – Rhexis

+0

"실제 프로그래밍 질문보다 사회적 호기심이 더 많습니다 ..."이것이 주제를 벗어난 주제입니다. –

답변

4

C++에서 객체와 함수 선언 사이의 간헐적 인 모호성에 대해 확실히 맞습니다. "가장 애매한 구문 분석"을 검색하십시오. 그러나 이라면 변함없이이 혼란 스럽다는 것은 C++을 잘 읽지 못한다는 것을 의미합니다. 연습으로 개선해야합니다. 그러나 어쨌든 C++은 주로 연습없이 읽기 쉽도록 주로 설계되지 않은 것으로 알려져 있습니다. 다른 디자인 우선 순위가 있습니다. 모든 사람들이 우선 순위를 공유하지는 않습니다. 그렇기 때문에 모두가 C++을 사용하지 않습니다.괄호 안에 조건문을 둘러싸에 관해서는

, 당신은 if을 위해 구문 사이에 인공 차이를 만들기 위해

if (foo) { bar; } 

보다는

if(foo) { bar; } 

을 쓸 환영합니다 및 구문 함수 호출. 렉서가 토큰 사이의 경계를 찾을 수있는 한 C는 공백에 대해 완전히 완화되어 있으므로 나머지는 언어가 아닌 스타일입니다. 공백에 대한 이완이 언제 시작되었는지 알고 싶다면 ALGOL 계열의 언어를 개발하는 중에 시간이 필요하다고 생각합니다. 나는 ALGOL58을 모른다. 그러나 그것이 존재했는지 안했는지를 확인하는 곳이 될 것이다.

"오래된 방법"언어 중 일부는 표현식에서 그룹화하고 함수 인수를 묶는 데 사용되는 것이 확실합니다. 따라서 실제로 함수 호출 음영 자 (parens)가 실제로는 결코 함수 호출 엔클로저라고 주장하지 않습니다. 존재했다.

나는 함수 호출에 대한 C 또는 C++ 프로그램에서 어느 잘못된 if을했습니다 생각하지 않는다, 나는 당신이하지에 하나 배울 것으로 기대하고 생각합니다. 사람들이 if으로 해결되는 매크로로 이상한 일을한다면 의심 할 여지없이 그들은 나를 혼란스럽게 할 수 있습니다. 그렇지만 아무도 C 스타일 매크로가 혼동을 일으킬 수 있다고 주장하지 않았습니다.

귀하의 주된 주장은 모든 언어가 대략 비슷한 방식으로 구분되어야한다는 것이고, Lisp와 Ruby를 확인하십시오. 희망 당신은 개스킷을 날려 버릴거야 다음은

내가 아는 ;-) 극복 완전 잘 K & R 여기에 바이트를 저장 하는 "경우"의 끝 부분에있는 {나 "를"넣어 거기. 그 변명을 여기에서 사용할 수 없습니다

그렇다면 리치가 거기에 넣을 수는 있겠지만 그것이 내가 그곳에 넣은 이유는 아닙니다. 나는 그것을 수직 공간을 보존하기 위해 주로 두었다. 아직까지는 제한적입니다. 하드 디스크가 용량의 일부만 쓰는 코드 줄을 모두 저장할 수는 있지만 코드를 읽거나 화면을 조금만 가져 가려고 모니터의 전체 높이를 사용합니다. 가구. 나는 한 번에 두 개 이상의 기능을 화면에 표시함으로써 문제를 복잡하게하는 것을 좋아하지 않는 사람들이 {-on-a-line-on-its-own을 발명했다고 확신합니다. 여분의 수직 공백은 이것을 깔끔하게 방지하고보다 콤팩트 한 스타일보다 더 엄격한 한계를 두며, 화면에 맞는 기능의 복잡성에 대한 것입니다.

파이어 폭스는 블럭별로 다른 수직 줄을 저장합니다. 나는 닫힌 구두점을 사용하지 않아도됩니다. 이유는 GvR이 그렇게했기 때문입니다.

요약하면 내 대답은 "아니오"라고 생각합니다. 모든 사람이 공유하지 않습니다. 정확히 코드 서식에 대해 좋아하는 것과 싫어요. 또는 내. 아마 좋은 일이기도합니다.

+0

"parens을 function-call-enclosers라고 주장하는 진정한 의미입니다." 나는 너를 오해했다고 생각한다. 나는 some_word + no space + (Fortran 66과 TRS basic 및 PL/1에서 함수로 표시하고 오래된 프로그래머에게는 당연하다고 느낀다.) –

+0

@Wes : 좋아, 나는 만화 효과를 과장했다. 't'*'if (foo)'를 써야만합니다. C가 공백을 넣을 곳을 제약하지 않습니다. "old"가 "ALGOL58 이전"을 의미하는 것으로 밝혀지면, 실제로는 크지 않습니다. 현대적인 언어의 디자인에 동기를 부여하기에 충분한 잠재력이 있습니다 .60 대 프로그래머는 드물지만 50 대 프로그래머는 더 이상 의도하지 않습니다. 프로그래밍 용어로는 말 그대로 epoc 이상을 말합니다 .-) –

0

C++, Java, C# 및 기타 현대 언어는 고급 언어이므로 모든 키워드를 이해하고 친근하게 만듭니다. 가능한 한 공통 언어에 가깝도록해야합니다. 때로는 "기본"구두점이 변경되어 코드가 더 선명하고보기 좋게 보입니다. 이 모든 것은 프로그래머의 작업을 더 쉽게하기 위해 수행됩니다.

이제 Visual Studio (.NET) 올바른 위치에 코드를 삽입하고 공백, 탭 등을 제거하십시오.

이 문제는 점점 익숙해지고 있습니다. 이 규칙은 변경되어 새로운 기준으로 계속 변경되고 채택 될 것입니다. 그래서 세대의 문제는 분명합니다.

BTW, for이 함수는 iterator입니다. if도 마찬가지입니다. 술어와 함수를 인수로 취합니다.

+0

프레임 워크가 아닙니다. 그렇게하면 IDE가됩니다. 괜찮은 IDE에서 그 동작은 구성 가능합니다. –