C 상수 리터럴 - sonkoni/Koni-Wiki GitHub Wiki

리터럴(literal)

리터럴은 문자 그대로를 의미하는 것으로, 프로그래밍적으로는 상수화를 의미한다. 즉, 메모리의 읽기전용 공간에 배치된다.

자료형             리터럴 접미사
-------------------------
int                 없음
long                l, L
long long           ll, LL
unsigned int        u, U
unsigned long       ul, UL
unsigned long long  ull, ULL
-------------------------
float               f, F
double              없음
long double         l, L
-------------------------
#include <stdio.h>

int main(int argc, char *argv[]) {

    printf("10-> %d\n", -10);        // int
    printf("10-> %ld\n", -10l);      // long
    printf("10-> %lld\n", -10ll);    // long long
    printf("10-> %u\n", 10u);        // unsigned int
    printf("10-> %lu\n", 10ul);      // unsigned long
    printf("10-> %llu\n", 10ull);    // unsigned long long

    printf("8-> 0%lo\n", 017l);     // long 8진법
    printf("8-> 0%lo\n", 017ul);    // unsigned long 8진법
    printf("16-> 0x%lX\n", 0x7FFFFFFl);     // long 8진법
    printf("16-> 0x%lX\n", 0x7FFFFFFul);    // unsigned long 8진법

    printf("%f\n", 0.1f);    // float
    printf("%f\n", 0.1);     // double
    printf("%Lf\n", 0.1l);   // long double

    printf("%f\n", 1.0e-5f);    // float
    printf("%f\n", 1.0e-5);     // double
    printf("%Lf\n", 1.0e-5l);   // long double

    return 0;
}

// 10-> -10
// 10-> -10
// 10-> -10
// 10-> 10
// 10-> 10
// 10-> 10
// 8-> 017
// 8-> 017
// 16-> 0x7FFFFFF
// 16-> 0x7FFFFFF
// 0.100000
// 0.100000
// 0.100000
// 0.000010
// 0.000010
// 0.000010

동일한 리터럴은 동일한 포인터이다.

동일한 리터럴은 static 처럼 동일한 위치를 가리킨다.

char *a = "Hello";
char *b = "Hello";
printf("=> %p, %p", a, b);
// => 0x10308ff84, 0x10308ff84
⚠️ **GitHub.com Fallback** ⚠️