C에 정원이 있나요?
이 질문은 순진할 수 있지만,
- 있습니까?
const
【C】 - 어느 버전부터요?
- 및?
const
C++는?
++는 C++에 차이는 .const
외에 이후)에서는 함수 가 C(C99 이후)로 할 수 .
void foo(int a[const]);
와 동등하다.
void foo(int *const a);
선언.C++는 이러한 구문을 지원하지 않습니다.
의미적 차이도 존재한다. @한 바와 C @Ben Voigt에서는 C @Ben Voigt입니다.const
에서는 일정한. 에서는 c를 사용할. c는 a, c는 a를 사용할 수 없습니다.const int
case
비 VLA 어레이 선언에서는 비트필드 폭 또는 어레이 크기로 라벨이 표시됩니다(이 모든 것은 C++에서 가능합니다).ㅇㅇㅇㅇ.const
오브젝트에는 기본적으로 C에 외부 링크가 있습니다(C++의 내부 링크).
벤이 언급하지 않은 의미적 차이가 적어도 하나 더 있습니다.C++ 언어의 상수-수정성 규칙은 다음과 같은 표준 변환을 지원합니다.
int **pp = 0;
const int *const *cpp = pp; // OK in C++
int ***ppp = 0;
int *const *const *cppp = ppp; // OK in C++
이러한 초기화는 C에서 부정합니다.
int **pp = 0;
const int *const *cpp = pp; /* ERROR in C */
int ***ppp = 0;
int *const *const *cppp = ppp; /* ERROR in C */
일반적으로 멀티레벨 포인터를 취급할 때 C++는 const-qualification을 최상위 레벨까지 추가하는 한 어떤 간접 깊이에서도 const-qualification을 추가할 수 있다고 합니다.
C에서는 최상위 포인터가 가리키는 유형에만 const-qualification을 추가할 수 있으며 자세한 내용은 추가할 수 없습니다.
int **pp = 0;
int *const *cpp = pp; /* OK in C */
int ***ppp = 0;
int **const *cppp = ppp; /* OK in C */
동일한 기본 일반 원리의 또 다른 표현은 const-correctness 규칙이 C 및 C++의 배열과 함께 작동하는 방법입니다.C++에서는 다음을 수행할 수 있습니다.
int a[10];
const int (*p)[10] = &a; // OK in C++
C에서 동일한 작업을 시도하면 오류가 발생합니다.
int a[10];
const int (*p)[10] = &a; /* ERROR in C */
첫 번째 두 가지 질문에 대한 답변은 다음과 같습니다: Const in C
, , 그, 그, 그, 그, 그, 그, yes, yes, yes, yes, yes, yes, yes, yes, yes, yes, yes, yes, yes, between, between, between, between, , const
C++라고 하다.
에서는 C++입니다.
const
적절한 유형의 변수는 정수 표현식이며(이 변수의 이니셜라이저가 컴파일 시간 상수 표현인 경우), 배열 경계와 같이 필요한 컨텍스트 및 열거 정의에서 사용할 수 있습니다.C에서는 그렇지 않고 있을 수 없습니다.에서는 C++입니다.
const
으로 「」가 붙습니다.static
을 사용법C에서는 이러한 변수에는 외부 링크가 있으며 링크 시 중복 정의 오류가 발생합니다.
아, 아, 아, 아, 아, 게 있어요.const
키워드를 지정합니다.1989년
호환성에 관한 Harbison & Steel 제5판 패러그래프는 다음과 같습니다.
유형 한정자를 가진 최상위 선언const
그러나 명시적인 스토리지 클래스는 존재하지 않습니다.static
C++는extern
C. 호환성을 유지하려면 상위 수준을 검토하십시오.const
선언 및 명시적 스토리지 클래스를 제공합니다.C++는 C++입니다.const
카아아아아아아아
ㅇㅇ.const
ANSI C(C89)는 ANSI C입니다.
이것은, 「C프로그래밍 언어(2판), Kernighan & Ritchie」(1988년 출판)의 제 카피에도 분명히 기재되어 있습니다.
관련 발췌:
const
★★★★★★★★★★★★★★★★★」volatile
ANSI를 사용하다★★★의const
는 읽기 전용 메모리에 배치될 수 있는 오브젝트를 방송하는 것으로, 최적화 가능성을 높이는 것입니다.
다른 두 가지 차이점:
const arraytype
: (요약:typedef int A[1]; const A a = { 0 };
)는 C++에서는 일정한 배열 유형(http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#112 및 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1059 )을 지정합니다(및 그 요소도 한정되어 있습니다).단, C에서는 요소가 한정되어 있는 비표준 배열 유형을 지정합니다.const const
), 으로 「C99」(C89 「C++」(C++」)만을 할 수 ).const
을 사용법const
C99 c c c c c c
ㅇㅇ.const
C89 터 C c c c c c c c
다음은 C에서 const 키워드의 동작에 대한 좋은 읽기입니다.
C의 의미는 C++와 다릅니다.예를들면,
unsigned const a = 10;
unsigned A[a];
C++에서는 유효하지만 C에서는 유효하지 않습니다.
아, 아, 아, 아, 이런 게 const
키워드를 지정합니다.C90 ★★★★★★★★★★★★★★★★★★★」
구문론적으로는 C++와 같은 장소에서 발생할 수 있습니다.의미론적으로, IIRC는 좀 느슨합니다.
ESR에 따르면const
ANSI C 초안 제안 표준에 추가되었습니다.에릭 지그레가 1987년에 쓴 ANSI C의 요약은 그것을 확인시켜 준다.
이것은 초안 자체와 유사합니다. - "3.5.3 유형 한정자"를 검색합니다.
C에는 "const" 키워드가 있는데, 오랫동안 그래왔습니다.변수가 "상수"로 지정된 경우 변수에 대한 쓰기가 금지됩니다.
또한 일부 환경에서는 "상수"로 선언된 변수가 다른 변수와 다른 데이터 세그먼트에 있을 수 있습니다.이 데이터 세그먼트는 하드웨어 쓰기 보호를 제공할 수 있으며 임베디드 시스템의 경우 RAM이 아닌 ROM 또는 플래시 메모리에 저장할 수 있습니다(예를 들어 128KB 플래시와 3.5KB RAM, 2KB ROM과 96바이트 RAM 등 ROM 또는 플래시가 RAM보다 훨씬 많은 프로세서에서 매우 중요한 차이입니다).
컴파일러는 일반적으로 "정수" 값이나 값과 관련된 식에 대해 어떠한 추론도 하지 않습니다.const char foo [ ]= "Hello";"라고 말한 후 나중에 foo[1]를 참조하면 컴파일러는 foo[]가 저장되어 있는 모든 곳에서 값을 로드하고 로드된 값을 사용합니다.경우에 따라서는 컴파일된 코드 이미지에서 값을 패치할 수 있지만 코드만 낭비하는 경우도 있습니다.
숫자를 컴파일 시간 "대체 가능" 상수로 정의하려면 적어도 정수 상수의 경우 "enum"을 사용하는 것이 가장 좋습니다.예를 들어 "enum {wozle=19;}"은 코드 전체에서 "wozle" 대신 19가 대체됩니다.텍스트 치환과는 달리 열거 선언은 적절한 범위 규칙을 따릅니다.
언급URL : https://stackoverflow.com/questions/5248571/is-there-const-in-c
'programing' 카테고리의 다른 글
__getitem__ 메서드에 대해서 (0) | 2022.12.27 |
---|---|
자바 제네릭스의 &과 '의 차이점은 무엇입니까? (0) | 2022.12.27 |
mysql의 현재 날짜에서 30일을 빼려면 어떻게 해야 하나요? (0) | 2022.11.27 |
마리아에 잠긴 채로 건너뛸 수도 있습니다.DB (0) | 2022.11.27 |
Mysql에서 id를 사용하여 테이블에서 많은 행 삭제 (0) | 2022.11.27 |