code

프로그래밍에서 상수를 사용하는 이유는 무엇입니까?

starcafe 2023. 7. 27. 22:10
반응형

프로그래밍에서 상수를 사용하는 이유는 무엇입니까?

저는 아이보 호튼의 비기닝 C 책을 사용하여 C 공부를 조금 돌아보고 있습니다.저는 같은 문장에서 변수와 섞이는 것처럼 보이는 상수를 선언하는 것에 대한 부분에 도달했습니다.

C에서 상수와 변수를 지정하는 것의 차이점은 무엇이며, 실제로 언제 변수 대신 상수를 사용해야 합니까?프로그램 실행 중에 정보가 변경되지 않을 때 상수를 사용하라고 하는 것은 알지만 변수를 대신 사용할 수 없었던 때는 생각할 수 없습니다.

이름에서 알 수 있듯이 변수는 시간이 지남에 따라 달라집니다.변동이 없으면 "손실 없음"입니다.컴파일러에게 값이 변경되지 않을 것이라고 말하면 컴파일러는 값을 직접 인라인화하고 스택에서 상수에 대한 공간을 할당하지 않는 등 여러 가지 최적화를 수행할 수 있습니다.

그러나 컴파일러가 한 번 설정하면 값이 변경되는지 여부를 올바르게 판단할 수 있을 정도로 똑똑하다고 항상 기대할 수는 없습니다.컴파일러가 100% 신뢰할 수 없는 상황에서 컴파일러는 안전 측면에서 오류를 범하고 변경될 수 있다고 가정합니다.이로 인해 인라인을 피하고 특정 루프를 최적화하지 않으며 병렬 처리에 적합하지 않은 객체 코드를 생성하는 등 다양한 성능 영향을 초래할 수 있습니다.

따라서 가독성도 중요하기 때문에 가능한 한 명시적 상수를 사용하고 실제로 변화할 수 있는 변수를 남겨두어야 합니다.

리터럴 숫자 대신 상수를 사용하는 이유:

그것은 코드를 더 읽기 쉽게 만듭니다.(바라건대) 모든 사람이 3.14가 무엇인지 알고 있지만, 모든 사람이 3.07이 PA의 소득세율이라는 것을 알고 있는 것은 아닙니다.이는 도메인별 지식의 예이며, 향후 코드(예: 세금 소프트웨어)를 유지 관리하는 모든 사람이 이를 알지는 못합니다.

변경 시 작업을 절약할 수 있습니다.앞으로 세율이 바뀌면 3.07에서 3.18로 매번 가고 변경하는 것은 성가신 일이 될 것입니다.항상 변경을 최소화하고 단일 변경을 수행하는 것이 이상적입니다.동시에 더 많은 변경을 수행할수록 무언가를 잊어버릴 위험이 높아지며 오류가 발생할 수 있습니다.

위험한 오류를 방지할 수 있습니다.소득세율이 3.05인 두 개의 주가 있었는데, 그 중 하나는 3.18로 바뀌고 다른 하나는 3.07로 유지된다고 상상해 보세요.그냥 가서 교체하면 심각한 오류가 발생할 수 있습니다.물론 많은 정수 또는 문자열 상수 값이 "3.07"보다 더 일반적입니다.예를 들어, 숫자 7은 한 주의 일 수와 다른 것을 나타낼 수 있습니다.큰 프로그램에서 각 문자 값이 의미하는 바를 결정하는 것은 매우 어렵습니다.

문자열 텍스트의 경우 여러 언어를 지원하는 경우 문자열 풀을 빠르게 변경할 수 있도록 문자열에 대한 기호 이름을 사용하는 것이 일반적입니다.

변수 및 "상수 변수" 외에도 열거형이 있는 일부 언어도 있습니다.실제로 열거형을 사용하면 작은 상수 그룹(예: 반환 값)에 대한 유형을 정의할 수 있으므로 이를 사용하면 유형 안전을 제공할 수 있습니다.

예를 들어 요일과 월에 대한 열거가 있는 경우 한 달을 하루로 지정하면 경고가 표시됩니다.정수 상수만 사용하면 3일째가 3개월째에 할당될 때 경고가 표시되지 않습니다.항상 유형 안전을 원하는 경우 가독성이 향상됩니다.열거형은 순서를 정의하는 데도 유용합니다.요일에 대한 상수가 있고 이제 한 주가 일요일이 아닌 월요일에 시작하기를 원한다고 상상해 보십시오.

상수를 사용하는 것은 새벽 2시에 코딩을 할 때나 커피를 마시기 전에 코드의 어딘가에서 실수로 값이 변경되는 것을 방지하기 위한 방어적 프로그래밍의 한 방법입니다.

기술적으로는 변수를 대신 사용할 수 있습니다.

상수에는 변수에 비해 몇 가지 이점이 있습니다.

상수는 코드가 기본 값을 변경할 수 없다는 보장 수준을 제공합니다.이는 소규모 프로젝트에서는 그다지 중요하지 않지만 여러 명의 작성자가 작성한 여러 구성요소가 있는 대규모 프로젝트에서는 중요합니다.

상수는 또한 최적화를 위해 컴파일러에 강력한 힌트를 제공합니다.컴파일러는 값이 변경될 수 없다는 것을 알기 때문에 메모리에서 값을 로드할 필요가 없으며 상수의 정확한 값에 대해서만 작동하도록 코드를 최적화할 수 있습니다(예를 들어, 컴파일러는 const가 2의 거듭제곱인 경우에 곱셈/나눗셈을 위해 시프트를 사용할 수 있습니다).

상수는 또한 본질적으로 정적입니다. 헤더 파일에서 상수와 해당 값을 선언할 수 있으며 정확히 한 위치를 정의할 필요가 없습니다.

첫째, 성능 최적화입니다.

더 중요한 것은, 이것은 인간 독자들을 위한 것입니다.대상 사용자는 컴파일러뿐만이 아닙니다.코드로 자신을 표현하고 코멘트를 피하는 데 도움이 됩니다.

const int spaceTimeDimensions = 4;

if(gpsSattelitesAvailable >= spaceTimeDimensions)
  Good();

C와 같은 낮은 수준의 언어의 경우 상수를 사용하여 여러 컴파일 최적화를 수행할 수 있습니다.

일반적으로 프로그래밍 언어의 경우에는 실제로 필요하지 않습니다.Ruby 및 JavaScript와 같은 고급 동적 언어에는 해당 언어가 없습니다(또는 적어도 진정한 상수 의미에서는 해당되지 않습니다).제안한 대로 변수가 대신 사용됩니다.

상수는 여러분이 단지 기억을 공유하고 싶을 때이고, 그것은 변하지 않습니다.

const키워드는 종종 함수 매개 변수, 특히 포인터에 사용되어 포인터가 가리키는 메모리가 함수에 의해 수정되지 않음을 나타냅니다.다음에 대한 선언문을 보십시오.strcpy예를 들어:

char *strcpy(char *dest, const char *src);

그렇지 않은 경우, 예를 들어 다음과 같은 선언이 있습니다.

const int my_magic_no = 54321;

다음보다 선호할 수 있습니다.

#define MY_MAGIC_NO 54321

형식 안전상의 이유로.

이것은 특정 종류의 오류를 함정에 빠뜨릴 수 있는 정말 쉬운 방법입니다.변수를 선언하는 경우const실수로 수정하려고 하면 컴파일러가 호출할 것입니다.

루프 시작 시, if-else 문 내의 조건을 확인하기 위해 등의 목적으로 변수의 선언 및 초기화와 관련하여 상수가 매우 필요합니다.

자세한 내용은 다음 기사 중 하나를 참조하십시오.

const를 사용하지 않는 것은 팀 프로젝트의 누군가가 위치를 선언할 수 있다는 것을 의미할 수 있습니다.int FORTY_TWO = 42그리고 그것을 동등하게 하라.FORTY_TWO = 41다른 팀원에 의해 다른 곳으로.그러므로 세상의 종말이 일어나고 당신은 또한 삶에 대한 답을 느슨하게 합니다.const이런 일은 절대 일어나지 않을 것입니다.플러스const는 일반 변수의 저장과 비교하여 메모리의 다른 곳에 저장되며 더 효율적입니다.

언급URL : https://stackoverflow.com/questions/2953601/why-use-constants-in-programming

반응형