정적 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
'program story' 카테고리의 다른 글
SQL Server : 일괄 처리 문 (즉, "GO"사용)이 좋은 이유는 무엇입니까? (0) | 2020.11.12 |
---|---|
채널의 요소 수 (0) | 2020.11.11 |
길이 1의 문자열로 반환되는 Java의 문자열에서 첫 번째 문자를 얻는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.11 |
GitHub 위키에서 어떤 종류의 목차를 어떻게 만듭니 까? (0) | 2020.11.11 |
Bootstrap 3에서 기둥을 쌓을 때 수직 공간 (0) | 2020.11.11 |