무언가에 이름을 붙이면 신원이 만들어집니다. 정의
const double Moe = 2.0;
const double Joe = 2.0;
...
double Larry = Moe;
double Harry = Moe;
double Garry = Joe;
모에 조를위한 상징의 사용은 래리와 해리의 기본 값은 게리의 기본값은 아니라고 방식으로 서로 관련 제안을 감안할 때. 특정 상수에 대한 이름을 정의할지 여부는 해당 상수의 값에 의존해서는 안되며 코드에서 여러 위치에 동시에 나타나지 않을지 결정해야합니다. 하나의 특정 바이트 값이 리셋을 트리거하도록 보내도록 요구하는 원격 장치와 통신하는 경우, I 고려할 것이다 :
void ResetDevice()
{
// The 0xF9 command is described in the REMOTE_RESET section of the
// Frobnitz 9000 manual
transmitByte(0xF9);
}
... elsewhere
myDevice.ResetDevice();
...
otherDevice.ResetDevice();
는
// The 0xF9 command is described in the REMOTE_RESET section of the
// Frobnitz 9000 manual
const int FrobnitzResetCode = 0xF9;
... elsewhere
myDevice.transmitByte(FrobnitzResetCode);
...
otherDevice.transmitByte(FrobnitzResetCode);
받는 우수한 경우가 많다 것으로 값 0xF9는 Frobnitz 9000 장치 재설정 컨텍스트 외부에서 실제 의미가 없습니다. 외부 코드가 ResetDevice 메서드를 호출하는 것보다 필요한 값 자체를 보내야하는 이유가없는 한 해당 메서드 외부의 코드에 상수는 아무런 가치가 없어야합니다. 하나는 아마도 사용할 수 있지만
void ResetDevice()
{
// The 0xF9 command is described in the REMOTE_RESET section of the
// Frobnitz 9000 manual
int FrobnitzResetCode = 0xF9;
transmitByte(FrobnitzResetCode);
}
등이 있습니다. 좁은 의미의 문맥에 대한 이름을 정의하는 것은별로 중요하지 않습니다.
0과 1 같은 값에 대한 유일한 "특수"는 다른 정수보다 훨씬 자주 사용되는 것입니다. 사용 된 컨텍스트 외부에서 도메인 특정 ID가없는 경우 23. 하나는 첫 번째 매개 변수 (C에서 다소 공통) 추가 매개 변수의 수를 표시해야하는 기능이 말을하는 것이 좋습니다 사용하는 경우 :
output_multiple_strings(4, "Bob", Joe, Larry, "Fred"); // There are 4 arguments
...
output_multiple_strings(4, "George", Fred, "James", Lucy); // There are 4 arguments
보다 #DEFINE의 NUMBER_OF_STRINGS 4 4 개 인수
이 있습니다 //
output_multiple_strings(NUMBER_OF_STRINGS, "Bob", Joe, Larry, "Fred");
...
output_multiple_strings(NUMBER_OF_STRINGS, "George", Fred, "James", Lucy);
첫 번째 메서드에 전달 된 값과 해당 메서드 호출의 다른 값 사이에 존재하는 것보다 첫 번째 메서드에 전달 된 값과 두 번째 메서드에 전달 된 값 사이의 연결이 더 강력하다는 의미입니다. 무엇보다도 5 개의 인수를 전달하기 위해 호출 중 하나를 변경해야하는 경우 두 번째 코드 샘플에서이를 허용하기 위해 변경해야 할 것이 명확하지 않습니다. 대조적으로, 이전 샘플에서 상수 "4"는 "5"로 변경되어야합니다.
"보유"하지 않았습니다. 그것은 스타일입니다. –
그러나 앞으로 코드를 관리하는 사람들은 매직 넘버를 상수로 입력 해 주셔서 감사 드리며, 따라서 그들이 의미하는 바를 추측 할 필요가 없습니다. – DVG
상수는 특정 의미 *로 한 번만 사용되며 사용 된 컨텍스트 외부에서는 의미가 없기 때문에 이름을 정의하는 것보다 주석을 포함하는 것이 더 좋습니다. 동일한 숫자 값이 여러 번 사용되었지만 * 다른 * 의미가있는 경우 여러 의미에 동일한 이름을 사용하면 원시 숫자 상수를 사용하는 것보다 나쁩니다. – supercat