program story

정적 const와 const의 차이점은 무엇입니까?

inputbox 2020. 11. 11. 20:02
반응형

정적 const와 const의 차이점은 무엇입니까?


static const의 차이점은 무엇입니까 const? 예를 들면 :

static const int a=5;
const int i=5;

그들 사이에 어떤 차이가 있습니까? 언제 다른 하나를 사용 하시겠습니까?


차이점은 연결입니다.

// At file scope
static const int a=5;  // internal linkage
const int i=5;         // external linkage

경우 i객체가 정의 된 변환 단위 외부에서 사용하지 않는, 당신은 그것을 선언해야 static지정.

이를 통해 컴파일러는 (잠재적으로) 추가 최적화를 수행하고 객체가 번역 단위 외부에서 사용되지 않음을 독자에게 알립니다.


static은 함수 외부의 가시성 또는 내부 변수 수명을 결정합니다. 따라서 그것은 const 그 자체와 관련이 없습니다.

const는 초기화 된 후에 값을 변경하지 않음을 의미합니다.

함수 내부의 정적은 함수가 종료되기 전과 후에 변수가 존재 함을 의미합니다.

함수 외부에서 static은 static으로 표시된 심볼의 범위가 해당 .c 파일로 제한되고 외부에서 볼 수 없음을 의미합니다.

기술적으로 (찾고 싶다면) static은 스토리지 지정자이고 const는 유형 한정자입니다.


이러한 정의가 함수 내부에 있는지 여부에 따라 다릅니다. 함수 밖의 경우에 대한 답은 위의 ouah에 의해 제공됩니다. 함수 내부 에서 효과는 다릅니다. 아래 예에서 볼 수 있습니다.

#include <stdlib.h>

void my_function() {
  const int foo = rand();         // Perfectly OK!
  static const int bar = rand();  // Compile time error.
}

지역 변수가 "정말 상수"가 되려면 "const"뿐만 아니라 "static const"를 정의해야합니다.


const int i = 5;
i가 정의되고 로컬로 선언 된 경우 포인터를 사용하여 수정할 수있는 i 값 const int a = 5; 또는 const int i = 5; 전역 적으로는 Data Segment의 RO 메모리에 저장되므로 수정할 수 없습니다.

    #include <stdio.h>
   //const int  a=10;              /* can not modify */
   int main(void) {
   // your code goes here

   //static const int const a=10;   /* can not modify */
   const int  a=10; 
   int *const ptr=&a;
   *ptr=18;
   printf("The val a is %d",a);
   return 0;
} 

참고 URL : https://stackoverflow.com/questions/13185751/what-is-the-difference-between-static-const-and-const

반응형