** 노트를 못가지고 와서 오후에 옮겨 적을 예정 **
영어 단어:
Format String: C언어에서 데이터의 형식을 지정하는 기호
내용:
3/21 주제: 자료형, 포멧스트링
자료형
- 예약된 키워드 존재
- 정수형
- 실수형
- 기타
- 정수형과 실수형을 묶어서 숫자형태를 갖는 것
- 또 정수형을 구분해서 C (char), S (short), I (int), L (long), L (long long)
메모리 (크기, byte)
- 취급 값의 범위
- 1 byte = 8 bit
- 첫번 째 비트는 부호
정수형
1. char
- 1byte = 1크기 (메모리)
- 취급값의 범위: -2^7 ~ + 2^7 - 1
- unsigned 취급값의 범위: 0 ~ + 2^8 - 1
2. short
- 2byte = 2크기 (메모리)
- 취급값의 범위: -2^15 ~ + 2^15 - 1
- unsigned 취급값의 범위: 0 ~ + 2^16 - 1
3. int
- 4byte = 4크기 (메모리)
- 취급값의 범위: -2^31 ~ + 2^31 - 1
- unsigned 취급값의 범위: 0 ~ + 2^32 - 1
4. long
- 4byte or 8byte = 4크기 또는 8크기 (운영체제에 따라 다름)
- 취급값의 범위: -2^63 ~ + 2^63 - 1 또는 -2^31 ~ + 2^31 - 1
- unsigned 취급값의 범위: 0 ~ + 2^64 - 1 또는 0 ~ + 2^32 - 1
5. long long
- 8byte = 8크기 (메모리)
- 취급값의 범위: -2^63 ~ + 2^63 - 1
- unsigned 취급값의 범위: 0 ~ + 2^64 - 1
실수형
1. float
- 4 byte = 4크기(메모리)
2. double
- 8 byte = 8크기(메모리)
3. long double
- 8 byte = 8크기(메모리)
기타 자료형
1. void
- 값이 없는 자료형
2. _Bool
- 참 또는 거짓을 판단하는 형태
- boolean임, bool 타입 지원 (기본 타입이 아니기에 헤더 파일 참조 필요
<stdbool.h>) - 최근의 지원되는 추세
3. enum
- 열거형
식별자
- 자리를 구분해주는 이름
- 할당받은 메모리를 가리키는 이름
- 함수는 메모리 할당을 받음 (hit / stat 영역) [함수의 이름도 식별자]
- 클래스도 식별자가 됨
- 단, 사용자(프로그래머)가 지정할 수 있음
- 대신, 규칙이 있음
규칙
- 예약어로 식별자를 쓸 수 없음
- 숫자로 시작할 수 없음
- 특수기호로는 시작할 수 있음 (단, 언더바, 달러기호만 사용가능 _, $)
- 대소문자 구분함
표기법
- 명확한 의미부여
- camel 표기법(case)
- 첫단어는 소문자로 시작, 그 다음 단어들은 대문자로 시작
- snake 표기법(case)
- 전부 소문자 사용
- 단어 사이에 언더바로 연결
- 헝가리안 표기법
- 변수명 앞에 타입별 명칭 접두어 붙여서 사용
- 지금은 안쓸려는 추세 (IDE의 발전으로 인해)
암묵적 규칙
- snake, camel case 사용 (허나 상수 이외에는 무조건 camel로)
- 식별자 앞에 타입 표시 (헝가리안 표기법)
코딩
#include<stdio.h>
- 컴파일러에 따른 메모리 할 문제 해결
- stdio.h = 고정 너비 정수형
포멧스트링
- 자료형을 정의하기 위한 구문자
자료형
1. 정수
- %d
2. 상수
- %f
- 소수점 둘째짜리 까지 = %.2f
- 소수점 둘쨰짜리 부터 5쨰자리까지 = %5.2f
3. 더블
- %lf
4. 문자열
- %c
5. ASCII
- %d (아스키코드가 정수이기 때문에)
6. 불리언
- %s
stdint.h
- 범위 넓어지는 비트 int 형 선언
- 시스템 (32 or 64bit)에 상관없이 일관된 크기 보장을 위해
- 실무에서 가장 권장되는 방식
- int64_t
- int16_t
- uint32_t
- uint64_t
- int8_t 등
inttypes.h
- 고정 너비 정수형의 출력을 위한 포멧스트링 메크로가 정의됨
- 프린트 문 사이에 포멧스트링을 적지 않고 %만 입력 후 PRlu32나 PRId64등을 입력
과제
// 제출기한: 다음주 금요일 까지 (2026-03-27)
/*
다음 항목을 적용된 코드를 작성하여 제출하세요.
1. 헤더 포함: stdint.h, stdbool.h, inttypes.h를 포함한다.
2. 변수 선언:
- 사용자의 나이를 저장하는 int8_t 타입 변수 선언 (값: 25)
- 전 세계 인구수를 저장하는 int64_t 타입 변수 popluation 이름 선언 (값: 80억명)
- 매우 정밀한 계산 결과 (원주율 등)를 저장하는 long double 타입 변수 pi_precise(값: 3.14159265358979328L) 선언
- 현재 프로그램이 실행 중인지 나타내는 bool 타입 변수 is_running 선언 (값: true)
3. 출력 요구 사항:
- age는 일반 정수로 출력하세요
- population은 반드시 PRLd64 매크로를 사용해서 출력하시오
- pi_precise는 소수점 이하 15자리까지 출력하세요
- is_running은 삼항 연산자를 사용하여 true일 경우, "Active", false일 경우 "Inactive"로 출력하세요
*/
#include<stdio.h>
#include<stdint.h>
#include<stdbool.h>
#include<inttypes.h>
int main()
{
int8_t age = 25;
int64_t population = 8000000000LL; // 80억명
long double pi_precise = 3.14159265358979328L;
bool is_running = true;
printf("Age: %d\n", age);
printf("Population: %" PRId64 "\n", population);
printf("Pi (precise): %.15Lf\n", pi_precise);
printf("Status: %s\n", is_running ? "Active" : "Inactive");
return 0;
}