C 데이터형
C data typesC 표준 라이브러리(libc) |
---|
일반적인 토픽 |
기타 헤더 |
C 프로그래밍 언어에서 데이터 유형은 데이터 요소의 저장 의미 및 특성을 구성합니다.메모리 위치 또는 변수에 대한 선언 형식으로 언어 구문에서 표현됩니다.데이터 유형은 또한 데이터 요소의 처리 방법이나 작업 유형도 결정합니다.
C 언어는 정수 및 실수 유형과 같은 기본 산술 유형과 배열 및 복합 유형을 구축하기 위한 구문을 제공합니다.C 표준 라이브러리의 헤더에는 특정 하드웨어 플랫폼에서의 [1][2]언어 구현과는 무관하게 정확한 크기의 스토리지를 제공하는 등 추가 속성을 가진 지원 유형의 정의가 포함됩니다.
기본형
주요 유형
C 언어에는 char, int, float 및 double의 4가지 기본 산술 유형 지정자와 부호 없음, 짧은 수식자가 있습니다.다음 표에는 스토리지 크기별 선언의 대규모 집합을 지정할 때 허용되는 조합이 나와 있습니다.
유형 | 설명. | 최소 크기(비트) | 형식 지정자 | 범위 | 소수 상수의 접미사 |
---|---|---|---|---|---|
char | 기본 문자 집합을 포함할 수 있는 기계의 최소 주소 지정 단위입니다.정수형입니다.실제 유형은 서명된 형식 또는 서명되지 않은 형식 중 하나입니다.CHAR_B가 포함되어 있습니다.IT [3]비트가 있습니다. | 8 | %c | CHAR_MIN /CHAR_MAX | 없음 |
signed char | char와 같은 크기이지만 서명된 것은 확실합니다.적어도 [-127, +127][3][a] 범위를 포함할 수 있습니다. | 8 | %c (또는%hhi 수치 출력의 경우) | SCHAR_MIN /SCHAR_MAX [5] | 없음 |
unsigned char | char와 같은 크기이지만 부호는 없습니다.적어도 [0, 255] [6]범위를 포함합니다. | 8 | %c (또는%hhu 수치 출력의 경우) | 0 /UCHAR_MAX | 없음 |
short short int signed short signed short int | 짧은 부호 정수 형식입니다.적어도 [-32,767, +32,767][3][a] 범위를 포함할 수 있습니다. | 16 | %hi 또는%hd | SHRT_MIN /SHRT_MAX | 없음 |
unsigned short unsigned short int | 부호 없는 짧은 정수 형식입니다.[[3]0, 65,535] 이상의 범위를 포함합니다. | 16 | %hu | 0 /USHRT_MAX | 없음 |
int signed signed int | 기본 부호 정수 유형입니다.적어도 [-32,767, +32,767][3][a] 범위를 포함할 수 있습니다. | 16 | %i 또는%d | INT_MIN /INT_MAX | 없음[7] |
unsigned unsigned int | 기본 부호 없는 정수 형식입니다.[[3]0, 65,535] 이상의 범위를 포함합니다. | 16 | %u | 0 /UINT_MAX | u 또는U [7] |
long long int signed long signed long int | 긴 부호 정수 형식입니다.적어도 [-2,147,483,647,+2,147,483,647][3][a] 범위를 포함할 수 있습니다. | 32 | %li 또는%ld | LONG_MIN /LONG_MAX | l 또는L [7] |
unsigned long unsigned long int | 부호 없는 긴 정수 형식입니다.적어도 [0, 4,294,967,295][3]범위를 포함할 수 있습니다. | 32 | %lu | 0 /ULONG_MAX | 둘다요.u 또는U 그리고.l 또는L [7] |
long long long long int signed long long signed long long int | 긴 부호 정수 형식입니다.적어도 [-9,223,372,036,854,775,807,+9,223,372,036,854,775,807][3][a] 범위를 포함할 수 있습니다.표준의 C99 버전 이후 지정됩니다. | 64 | %lli 또는%lld | LLONG_MIN /LLONG_MAX | ll 또는LL [7] |
unsigned long long unsigned long long int | 긴 부호 없는 정수 형식입니다.적어도 [0, 18,446,744,073,709,551,615][3] 범위를 포함합니다.표준의 C99 버전 이후 지정됩니다. | 64 | %llu | 0 /ULLONG_MAX | 둘다요.u 또는U 그리고.ll 또는LL [7] |
float | 실제 부동소수점 타입.보통 단정도 부동소수점 타입이라고 불립니다.지정되지 않은 실제 속성(최소 제한 제외). 단, 대부분의 시스템에서는 IEEE 754 단정도 바이너리 부동소수점 형식(32비트)입니다.이 형식은 옵션 부록 F "IEC 60559 부동 소수점 산술"에서 필요합니다. | 텍스트에서 [b]변환:
| f 또는F | ||
double | 실제 부동소수점 유형.보통 배정도 부동소수점 유형이라고 불립니다.지정되지 않은 실제 속성(최소 제한 제외). 단, 대부분의 시스템에서는 IEEE 754 배 정밀도의 바이너리 부동 소수점 형식(64비트)입니다.이 형식은 옵션 부록 F "IEC 60559 부동 소수점 산술"에서 필요합니다. |
| |||
long double | 실제 부동소수점 유형.일반적으로 확장 정밀도 부동소수점 숫자 형식으로 매핑됩니다.실제 속성이 지정되지 않았습니다.x86 확장 정밀도 부동소수점 형식(80비트, 그러나 일반적으로 패딩 바이트가 있는 메모리에서는 96비트 또는 128비트), 비 IEEE "더블 더블"(128비트), IEEE 754 4배 정밀도 부동소수점 형식(128비트) 중 하나 또는 두 배와 같은 형식입니다.상세한 것에 대하여는, 긴 더블의 기사를 참조해 주세요. | %Lf %LF %Lg %LG %Le %LE %La %LA [c] | l 또는L |
- ^ a b c d e 최소 범위 -(2-1n−1) ~ 2-1n−1(예: [-127,127])은 표준에서 허용하는 다양한 정수 표현(보, 부호 크기, 2보)[4]에서 나온다.단, 대부분의 플랫폼에서는 2개의 보어를 사용합니다.이는 이러한 구현에 대해 mµn을 포함한 -2m−1 ~ 2-1m−1 형식의 범위를 의미합니다.예를 들어 [-128,127] (
SCHAR_MIN
= -128 및SCHAR_MAX
= 127) 8비트 부호 문자일 경우. - ^ 이러한 형식 문자열은 텍스트 형식에도 존재하지만 이중으로 작동합니다.
- ^ a b 대문자와 소문자가 출력에서 다릅니다.대문자 지정자는 대문자로, 소문자는 소문자로 표시됩니다(%A, %E, %F, %G는 INF, NAN 및 E(exponent)와 같은 값을 대문자로 생성합니다).
정수 유형의 실제 크기는 구현에 따라 다릅니다.표준에서는 데이터 유형과 각 데이터 유형의 최소 크기 사이의 크기 관계만 요구합니다.
관련 요건은 다음과 같습니다.long long
보다 작지 않다long
, 이것은 보다 작지 않다.int
, 이것은 보다 작지 않다.short
.~하듯이char
의 사이즈는 항상 지원되는 최소 데이터 유형입니다.다른 데이터 유형(비트 필드 제외)은 작을 수 없습니다.
최소 크기char
8비트(최소 사이즈)short
그리고.int
16비트,long
32비트이고long long
에는 최소 64비트가 포함되어야 합니다.
종류int
타겟 프로세서가 가장 효율적으로 동작하는 정수 타입이어야 합니다.예를 들어 모든 유형이 64비트일 수 있습니다.그러나 몇 가지 다른 정수 폭 구성표(데이터 모델)가 사용됩니다.데이터 모델은 서로 다른 프로그램이 통신하는 방법을 정의하기 때문에 주어진 운영 체제 애플리케이션 인터페이스 내에서 [8]통일된 데이터 모델이 사용됩니다.
실제로,char
보통 8비트의 사이즈와short
의 사이즈는 보통 16비트입니다(부호 없는 것과 같음).이는 1990년대 SunOS 4 Unix, Microsoft MS-DOS, 최신 Linux 및 내장형 8비트 PIC 마이크로 컨트롤러용 마이크로칩 MCC18과 같은 다양한 플랫폼에 적용됩니다.POSIX에 필요한 것은char
크기가 정확히 [9][10]8비트여야 합니다.
C표준에 다양한 규칙 회사.unsigned char
기본 형식 배열 임의의non-bit-field 개체를 저장하는 데 적합한:패딩 비트와 트랩, 개체 representation,[6]의 정의와 컴퓨터 그래픽의 가능성의 부족이다.[11]
부동소수점 유형의 실제 크기와 동작은 구현에 따라 다릅니다.유일한 요구는 이다.long double
보다 작지 않다double
, 이것은 보다 작지 않다.float
보통 32비트 및 64비트 IEEE 754 바이너리 부동소수점 형식은float
그리고.double
각각 다음과 같다.
C99 규격에는 새로운 실제 부동소수점 유형이 포함되어 있습니다.float_t
그리고.double_t
, 로 정의되어 있습니다.<math.h>
다음 경우 부동소수점 표현의 중간 결과에 사용되는 유형에 해당합니다.FLT_EVAL_METHOD
0, 1, 또는 2 입니다.이러한 유형은 다음보다 넓을 수 있습니다.long double
.
C99는 다음과 같은 복잡한 유형도 추가하였다.float _Complex
,double _Complex
,long double _Complex
.
부울형
C99에 부울(true/false) 유형이 추가되었습니다._Bool
. 또한,<stdbool.h>
header 정의bool
이 타입의 편리한 에일리어스로서도, 매크로를 제공합니다.true
그리고.false
._Bool
일반 정수 유형과 동일하게 기능하지만, 한 가지 예외: 에 대한 할당_Bool
0(false)이 아닌 값은 1(true)로 저장됩니다.이 동작은 암묵적인 압축 변환에서 정수 오버플로를 방지하기 위해 존재합니다.예를 들어, 다음과 같은 코드입니다.
서명되어 있지 않다 차 b = 256; 한다면 (b) { /* 어떻게 좀 해봐 */ }
변수b
이 경우 false로 평가됩니다.unsigned char
의 사이즈는 8비트입니다.이는 값 256이 데이터 유형에 맞지 않기 때문에 하위 8비트가 사용되고 값이 0이 되기 때문입니다.그러나 유형을 변경하면 이전 코드가 정상적으로 동작합니다.
부울 b = 256; 한다면 (b) { /* 어떻게 좀 해봐 */ }
_Bool 유형은 또한 참 값을 항상 서로 비교합니다.
부울 a = 1, b = 2; 한다면 (a == b) { /* 이 코드는 */ 실행됩니다. }
크기 및 포인터 차이 유형
C 언어 사양에는 typedef가 포함되어 있습니다.size_t
그리고.ptrdiff_t
메모리 관련 양을 나타냅니다.사이즈는, 사용 가능한 주소 공간등의 메모리 용량이 아니고, 타겟 프로세서의 산술 기능에 의해서 정의됩니다.이들 유형은 모두 에서 정의되어 있습니다.<stddef.h>
헤더 (cstddef
C++)로 설정합니다.
size_t
는, 특정의 실장내의 임의의 오브젝트(배열을 포함한다)의 사이즈를 나타내기 위해서 사용되는 부호 없는 정수 타입입니다.연산자 크기는 유형의 값을 산출합니다.size_t
. 의 최대 크기size_t
를 통해 제공됩니다.SIZE_MAX
에 정의되어 있는 매크로 상수<stdint.h>
헤더 (cstdint
헤더(C++)를 지정합니다. size_t
최소 16비트 폭을 보장합니다.또한 POSIX에는 다음이 포함됩니다.ssize_t
이것은 와 같은 너비의 부호 있는 정수형입니다.size_t
.
ptrdiff_t
는 포인터 간의 차이를 나타내기 위해 사용되는 부호 있는 정수형입니다.이것은 같은 타입의 포인터에 대해서만 유효함을 보증합니다.다른 타입으로 구성된 포인터의 감산은 구현 정의됩니다.
기본 유형의 속성에 대한 인터페이스
기본 산술 유형의 크기와 같은 실제 속성에 대한 정보는 두 개의 헤더에 있는 매크로 상수를 통해 제공됩니다.<limits.h>
헤더 (climits
C++)의 header는 정수형 매크로를 정의하고 있습니다.<float.h>
헤더 (cfloat
header in C++)는 부동소수점 유형의 매크로를 정의합니다.실제 값은 구현에 따라 달라집니다.
정수형 속성
CHAR_BIT
– 비트 단위의 문자 유형 크기(8비트 이상)SCHAR_MIN
,SHRT_MIN
,INT_MIN
,LONG_MIN
,LLONG_MIN
(C99) – 부호 있는 정수 유형의 최소 가능한 값: 부호 있는 문자, 부호 있는 쇼트, 부호 있는 int, 부호 있는 롱, 부호 있는 롱SCHAR_MAX
,SHRT_MAX
,INT_MAX
,LONG_MAX
,LLONG_MAX
(C99) – 부호 있는 정수 타입의 가능한 최대값: 부호 있는 문자, 부호 있는 쇼트, 부호 있는 int, 부호 있는 롱, 부호 있는 롱UCHAR_MAX
,USHRT_MAX
,UINT_MAX
,ULONG_MAX
,ULLONG_MAX
(C99) – 부호 없는 정수 유형의 가능한 최대값: 부호 없는 문자, 부호 없는 쇼트, 부호 없는 int, 부호 없는 롱, 부호 없는 롱CHAR_MIN
– 가능한 최소 문자 값CHAR_MAX
– 문자 최대값MB_LEN_MAX
– 멀티바이트 문자의 최대 바이트 수
부동 소수점 유형의 속성
FLT_MIN
,DBL_MIN
,LDBL_MIN
– 플로트의 최소 정규화 양의 값, 2배, 긴 2배FLT_TRUE_MIN
,DBL_TRUE_MIN
,LDBL_TRUE_MIN
(C11) – 플로트의 최소 양수 값, 각각 이중, 긴 이중FLT_MAX
,DBL_MAX
,LDBL_MAX
– 플로트의 최대 유한값, 각각 더블, 롱 더블FLT_ROUNDS
– 부동소수점 연산을 위한 반올림 모드FLT_EVAL_METHOD
(C99) – 다른 부동 소수점 유형을 포함하는 표현의 평가 방법FLT_RADIX
– 부동소수점 유형의 지수 기수FLT_DIG
,DBL_DIG
,LDBL_DIG
– 부동으로 정밀도를 잃지 않고 표시할 수 있는 소수 자릿수, 두 배, 긴 배FLT_EPSILON
,DBL_EPSILON
,LDBL_EPSILON
– 1.0과 다음으로 나타낼 수 있는 부동값의 차이(각각 2배, 긴 2배)FLT_MANT_DIG
,DBL_MANT_DIG
,LDBL_MANT_DIG
– 수FLT_RADIX
부동소수점 유효 및 부동소수점 부동의 경우 각각 2배, 긴 2배FLT_MIN_EXP
,DBL_MIN_EXP
,LDBL_MIN_EXP
– 다음과 같은 최소 음의 정수FLT_RADIX
그 수보다 한 수 적은 곱은 정규화된 플로트, 각각 더블, 롱 더블이다.FLT_MIN_10_EXP
,DBL_MIN_10_EXP
,LDBL_MIN_10_EXP
– 그 곱으로 상승한 10이 정규화된 플로트(double, long double)가 되도록 최소 음의 정수FLT_MAX_EXP
,DBL_MAX_EXP
,LDBL_MAX_EXP
– 다음과 같은 최대 양의 정수FLT_RADIX
그 수보다 한 수 적은 곱은 정규화된 플로트, 각각 더블, 롱 더블이다.FLT_MAX_10_EXP
,DBL_MAX_10_EXP
,LDBL_MAX_10_EXP
– 그 곱으로 상승한 10이 정규화된 플로트(double, long double)가 되는 최대 양의 정수DECIMAL_DIG
(C99) – 지원되는 가장 넓은 부동 소수점 타입의 임의의 숫자를 다음의 정밀도로 10진수로 나타낼 수 있는 최소 소수점 수DECIMAL_DIG
값을 변경하지 않고 원래 부동소수점 유형으로 읽습니다.DECIMAL_DIG
최소 10입니다.
고정폭 정수형
C99 규격에는 프로그램의 [2]이식성을 높이기 위해 몇 가지 새로운 정수 유형의 정의가 포함되어 있습니다.이미 사용 가능한 기본 정수 유형은 실제 크기가 구현 정의되어 시스템에 따라 다를 수 있기 때문에 불충분하다고 판단되었습니다.이 새로운 유형은 하드웨어가 일반적으로 여러 유형만 지원하며 환경마다 지원이 다른 임베디드 환경에서 특히 유용합니다.모든 새로운 유형은 에서 정의됩니다.<inttypes.h>
헤더 (cinttypes
헤더(C++)는, 다음의 URL 로도 입수할 수 있습니다.<stdint.h>
헤더 (cstdint
헤더(C++)를 지정합니다.유형은 다음 범주로 그룹화할 수 있습니다.
- 모든 구현에서 동일한 수의 n비트를 갖는 것이 보증되는 정확한 폭의 정수형.구현에서 사용할 수 있는 경우에만 포함됩니다.
- 구현에서 사용 가능한 최소 유형으로 보증되는 최소 너비 정수 유형. n비트 이상의 수가 지정됩니다.적어도 N=8,16,32,64에 대해 지정해야 합니다.
- 구현에서 사용 가능한 정수 유형 중 최소 n비트 수를 가진 가장 빠른 정수 유형임을 보증하는 가장 빠른 정수 유형.적어도 N=8,16,32,64에 대해 지정해야 합니다.
- 포인터를 유지할 수 있는 것이 보증되는 포인터 정수형.구현에서 사용할 수 있는 경우에만 포함됩니다.
- 구현에서 가장 큰 정수형이 보장되는 최대 폭 정수형.
다음 표에 구현 상세(n은 비트수를 나타냄)를 취득하기 위한 유형 및 인터페이스의 개요를 나타냅니다.
유형 카테고리 | 서명된 유형 | 서명되지 않은 유형 | ||||
---|---|---|---|---|---|---|
유형 | 최소값 | 최대값 | 유형 | 최소값 | 최대값 | |
정확한 폭 | intn_t | INTn_MIN | INTn_MAX | uintn_t | 0 | UINTn_MAX |
최소 폭 | int_leastn_t | INT_LEASTn_MIN | INT_LEASTn_MAX | uint_leastn_t | 0 | UINT_LEASTn_MAX |
가장 빠른 | int_fastn_t | INT_FASTn_MIN | INT_FASTn_MAX | uint_fastn_t | 0 | UINT_FASTn_MAX |
포인터 | intptr_t | INTPTR_MIN | INTPTR_MAX | uintptr_t | 0 | UINTPTR_MAX |
최대 폭 | intmax_t | INTMAX_MIN | INTMAX_MAX | uintmax_t | 0 | UINTMAX_MAX |
Printf 및 scanf 형식 지정자
그<inttypes.h>
헤더 (cinttypes
C++)에서는, 에 정의되어 있는 타입의 기능을 확장하기 위한 기능을 제공합니다.<stdint.h>
header를 클릭합니다.printf 형식 문자열 및 scanf 형식 문자열 지정자에 대한 매크로를 정의합니다.<stdint.h>
및 를 사용하기 위한 몇 가지 기능intmax_t
그리고.uintmax_t
타입. 이 헤더는 C99에서 추가되었습니다.
- Printf 형식 문자열
매크로는 다음 형식입니다.PRI{fmt}{type}
여기서 {fmt}는 출력 포맷을 정의하며 다음 중 하나입니다.d
(표준),x
(소수),o
(8진수),u
(설계 완료) 및i
( ( ( ) 。{type}은(는) 인수 유형을 정의하며 다음 중 하나입니다.n
,FASTn
,LEASTn
,PTR
,MAX
,어디에n
는 인수의 비트 수에 대응합니다.
- Scanf 형식 문자열
매크로는 다음 형식입니다.SCN{fmt}{type}
여기서 {fmt}는 출력 포맷을 정의하며 다음 중 하나입니다.d
(표준),x
(소수),o
(8진수),u
(설계 완료) 및i
( ( ( ) 。{type}은(는) 인수 유형을 정의하며 다음 중 하나입니다.n
,FASTn
,LEASTn
,PTR
,MAX
,어디에n
는 인수의 비트 수에 대응합니다.
- 기능들
![]() |
추가 부동 소수점 유형
고정폭 정수형과 마찬가지로 ISO/IEC TS 18661은 IEEE 754 교환용 부동소수점 유형과 확장 형식을 바이너리 및 10진수로 지정합니다.
_FloatN
바이너리 인터체인지 포맷의 경우_DecimalN
10진수 교환 형식의 경우_FloatNx
바이너리 확장 포맷의 경우_DecimalNx
10진수 확장 포맷의 경우.
구조물들
구조는 잠재적으로 서로 다른 데이터 유형의 여러 데이터 항목의 스토리지를 단일 변수에 의해 참조되는 하나의 메모리 블록으로 집계합니다.다음 예제에서는 데이터 유형을 선언합니다.struct birthday
이름과 생일이 적혀 있습니다.구조 정의 뒤에 변수 선언이 이어집니다.John
필요한 스토리지를 할당합니다.
구조 생일 { 차 이름.[20]; 인트 하루; 인트 달; 인트 연도; }; 구조 생일 존.;
구조의 메모리 레이아웃은 각 플랫폼의 언어 구현 문제이며 몇 가지 제한이 있습니다.첫 번째 멤버의 메모리 주소는 구조 자체의 주소와 같아야 합니다.구조를 초기화하거나 복합 리터럴을 사용하여 할당할 수 있습니다.런타임에는 효율적이지 않은 경우가 많지만 함수는 직접 구조물을 반환할 수 있습니다.C99 이후, 구조는 플렉시블 어레이 부재로 끝날 수도 있습니다.
자체 유형의 구조에 대한 포인터를 포함하는 구조는 링크된 데이터 구조를 구축하는 데 일반적으로 사용됩니다.
구조 노드 { 인트 값; 구조 노드 *다음 분.; };
어레이
모든 타입에 대해서T
void 및 기능 유형을 제외하고 "type of elements" 유형이 있습니다.배열은 메모리에 연속적으로 저장되는 모든 동일한 유형의 값 집합입니다.사이즈의 배열N
로부터의 정수에 의해 색인화된다.0
포함까지N−1
다음은 간단한 예입니다.
인트 고양이[10]; // 10개의 요소로 구성된 배열(각 유형 int)
복합 이니셜라이저를 사용하여 어레이를 초기화할 수 있지만 할당할 수는 없습니다.어레이는 첫 번째 요소에 포인터를 전달함으로써 기능에 전달됩니다.다차원 어레이는 "어레이 어레이 …"로 정의되며, 가장 바깥쪽 치수를 제외한 모든 어레이는 컴파일 시 일정한 크기를 가져야 합니다.
인트 a[10][8]; // 10개의 요소로 구성된 배열, 각각 '8개의 int 요소 배열' 유형
포인터
모든 데이터 유형T
에는 에 대응하는 타입 포인터가 있습니다.포인터는 특정 유형의 변수의 저장 위치 주소를 포함하는 데이터 유형입니다.아스타리스크( )로 선언됩니다.*
기본 스토리지 유형 뒤에 변수 이름 앞에 declarator를 입력합니다.화이트 스페이스가 별표는 선택적이다 전에.
차 *광장; 긴 *원형; 인트 *타원형;
Pointers 또한 포인터 데이터 형식에, 따라서 캐릭터**, int 그래요 같은 배열 형식으로 포인터를 포함하여 여러가지 간접 포인터, 만들기 선언될 수 있다.후자는 덜 포인터의 배열보다, 그리고 그들의 구문 혼동을 일으킬 수 있습니다. 흔하다.
차 *PC[10]; // '문자 변환'의 10개 요소 배열 차 (*파)[10]; // 10자리 문자 배열 포인터
요소pc
(일반 플랫폼에서는 보통 40바이트 또는 80바이트)에 대한 포인터 크기의 메모리 블록이 10개 필요합니다만,pa
는 1개의 포인터(4바이트 또는8바이트)에 불과하며, 이 포인터가 참조하는 데이터는 10바이트의 배열(sizeof *pa == 10
).
유니언
유니언 타입은 다른 타입의 설명을 사용하여 같은 메모리블록에 액세스 할 수 있도록 하는 특수한 구조입니다.예를 들어, 동일한 데이터를 정수, 부동 또는 기타 사용자가 선언한 유형으로 읽을 수 있도록 데이터 유형의 조합을 선언할 수 있습니다.
조합 { 인트 i; 흘러가다 f; 구조 { 서명되어 있지 않다 인트 u; 이중으로 하다 d; } s; } u;
총 크기u
의 크기입니다.u.s
– 이 합계는 공교롭게도 다음과 같은 크기의 합계가 됩니다.u.s.u
그리고.u.s.d
– 이후s
둘 다보다 크다i
그리고.f
에 할당하는 경우u.i
, 의 일부u.f
보존할 수 있다u.i
보다 작다u.f
.
조합원으로부터의 판독은, 조합원의 값이 변환되는 것이 아니고, 단지 판독되는 것이기 때문에, 캐스팅과 같은 것이 아닙니다.
함수 포인터
함수 포인터를 사용하면 특정 시그니처로 함수를 참조할 수 있습니다.예를 들어, 표준 함수의 주소를 저장하는 방법abs
변수로my_int_f
:
인트 (*my_int_f)(인트) = &복근; // & 연산자는 생략할 수 있지만, 여기서 "abs" 주소가 사용됨을 명확히 합니다.
함수 포인터는 일반 함수 호출과 마찬가지로 이름으로 호출됩니다.함수 포인터는 포인터 및 보이드 포인터와 별개입니다.
유형 한정자
전술한 타입은 타입 한정자에 의해 한층 더 특징지을 수 있으며, 수식 타입을 산출할 수 있다.2014년과 C11년 기준[update] C에는 네 가지 유형의 예선전이 있다.const
(C89),volatile
(C89),restrict
(C99) 및_Atomic
(C11) – 후자는 사용자 [12]이름과 경합을 피하기 위해 개인 이름을 사용하지만 더 일반적인 이름atomic
사용할 수 있습니다.<stdatomic.h>
header가 포함되어 있습니다.이 중에서const
는 지금까지 가장 잘 알려져 있으며 가장 많이 사용되고 있으며 표준 라이브러리에 표시되며 항상 정확성을 충족해야 하는 C 언어의 중요한 사용에서 발견됩니다.다른 수식어는 저수준 프로그래밍에 사용되며, 일반 프로그래머에 [citation needed]의해 널리 사용되기는 하지만 거의 사용되지 않습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Barr, Michael (2 December 2007). "Portable Fixed-Width Integers in C". Retrieved 18 January 2016.
- ^ a b ISO/IEC 9899:1999 specification, TC3 (PDF). p. 255, § 7.18 Integer types <stdint.h>.
- ^ a b c d e f g h i j ISO/IEC 9899:1999 specification, TC3 (PDF). p. 22, § 5.2.4.2.1 Sizes of integer types <limits.h>.
- ^ Rationale for International Standard—Programming Languages—C Revision 5.10 (PDF). p. 25, § 5.2.4.2.1 Sizes of integer types <limits.h>.
- ^ "C and C++ Integer Limits".
- ^ a b ISO/IEC 9899:1999 specification, TC3 (PDF). p. 37, § 6.2.6.1 Representations of types – General.
- ^ a b c d e f ISO/IEC 9899:1999 specification, TC3 (PDF). p. 56, § 6.4.4.1 Integer constants.
- ^ "64-Bit Programming Models: Why LP64?". The Open Group. Retrieved 9 November 2011.
- ^ "Width of Type (The GNU C Library)". www.gnu.org. Retrieved 30 July 2022.
- ^ "<limits.h>". pubs.opengroup.org. Retrieved 30 July 2022.
- ^ ISO/IEC 9899:1999 specification, TC3 (PDF). p. 67, § 6.5 Expressions.
- ^ C11: The New C Standard, Thomas Plum