귀하의 모든 질문은 귀하의 프로그램에서 "매직 넘버"의 개념과 "매직 넘버"사용에 대한 규칙은 완전히 완전히 바보입니다. 매직 넘버에 대한 규칙은 자신이하는 일을 이해하지 못하는 사람들, 동의해야하거나 서로 의존하는 여러 장소 값의 하드 코딩에 대한 훨씬 건전한 규칙에 대한 나쁜 접근입니다.예를 들어,이 코드는, 버퍼 길이가 프로그램이나 현실 세계에서 아무것도 일치 할 필요는 없습니다만큼 완벽하게 합리적이다 :
char buf[100];
snprintf(buf, sizeof buf, ...);
을하지만이 코드는 매우 나쁜 :
char buf[100];
snprintf(buf, 100, ...);
물론 현실 세계에서는 아마도 이입니다. 버퍼 크기를 일치시키려는 것입니다. 예를 들어 특정 크기의 정수를 인쇄하는 데 필요한 최대 자릿수입니다. 이 경우에, 당신은 같은 것을 할 수 있습니다 :
char buf[3*sizeof(int)+3];
snprintf(buf, sizeof buf, ...);
을 그리고 당신은 변수로 CHAR_BIT
을 고려한다면 당신은 CHAR_BIT
의 측면에서 공식 3을 대체 할 수 있습니다. 어쨌든 표현에 나타나는 상수는 "악마의 매직 넘버"가 아닙니다.
예제에서 배열의 차원이 다른 변수에 종속되어있는 경우 배열 정의 중 세 가지 모두 나쁜 습관입니다. 그러나 만약 당신이하고있는 일에 차원 4가 근본적이라면, 나는 그것을 잘못 본 것이 없습니다.
물론 코드 수명 기간 동안 당신이하는 일은 때로는 바뀔 수 있지만, 그게 바로 문서의 목적입니다. 코드는 어느 정도의 수정 없이는 미래에 가능한 목적 변경을 처리 할 수 없으며, 원래 목적과 계약이 무엇인지를 문서화하는 한, 코드의 일부를 찾는 누군가를 변경하는 것이 어렵지 않아야합니다 그것은 변화가 필요합니다.
나는 당신이 무슨 말을하고 있는지 전혀 모른다. –
여기에 질문이 뭐니? – AbiusX
나는 이것이 닫힐 가치가 있다고 생각하지 않지만, 나는 또한 질문의 질을별로 생각하지 않는다. 좋은 대답을하는 것은 너무 구체적이지 않습니다. – Omnifarious