코딩 스타일 원칙에 대한 과학적으로 엄격한 연구가 있습니까? [닫은]


25

코딩 스타일 원칙 (예 : 단일 종료 원칙)이 실제로 좋은가? 항상 또는 때로는? 실제로 얼마나 많은 차이가 있습니까?

당신의 의견이 무엇이든, 이것들은 분명히 주관적인 질문입니다. 아니면 그들입니까?

코딩 스타일 원칙에 대해 객관적이고 과학적으로 엄격한 연구를 시도한 사람이 있습니까?

나는 누군가가 어떻게 가독성에 대한 이중 맹검 연구를하는지 상상할 수 없지만 아마도 이중 무지가 가능할 수도있다. 주제로 연구되는 원리를 모르는 학생들과 비 프로그래머가 연구를 수행하는 것을 사용하라.


5
코드를 완전히 읽지 못할 수 있습니다. 모든 것을 측정 할 수는 없지만 많은 것이 있으며이 책에서 원시 데이터 또는 소스에 대한 좋은 개요를 찾을 수 있습니다.
deadalnix

또한 언어에 따라 크게 달라지며 일부 원칙은 다른 언어가 아닌 특정 언어에 적용됩니다. 예를 들어 single-exit principleRAII 때문에 실제로 C ++에는 적용되지 않습니다
Martin York


@Loki-나는 그것에 대해 생각해야했고, 나는 동의하지 않는다. 그것은 RAII가가로 계산 (적어도 일부 사람들에게) 다른 출구 점이다 예외에 대처하기 위해 많은 부분에 설계되어 있지만 것은 사실이다 다른 정말 방법한다는 점에서 하나의 출구 원리에 대해 계산하지 - 대체 출구 점 break, goto또는 return해야 할 것. IOW 단일 엑시트는 C ++에서 절대적인 것은 아니지만 C와 대부분의 다른 언어에서는 거의 내가 볼 수 있습니다. 그러나 여전히 엄격하지는 않습니다.
Steve314

1
@ Steve314, 기사는 적어도 먼 관련이 있습니다.이 실험의 방법론에 대한 디자인을 간략히 설명합니다.이 영역에서 올바르게 기록 된 실험 증거가 없기 때문에 매우 중요합니다.
SK-logic

답변:


11

deadalnix의 의견을 반영하고 있습니다. 코드 완성 2를 읽으십시오 . 필자 (Steve McConnell)는 심도있는 코딩 스타일과 논문 및 데이터에 대한 참조에 대해 논의합니다.


전문 소프트웨어 개발에 대한 기본적이고 잘 소개 된 개요, 언젠가는 품질 보증을 위해 비슷한 것을 찾을 수 있기를 바랍니다. 방어 프로그래밍 및 유사 코드 프로그래밍에 관한 장이 특히 도움이되었습니다. 공동 개발 관행에 관한 장은 지금까지 내가 읽은 모든 것 중에서 가장 설득력있는 것 같습니다.
gnat

나는이 책을 읽지 않았고 어쩌면해야 할 것이지만 모나 트 답변의 의견을 바탕으로 논문이 과학적으로 엄격하고 객관적인가? 대답이 "가능한 한"이라면 어떤 절충안이 필요 했습니까? 질문에서 제안했듯이 이중 블라인드를 더 약한 표준으로 교체해야 했습니까?
Steve314

@ Steve314 : 모르겠어요, 소스를 확인하지 않았습니다! 그러나 모범 사례를 확립하기 위해 항상 과학적으로 엄격 할 필요는 없습니다. 장단점에 대한 논의는 때때로 충분합니다.
M. Dudley

@ emddudley-절대적으로 사실이지만 실제로이 질문에 관한 것은 아닙니다.
Steve314

@ Steve314 : Code Complete는 여러분에게 훌륭한 출발점이 될 것이며, 그 참고 문헌 중 일부는 코딩 스타일의 과학적 분석 문제를 해결할 것이라고 확신합니다.
M. Dudley

12

나는 객관적인 결과를 낳는 주제에 관한 연구의 가능성을 크게 의심하고 있으며, 설득력있는 연구를 보여줄 때까지 회의적이다.

읽고 다음 특정 코딩 스타일을 것입니다 코드 작성 년 동안 한 프로그래머 분명히 그들의 정물화에서 처음으로 볼 것입니다 일부 완벽한 코딩 스타일보다 더 읽기 찾을 수 있습니다.

가장 일반적인 QWERTY 타이핑 레이아웃과 정확히 동일합니다. 인체 학 측면에서 그것이 차선책이라는 것을 쉽게 입증 할 수 있습니다. .

그러나 드보라 크 (Dvorak) 나 콜막 (Colemak)과 같은 개량 된 대안은 결코 따라 잡지 않았으며 앞으로도 그럴 것 같지 않습니다. 따라서 사람들은 더 생산적 이지 않습니다 . 그것들이 추상적 인 의미에서 우수하더라도.

또한, (이 연구의 결과를 오염시킬 수로) 프로그래밍에 아무 사전 노출 대상을 찾기 어려울 수,하지만 프로그래밍을위한 적성, 그리고이 보여 충분히 긴 기간 동안 연구에 참여하는 것입니다 것 모두 짧은 서로에게 가중 될 수있는 시간 편익 및 장기 편익…


1
쿨, 나는 전에 Colemak 들어 본 적이 없다
CaffGeek

1
@Chad조차 덜 알려진 Carpal X입니다. 나는 Colemak보다 나아졌다 (나는 carpalx로 90-100 wpm에 도달했다). 이국적인 레이아웃으로 전환하지 않으려는 경우에도 carpalx 웹 사이트는 키보드 레이아웃을 평가 및 최적화하고이 범주의 문제에 대해 유전자 알고리즘을 활용하는 것에 대해 매우 흥미롭게 읽습니다. mkweb.bcgsc.ca/carpalx
Konrad Morawski

1
때로는 대안 적 접근 방식의 한계 이익이 채택 비용을 정당화하기에 충분할 수도있다. 그렇지 않으면 우리는 여전히 프로그래밍 어셈블러와 포트란을 사용합니다. 이 답변은 실제로 한계 이익이 있는지 여부에 대한 원래 질문에 응답하지 않습니다. 드보락의 예에는 분명히 그 내용이 있으며 그 내용이 입증되었지만 드보락 학습을 정당화 할만큼 충분한 이점은 없습니다.
Jeremy

@Jeremy "이 답변은 실제로 한계 이점이 있는지 없는지에 대한 원래의 질문에 실제로 응답하지 않습니다"– OP는 그러한 연구의 결과를 직접 요구하지 않았으며, 누군가가 그러한 연구를 수행하려고 시도했는지 여부를 물었습니다. 더 열린 질문입니다. 기술적으로 어려운 이유와 이러한 연구 결과가 통계 노이즈에 의해 크게 오염 될 수있는 몇 가지 논리적 인 이유를 지적함으로써 대답했습니다. 따라서 제 대답이 귀하가 제공 한 근거에서 유용하지 않은 것으로 간주되면, 나는 불공평 한 것으로 생각됩니다.
Konrad Morawski

1
@ 제레미 (Jeremy) 이러한 채택 비용의 요점은 사람들이 더 많은 연습을 한 한 열등한 도구로 더 잘 수행한다는 것입니다. 그리고 이것은 주제가 다른 코딩 스타일에 얼마나 잘 대응 하는지를 조사하려는 모든 연구에서 나타날 것입니다. 코딩 스타일에 익숙해 지거나 익숙하지 않기 때문에 발생하는 노이즈는 이러한 스타일의 선천적 특성의 영향을 줄입니다. 완전한 초보자를 데리고 놀이터를 평평하게하지 않는 한. 그러나 이것은 내 대답의 마지막 단락에서 지적했듯이 실질적인 어려움을 초래합니다.
Konrad Morawski

4

정답은 NO입니다! `break`와`continue`는 나쁜 프로그래밍 관행입니까? 이 질문의 하위 집합이므로 그에 대한 겨우 수정 된 답변으로 시작하겠습니다 ...

break 문을 사용하지 않고 프로그램을 다시 작성할 수 있습니다 (또는 동일한 작업을 수행하는 루프 중간에서 반환). 그러나 그렇게하면 일반적으로 프로그램을 이해하기 어렵게하는 추가 변수 및 / 또는 코드 복제를 도입해야 할 수도 있습니다. 파스칼 (1960 년대 후반 프로그래밍 언어)은 특히 초보자 프로그래머에게는 매우 나빴습니다.

Kosaraju의 제어 구조 계층 구조라는 컴퓨터 과학 결과가 있습니다.이 구조는 1973 년으로 거슬러 올라가며 Knuth의 유명한 논문 에서 언급 되었습니다. 깊이의 다단계 휴식이있는 모든 프로그램을 다시 할 수 없음을 보다 휴식의 깊이와 프로그램에 n 개의 추가 변수를 도입하지 않고있다. 그러나 이것이 단지 이론적 인 결과라고 가정 해 봅시다. (몇 가지 추가 변수를 추가해야합니까?! 스택 교환에서 3K + 사용자와 그룹을 느끼기 위해 그렇게 할 수 있습니다 ...)

소프트웨어 엔지니어링 관점에서 훨씬 더 중요한 것은 1995 년 Eric S. Roberts의 Loop Exits and Structured Programming : Rebinging the Debate (doi : 10.1145 / 199688.199815) 라는 최신 논문 입니다. Roberts는 다른 사람이 수행하기 전에 수행 한 몇 가지 경험적 연구를 요약합니다. 예를 들어, CS101 유형의 학생 그룹이 배열에서 순차 검색을 구현하는 함수에 대한 코드를 작성하도록 요청 받았을 때, 연구 저자는 중단 / 복귀를 사용하여 순차에서 나가는 학생에 대해 다음과 같이 말했습니다. 요소가 발견되면 바로 검색 루프 :

[이 스타일]을 사용하여 프로그램을 시도하여 잘못된 솔루션을 만든 한 사람을 아직 찾지 못했습니다.

로버츠는 또한 다음과 같이 말합니다.

for 루프에서 명시적인 리턴을 사용하지 않고 문제를 해결하려고 시도한 학생들은 훨씬 덜 나갔습니다.이 전략을 시도하는 42 명의 학생 중 7 명만이 올바른 솔루션을 생성 할 수있었습니다. 이 수치는 20 % 미만의 성공률을 나타냅니다.

예, CS101 학생보다 경험이 많을 수 있지만 break 문을 사용하지 않고 (또는 루프 중간에서 리턴 / 가로 이동) 결국 명목상 훌륭하게 구성되어 있지만 추가 논리 측면에서 충분히 털이있는 코드를 작성합니다 "올바른"코딩 스타일의 일부 아이디어를 따르려고 할 때 누군가, 아마도 여러분 자신이 논리 버그를 넣을 것이라는 변수와 코드 복제.

그리고 return / break-type 문 외에 하나의 큰 문제가 있으므로이 질문은 나누기 문제보다 조금 더 넓습니다. 예외 처리 메커니즘은 또한 일부 출구 출구 패러다임을 위반하고 있습니다.

따라서 기본적으로 단일 종료 (single-exit) 원칙이 오늘날에도 여전히 유용하다고 주장한 사람은 마지막 링크에 설명 된 매우 제한적인 방식으로 사용되지 않는 한 예외 처리 패러다임에 반대하는 것입니다. 이러한 지침은 기본적으로 함수에서 모든 예외를 throw ()로 제한합니다. 즉, 함수 간 예외 전파가 전혀 허용되지 않습니다. C ++와 유사한 구문으로 새로운 파스칼을 즐기십시오.

나는 "하나의 귀환 만"이라는 개념은 어디 에서 왔는가?이 사이트에 대한 일반적인 의견은 내가 여기에 게시 한 내용과 반대되는 것이므로 질문에 대해 실제로 요청한 내용을 제공하는 첫 번째 답변인데도 왜 내가 투표에 참여하지 않았는지 완전히 이해합니다. 실제 사용성 테스트에 대한 일부 정보는 단일 종료 문제에 중점을 둡니다. 나는 특히 도박 사이트에서 지식이 선입견을 방해해서는 안된다고 생각합니다. 나는 지금부터 Wikipedia 편집을 계속할 것입니다. 적어도 좋은 출처의 정보는 높이 평가되며 출처에 의해 뒷받침되는 모호하거나 잘못된 주장은 결국 금지를받습니다. 이 사이트에서는 그 반대의 결과가 나타납니다. 사실에 의해 입증되지 않은 의견이 지배적입니다. 나는 mod 가이 마지막 부분을 삭제할 것으로 기대하지만, 적어도 그 친구는 왜 당신이 나를 기고자로 영원히 잃어 버렸는지 알 것입니다.


나는 이것을 공감하지 않았지만 "하지만 그렇게하면 일반적으로 프로그램을 이해하기 어렵게 만드는 추가 변수 및 / 또는 코드 복제를 도입해야 할 수도 있습니다." 그것은 주관적인 주장입니다. 변수 또는 코드 복제를 추가하면 이해하기가 어렵지만 고토를 추가하면 이해하기가 어려워지며 복제 된 코드를 함수로 분해하여 복제로 인한 손상을 완화 할 수 있습니다 (IMO 이동에도 불구하고) 호출 그래프의 복잡성이 자동으로 제거되지는 않습니다).
Steve314

나는 그 마지막 의견 이후에만 1995 년 논문에 대한 당신의 요점을 보았고, 흥미로운 점을 찬성하기로 결정했습니다. 귀하의 게시물이 길고 주관적인 요점으로 시작하기 때문에 귀하의 downvote가 더 많을 것이라고 생각합니다. 기본적으로, 실제 요점을 조기에 소개하는 것이 좋습니다.
Steve314

어쨌든 많은 사람들이 예외를 대체 대안 출구 지점 으로 생각 합니다. 실제로 계산되지 않는 오류 사례 (일부)를 의미하기 때문입니다. 그래도 언어 문화에 다소 민감하다는 것을 알고 있습니다. 일부 언어에서 "예외"는 이름 이상입니다. 예외적 인 성공 사례가 유효합니다 (IIRC Stroustrup은 C ++에 대해 이와 비슷한 말을했으며, 오류가 처리되면 오류가 오류인지에 대한 철학적 포인트를 제기했습니다). 어떤 사람들은 예외가 필요한 제어 흐름을 제공 할 때마다 사용할 또 다른 제어 흐름이라고 말합니다.
Steve314

1
@ Steve314 " 와 중복에 의한 손상은 복제 된 코드를 함수로 분해함으로써 완화 될 수 있습니다. "분리 된 의미가없는 함수의 논리의 일부를 라인에서 벗어나서 즉시 볼 수 없게합니다. 함수의 논리를 이해하기가 더 어려워집니다.
curiousguy

1
@curiousguy-예, 맞습니다. 아마도 "콜 그래프로 복잡성을 옮기는"의도의 일부일 것입니다. 나의 종교는 당신이하는 모든 선택이 절충점이므로 모든 그럴듯한 선택과 그 장단점을 알고, 일반적인 완화 법을 아는 것이 중요하지만 치료법이 질병보다 나빠질 경우주의해야한다는 것을 알고 있습니다. 물론 트레이드 오프의 한 부분은 물건에 대해 소란을 보내는 데 얼마나 많은 시간을 소비하는지입니다.
Steve314

1

http://dl.acm.org/citation.cfm?id=1241526

http://www.springerlink.com/content/n82qpt83n8735l7t/

http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=661092

[질문은 "예"라는 한 단어로 대답 한 것 같습니다. 그러나 나는 짧은 답변을 제공하는 것이 그 질문에 대해 "거시적"이라고 들었습니다. 내가 불쾌감을 느낀다면 중재자가 삭제할 수 있도록 답변에 플래그를 지정하십시오.]


1
@ luis.espinal : 끝으로? 본문에 어떤 정보가 포함되어 있습니까? 문제는 조금 엉망입니다. 질문의 어떤 부분을 텍스트로 다루어야합니까?
S.Lott

1
스타일과 관련하여 링크의 초록이 제공 할 수있는 추가 정보를 제공하기 위해 (OP가 유료 ACM / IEEE / Springer Verlag 멤버인지 여부를 고려하여 전체 기사에 액세스하고 예를 들어, ACM 논문 초록은 코딩 스타일을 언급하지 않습니다. 기껏해야 그것은 구조화 된 프로그램 정리를 확증하는 것에 대해 이야기합니다 (단독 또는 복수의 리턴 문제에 대해서는 이야기하지 않습니다). 따라서 해당 링크가 관련이있는 이유를 설명 할 수 있습니다.
luis.espinal

1
세 번째 기사 (고맙게도 IEEE Xplore에 액세스 할 수 있음)는 내가 알 수있는 한 OP가 요구하는 것과 관련이없는 것 같습니다. 나중에 더 헌신적 인 독서를 위해 인쇄하고있는 훌륭한 기사입니다. 아마도이 기사가 OP가 그의 질문에 대답하는 데 어떻게 도움이되는지 설명했을 수도 있습니다. 전반적으로, 당신은 단순히 많은 링크를 함께 던졌습니다. (그것이 당신의 의도가 아니라면) 무시하는 방식은 아니지만, 다시 한 번 OP가 어떻게 도움이되었는지는 알 수 없습니다. 그리고 이것이 포스터가 그의 링크를 따라 텍스트를 추가해야하는 이유입니다. 그래서 당신은 내가 왜 그것을 말했는지 알 수 있습니다;)
luis.espinal

1
OP의 입에서 Is a coding style principle - e.g. the single-exit principle - really a good thing?-그것은 코딩 스타일에 관해 그가 포즈를 취하는 질문에 대한 맥락을 제공합니다. 또한 코딩 스타일은 프로그래밍 방법론, 특히 IEEE 기사의 초점을 맞춘 높은 수준의 디자인 방법과 동일하지 않습니다 (저자들이 분명히 언급 함). "아니오"라고 말하는 이유는 그 범위가 완전히 다릅니다.
luis.espinal

1
OP가 어디에서 오는지 의심됩니다. 그는 코딩 방식 (방법론이 아님), 특히 단일 대 다중 리턴을 명시하고 있습니다. 나는 여러 개의 return 문을 사용하여 잘 작성된 고유의 자명 한 코드로 두 번 대처해야했습니다. "프로세스"당. 그리고 그러한 임의적 의무의 타당성, 유용성 및 비용 효율성을 궁금해합니다 (증거에 대한 도전). 60 년대에 여전히 살고 그러한 의무를 강제 사람들 : /
luis.espinal

1

코딩 스타일 원칙-예 : 단일 종료 원칙

여전히 단일 출구 또는 다중 출구로가는 사람들은 1960 년대 후반에도 여전히 고착되어 있습니다. 당시 우리는 구조화 된 프로그래머의 초기 단계에 있었기 때문에 그러한 토론이 중요했으며, Bohm-Jacopini 구조적 프로그램 정리의 배후에있는 모든 발견이 모든 프로그래밍 구조에 보편적으로 적용되지는 않는다는 많은 캠프가있었습니다.

그것은 오래 전에 해결 되었어야 할 것입니다. 글쎄, 그것은 (아카데미아와 업계 모두에서 정확히 40 년 동안 정확하기 위해) 정착되었지만 사람들 (절대적으로 또는 반대하는 사람들)은주의를 기울이지 않았습니다.

나머지 답변은 모두 상대적입니다 (소프트웨어에없는 것은 무엇입니까?).

  • 정말 좋은거야?

예. 대부분의 경우, 대부분의 경우에 특수한 경우와 언어 별 프로그래밍 구성에 대한 경고가 있습니다.

항상 또는 때로는?

대부분의 경우

실제로 얼마나 많은 차이가 있습니까?

다릅니다.

읽을 수있는 코드와 읽을 수없는 코드 복잡성 증가 (이제 우리가 알아야 할 오류 가능성) vs 단순성 복잡성 (그리고 오류 확률이 낮음) 컴파일러에서 암시 적 반환 (예 : Pascal, Java 또는 C #)을 추가하지 않는 언어 및 기본값은 int (C 및 C ++)입니다.

결국, 키보드 뒤에 사람 / 시간으로 연마 된 기술입니다. 때로는 다음과 같이 여러 개의 return 문을 사용할 수도 있습니다 (일부 Pascal'esque 의사 코드에서).

function foo() : someType
  begin
  if( test1 == true )
  then
    return x;
  end
  doSomethignElseThatShouldnHappenIfTest1IsTrue();
  return somethingElse();
end;

의도는 명확하고 알고리즘은 작고 복잡하지 않아 단일 리턴 포인트에서 사용되는 최종 리턴 값을 보유하는 '플래그'변수의 작성을 보증하지 않습니다. 알고리즘에 오류가있을 수 있지만, 그 구조는 간단하기 때문에 오류를 감지하는 노력이 무시할 정도입니다.

때로는 그렇지 않습니다 (여기서는 C와 유사한 의사 코드 사용).

switch(someVal)
{
case v1 : return x1;
case v2 : return x2:
case v3 : doSomething(); // fall-through
case v4: // fall-through
case v5: // fall-through
case v6: return someXthingie;
...
...
default:
   doSomething(); // no return statement yet
}

여기서 알고리즘은 간단한 구조를 갖지 않으며 switch 문 (C 스타일 코드)은 알고리즘의 일부로 의도적으로 수행되거나 수행되지 않는 폴 스루 단계를 허용합니다.

알고리즘이 정확하지만 잘못 작성되었을 수 있습니다.

또는 프로그래머의 능력을 넘어서는 외부의 힘에 의해 이것은 합법적으로 필요한 알고리즘의 실제 (정확한) 표현입니다.

어쩌면 잘못되었을 수도 있습니다.

이것의 진실을 밝히려면 이전 예보다 훨씬 많은 노력 이 필요합니다 . 그리고 여기에는 내가 강력하게 믿는 것이 있습니다 (이를 뒷받침 할 공식적인 연구가 없다는 것을 상기시킵니다).

올바른 것으로 간주되는 코드 스 니펫을 가정합니다.

  1. 스 니펫이 본질적으로 단순한 흐름 구조를 가진 간단한 알고리즘을 나타내는 경우 여러 개의 리턴 문이 이러한 코드 스 니펫의 가독성과 단순성을 증가시킵니다. 간단히 말해서, 나는 작은 것을 의미하지는 않지만 본질적으로 이해할 수 있거나 자기 증거를 의미합니다. 독립적 노력이 필요하지 않습니다 (사람들이 구토하거나 누군가의 어머니를 저주하거나 글 머리 기호를 읽을 때 총알을 삼키도록 유도하지 않습니다). )

  2. 단일 리턴 명령문은 알고리즘 실행 전체에서 리턴 값이 계산되거나이를 계산하는 알고리즘의 단계가 알고리즘 구조 내의 한 위치에 그룹화 될 수있는 경우 이러한 코드의 가독성과 단순성을 증가시킵니다. .

  3. 하나의 return 문은 하나 이상의 플래그 변수에 대한 할당이 필요한 경우 그러한 할당의 위치가 알고리즘 전체에 걸쳐 균일하게 위치하지 않으면 서 그러한 코드 조각의 가독성과 단순성을 감소시킵니다.

  4. 리턴 문이 알고리즘에 균일하게 분산되지 않고 크기 나 구조가 균일하지 않은 상호 배타적 인 코드 블록을 구분하는 경우 여러 리턴 문이 이러한 코드 조각의 가독성과 단순성을 떨어 뜨립니다.

이것은 문제가되는 코드 스 니펫의 복잡성과 밀접한 관련이 있습니다. 그리고 이것은 순환적이고 복잡한 복잡성 측정과 관련이 있습니다. 이를 통해 다음을 관찰 할 수 있습니다.

서브 루틴 또는 함수의 크기가 클수록 내부 제어 흐름 구조가 더 크고 복잡하며 여러 개의 return 문을 사용할지 아니면 단일 return 문을 사용할 지에 대한 의문이 생길 가능성이 커집니다.

이것의 결론은 함수를 작게 유지하고 한 가지만 수행하는 것입니다 (그리고 잘하는 것). 그것들이 명목상 작은 순환 적 및 반 복잡성 메트릭스를 나타내는 경우, 그것들이 가장 정확하고 이해 가능한 과제의 구현 일뿐 아니라, 내부 구조도 비교적 자명하다.

그런 다음에 만 수면을 잃지 않고 아주 쉽고 빠르게 할 수 있으므로 어느 쪽을 선택해도 오류가 발생할 위험이 크지 않은 상태에서 단일 반환 및 다중 반환을 사용할지 여부를 결정할 수 있습니다.

이 모든 것을 살펴보고 사람들이 단일 반품이나 여러 반품 문제로 어려움을 겪을 때, 경험 부족, 어리 석음 또는 업무 윤리 부족으로 인해 깨끗한 코드를 작성하지 않고 작성하는 경향이 있기 때문입니다. 사이클로 매틱 및 헐스 테드 측정을 완전히 무시한 괴물 기능.


1
C ++ 리턴 유형은 기본적으로 int가 아닙니다. 기본 리턴 유형이 없으므로 모든 경우에 지정해야합니다.
Sjoerd

전에에서 나는이 질문을 썼다 - programmers.stackexchange.com/questions/58237/...을 . 기본적으로 나는 원칙에 대한 인식을 옹호하고 있지만 엄격하게 따르지는 않습니다. 모든 출구 지점이 분명하면 행복합니다. 내 요점은-단지 하나의 원칙을 예로 들었다고해서 그 원칙을 옹호한다는 것을 의미하지는 않으며, 반드시 엄격한 형식이 아닙니다. 내 주관적인 의견은 그저 내 견해에 대한 더 강력한 주장이 있거나 내가 틀렸다는 강력한 주장이있을 수 있습니다.
Steve314

"default to int"는 무엇입니까?
curiousguy

말하자면, 코드에 명시적인 반환 값이없는 실행 분기가있는 경우 대부분의 컴파일러는 단순히 누산기 레지스터의 값을 반환 값으로 "축소"한다는 의미입니다. 실제로는 마지막 산술 연산의 결과 (가비지가 무엇이든)를 int 형식으로 반환하는 것을 의미합니다. 그리고 그것은 함수가 무엇을 의도했는지에 관계없이 확실히 쓰레기 (그리고 잘못되고 정의되지 않은 행동) 일 것입니다. C 및 C ++에서 경고 할 수 있지만 -Werror 또는 이와 유사한 것을 사용하지 않으면 컴파일을 통해 컴파일 할 수 있습니다.
luis.espinal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.