산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C 상수와 리터럴: 정수, 실수, 문자, 문자열, 심볼릭 상수 정의법

상수(Constant)는 프로그램 실행 중 값이 변경되지 않는 고정값입니다. 리터럴(Literal)은 소스 코드에 직접 쓴 상수값이고, 심볼릭 상수는 이름 붙은 상수입니다.

정수 리터럴

접미사 (Suffix)

타입 결정 규칙 (접미사 없을 때)

  1. 10진수: int → long → long long (들어가는 첫 타입)
  2. 8/16진수: int → unsigned int → long → unsigned long → long long → unsigned long long

실수 리터럴

3.14159       // double
3.14159f      // float (f/F 접미사)
3.14159L      // long double (l/L 접미사)
1.23e-4       // 지수 표기 = 1.23 × 10⁻⁴
1.23E4        // = 12300.0
.5            // 0.5 (소수점 앞 0 생략 가능)
5.            // 5.0 (소수점 뒤 0 생략 가능)

잘못된 예

510E        // 지수부 불완전
210f        // 소수점도 지수도 없음
.e55        // 정수부도 소수부도 없음

문자 상수 (Character Constant)

이스케이프 시퀀스

진법접두사예시비고
10진수(없음)212, -10기본
8진수00213, 0770~7만 사용
16진수0x / 0X0xFeeL, 0XABC대소문자 무관

문자열 리터럴 (String Literal)

const char *msg = "이것은 긴 문자열을 "
                   "여러 줄로 나눈 "
                   "예제입니다.";

심볼릭 상수 정의 (이름 있는 상수)

1. #define 전처리기 매크로

#define PI 3.14159265359
#define MAX_SIZE 1024
#define GREETING "Hello, World!"
#define FLAG_TRUE 1

// 사용
double area = PI * r * r;
int buf[MAX_SIZE];

장점: 단순, 타입 없음, 텍스트 치환 단점: 타입 검사 없음, 디버거에서 심볼 안 보임, 스코프 없음 (전역)

2. const 변수 (권장)

const double PI = 3.14159265359;
const int MAX_SIZE = 1024;
const char *GREETING = "Hello, World!";

장점: 타입 안전, 스코프 준수, 디버깅 가능, 최적화 힌트 단점: C에서 배열 크기 지정 등 상수 표현식 필요한 곳에 제약 있음 (C++은 가능)

3. 열거형 상수 (enum) - 정수 상수 그룹에 최적

enum Color { RED, GREEN, BLUE };        // 0, 1, 2
enum Status { OK = 0, ERROR = -1, EOF = -2 };
enum Flags { READ = 1<<0, WRITE = 1<<1, EXEC = 1<<2 };

장점: 타입 안전(약간), 디버거에서 심볼 값 표시, 관련 상수 그룹화

모범 사례

C 언어

  1. 교류 회로에서 저항, 인덕터, 커패시터 종합 요약
  2. C# 키워드와 식별자 이해: 규칙, 목록, 모범 사례
  3. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  4. C# 추상 클래스와 추상 메서드: 실전 가이드
  5. C# partial 클래스와 partial 메서드 이해하기
  6. C# sealed 클래스와 메서드: 상속/오버라이딩 제한으로 코드 안전성·성능 높이기
  7. C++ 변수, 리터럴, 상수 마스터하기: 종합 가이드
  8. C 키워드와 식별자: 실전 가이드
  9. C 변수, 상수, 리터럴: 완전 가이드
  10. C 변수, 데이터 타입, 상수 – 실전 가이드
시퀀스의미ASCII
\n개행 (Newline)10 (0x0A)
\t수평 탭9 (0x09)
\r캐리지 리턴13 (0x0D)
\v수직 탭11 (0x0B)
\b백스페이스8 (0x08)
\f폼 피드12 (0x0C)
\a경고음 (벨)7 (0x07)
\\백슬래시 \92 (0x5C)
\'작은따옴표 '39 (0x27)
\"큰따옴표 "34 (0x22)
\?물음표 ?63 (0x3F)
\ooo8진수 (1~3자리)\101 = 'A'
\xhh16진수 (1자리 이상)\x41 = 'A'
\uXXXX유니코드 16비트 (C99)\u0041 = 'A'
\UXXXXXXXX유니코드 32비트 (C99)\U0001F600 = 😀