IT

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

itgroup 2022. 10. 28. 20:43
반응형

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

와의 차이는 무엇입니까?static const그리고.const예:

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

그들 사이에 어떤 차이가 있나요?당신은 언제 하나를 다른 것 보다 먼저 사용하시겠습니까?

static함수 외부의 가시성 또는 변수 내부의 수명을 결정합니다.그러니까 이건 아무 상관도 없어요.const그 자체

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

static함수 내란 함수 실행 전후에 변수가 존재함을 의미합니다.

static기능 외부는 표시된 기호의 범위가static는 그 .c 파일로 한정되어 있어 파일 밖에서는 볼 수 없습니다.

엄밀히 말하면 (이것을 검색하려면)static스토리지 지정자 및const는 유형 한정자입니다.

차이점은 링크입니다.

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

이 경우,i오브젝트는 정의되어 있는 변환 유닛 외부에서는 사용되지 않습니다.오브젝트는 에서 선언해야 합니다.static지정자.

이것에 의해, 컴파일러는 한층 더 최적화를 실행할 수 있게 되어, 오브젝트가 변환 유닛 이외에서는 사용되지 않는 것을 독자에게 통지합니다.

이러한 정의가 함수의 내부에 있는지 여부에 따라 달라집니다.함수 이외의 경우에 대한 답은 위의 ouah에 나와 있습니다.함수 내에서는 다음 예에서 볼 수 있듯이 효과가 다릅니다.

#include <stdlib.h>

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

로컬 변수를 "진짜 상수"로 하려면 "정수"뿐만 아니라 "정적 상수"를 정의해야 합니다.

const int i=5;  

i포인터를 사용하여 변경할 수 있는 값i로컬로 정의 및 선언됩니다.static const int a=5;또는const int i=5;global :데이터 세그먼트의 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

반응형