들여 쓰기 스타일에 대한 Wikipedia 기사를 읽었 지만 여전히 이해하지 못합니다. K & R과 1TBS의 차이점은 무엇입니까?
들여 쓰기 스타일에 대한 Wikipedia 기사를 읽었 지만 여전히 이해하지 못합니다. K & R과 1TBS의 차이점은 무엇입니까?
답변:
K & R은 다음과 같습니다 :
if (x)
a();
else {
b();
c();
}
즉, 중괄호는 필요한 경우에만 사용되며 제어문과 동일한 행에서 중괄호를 열고 자체 행에서 중괄호를 닫습니다.
"하나의 진정한 중괄호 스타일"(1TBS 또는 OTBS)은 단일 제어 명령문을 중괄호로 묶어 복합 명령문으로 바꿉니다.
if (x) {
a();
} else {
b();
c();
}
Allman 스타일은 1TBS보다 약간 더 넓으며 오프닝 브레이스를 한 줄에 배치하여 수직 간격을 강제합니다.
if (x)
{
a();
}
else
{
b();
c();
}
편집하다:
"데니스 리치 (Dennis Ritchie)는 훌륭한 언어를 발명했을뿐만 아니라 정말 좋은 괄호 스타일을 생각해 낸 매우 똑똑한 사람이었습니다."
어쨌든 오만하다고 주장하는 사람들에게는 약간의 도전이 있습니다 .Sourceforge, Github 등으로 가서 K & R 브레이스 스타일을 사용하여 프로젝트를 선택하십시오. 버그와 커밋에 대한 그들의 기록을 살펴 보고 그들이 사용한 브레이스 스타일로 인해 발생한 하나의 버그 를 찾으십시오 .
그렇게 많은 일을하고 싶지 않다면 간단한 통계 분석을 해보십시오. 다른 버팀대 스타일을 사용하여 프로젝트를 비교하고 브레이싱 스타일과 관련된 버그 수 (심각도 등)에서 통계적으로 유의 한 차이 인 "양식 성"을 표시 할 수 있는지 확인하십시오.
나는 몇 년 전에이 두 가지를 모두 수행했으며 브레이스 스타일에 기인 할 수있는 단일 버그를 찾을 수 없었으며 두 가지 사이의 통계적으로 중요한 상관 관계에 도달하는 것을 찾을 수 없었습니다. 평균적으로 K & R 브레이싱을 사용하는 사람들은 버그가 약간 적었지만 그 차이는 통계적으로 유의미 할 정도로 너무 작습니다.
그것이 제기 된 이후로, 나는 다중 진술 매크로로 상황에 대해 언급 할 것입니다. 여러 명령문을 포함하지만 중괄호 자체로 둘러싸 지 않는 매크로에는 버그가 있습니다. 내 임무는 그 버그를 다루는 코드를 작성 하지 않는 것입니다. 반대로, 제 임무는 그 버그를 가능한 빨리 찾아서 없애는 것입니다.
진단되지 않고 수정되지 않은 버그를 커버하기 위해 코드를 작성하는 것은 완전히 악한 일입니다. 당신이 원한다면 그 거만이라고 부르십시오. 그러나 나는 이것을 협상에 가까운 것으로 보지 않습니다. 버그는 발견하지 않고 수정해야합니다. 존재가 길수록 수정하기가 훨씬 어려워지고 비싸 질 가능성이 높습니다.
일반적으로 KR 브레이스 스타일의 문제점은 코드 리팩토링입니다. 코드를 움직일 때 무언가 주위에 괄호가 없다는 것을 놓치기 쉽고, 잘못 움직이거나 (조건부로 실행되었다고 생각하는 무언가를 움직이십시오) 더 이상 작동하지 않을 때 머리를 긁거나 불행히도 코드 영역이 제대로 테스트되지 않았고 검은 모자가 악용하는 방법을 찾을 때까지 버그가 눈에 띄지 않습니다. 디버거로의 빠른 여행은 문제를 발견하면 쉽게 찾을 수 있지만 그렇지 않은 경우에는 ...