Escape sequence adalah kombinasi karakter yang dimulai dengan backslash (\) di dalam string literal atau karakter literal. Escape sequence memungkinkan kita menyisipkan karakter yang sulit diketik atau yang memiliki arti khusus—misalnya newline, tab, tanda kutip, atau karakter kontrol non-cetak. Bab ini menyediakan tabel lengkap escape sequence C beserta contoh output aktual.

Tabel Escape Sequences Standar #

Standar C mendefinisikan escape sequence berikut. Semuanya diawali dengan backslash \ dan terdiri dari satu atau beberapa karakter berikutnya.

SequenceNamaNilai (ASCII)Deskripsi
\aAlert (bell)0x07Menghasilkan bunyi/sinyal
\bBackspace0x08Mundur satu kolom
\fForm feed0x0CHalaman baru (printer)
\nLine feed (newline)0x0APindah ke baris berikutnya
\rCarriage return0x0DKembali ke awal baris
\tHorizontal tab0x09Tab horizontal
\vVertical tab0x0BTab vertikal
\\Backslash0x5CLiteral \
\'Single quote0x27Literal ' (untuk char literal)
\"Double quote0x22Literal " (untuk string literal)
\?Question mark0x3FLiteral ? (hindari trigraph)
\0Null character0x00Terminator string
\oooOctal escapevariabelKarakter dari 1-3 digit oktal
\xhhHex escapevariabelKarakter dari digit hex setelah \x
\uhhhhUniversal char namevariabelCode point UTF-8 (4 hex)
\UhhhhhhhhUniversal char namevariabelCode point UTF-8 (8 hex)

Hex dan Octal Escape #

Hex escape \x diikuti satu atau lebih digit heksadesimal (0-9, a-f, A-F). Octal escape \ diikuti 1-3 digit oktal (0-7). Compiler membaca digit sebanyak mungkin selama masih valid.

LiteralHasil karakterKode ASCII
'\x41'A65
'\x7F'DEL127
'\101'A65 (oktal 101 = 65)
'\177'DEL127 (oktal 177 = 127)
"\x48\x65\x6c\x6c\x6f"Hello—
"\110\145\154\154\157"Hello—

Program Lengkap #

Program berikut mendemonstrasikan semua escape sequence standar, literal hex, dan literal oktal.

c
/* File: esc1.c - Demonstrasi escape sequences */
#include <stdio.h>

int main(void) {
    /* Karakter kontrol umum */
    printf("Baris pertama\nBaris kedua\n");        /* \n = newline */
    printf("Kolom1\tKolom2\tKolom3\n");             /* \t = tab */
    printf("Hapus satu karakter\bX\n");              /* \b = backspace */
    printf("Kembali ke awal\rSelesai\n");            /* \r = carriage return */
    printf("Bunyi bell\a\n");                          /* \a = alert/bell */
    printf("Form feed\fLanjutan\n");                  /* \f = form feed */
    printf("Vertikal tab\vLanjutan\n");               /* \v = vertical tab */

    /* Tanda kutip dan backslash */
    printf("Kata \"Budi\" dalam tanda kutip\n");      /* \" = tanda kutip */
    printf("Tanda kutip tunggal: '\n");               /* \' = tanda kutip tunggal */
    printf("Path Windows: C:\\Users\\Budi\n");         /* \\ = backslash */
    printf("Tanda tanya: ?\n");                        /* \? = literal ? */

    /* Null character sebagai terminator */
    char s[] = {'H','a','l','o','\0','X','Y'};
    printf("String terpotong null: %s\n", s);          /* hanya "Halo" */

    /* Hex dan octal escape */
    printf("Hex \\x41 = %c\n", '\x41');                 /* A */
    printf("Octal \\101 = %c\n", '\101');                /* A */

    /* Demonstrasi \x dan \nnn sebagai string */
    printf("Hex string: \x48\x65\x6c\x6c\x6f\n");     /* Hello */
    printf("Octal string: \110\145\154\154\157\n");   /* Hello */

    return 0;
}

Compile dan jalankan:

bash
gcc -std=c11 -Wall -Wextra -o esc1 esc1.c
./esc1

Output yang Dihasilkan:

text
Baris pertama
Baris kedua
Kolom1	Kolom2	Kolom3
Hapus satu karakterX
Kembali ke awalSelesai
Bunyi bell
Form feedLanjutan
Vertikal tabLanjutan
Kata "Budi" dalam tanda kutip
Tanda kutip tunggal: '
Path Windows: C:\Users\Budi
Tanda tanya: ?
String terpotong null: Halo
Hex \x41 = A
Octal \101 = A
Hex string: Hello
Octal string: Hello

Mari kita telaah baris-baris kode di atas:

  1. Baris 6 (printf("Baris pertama\nBaris kedua\n")): Escape \n memerintahkan terminal pindah ke baris berikutnya. Tanpa \n, kedua teks akan tergabung dalam satu baris panjang.
  2. Baris 8 (printf("Hapus satu karakter\bX\n")): \b memundurkan kursor satu kolom. Output mentahnya Hapus satu karakter\bX—saat dirender terminal, huruf r ditimpa oleh X, menghasilkan Hapus satu karakteX. Pada output terminal yang tidak mendukung kontrol, ini bisa terlihat aneh.
  3. Baris 9 (printf("Kembali ke awal\rSelesai\n")): \r mengembalikan kursor ke awal baris tanpa pindah baris. Teks “Kembali ke awal” lalu ditimpa oleh “Selesai” sehingga hanya “Selesai” yang terlihat di baris tersebut.
  4. Baris 15 (char s[] = {'H','a','l','o','\0','X','Y'}): Array karakter berisi 7 elemen dengan \0 di tengah. Fungsi printf("%s", s) mencetak sampai menemui \0 pertama, sehingga hanya “Halo” yang muncul—karakter X dan Y diabaikan.
  5. Baris 23 (printf("Hex string: \x48\x65\x6c\x6c\x6f\n")): Lima hex escape digabung dalam satu string literal menghasilkan kata Hello. Compiler menggabungkan token literal string yang berurutan secara otomatis, tetapi di sini kita menggunakan satu literal saja.

Universal Character Names #

Untuk karakter Unicode di luar ASCII, C99 memperkenalkan universal character name \u (4 hex digit) dan \U (8 hex digit). Karakter ini akan di-encode sebagai UTF-8 bila source file disimpan sebagai UTF-8 dan terminal menerima UTF-8.

LiteralCode PointKarakter
\u0041U+0041A
\u00e9U+00E9e dengan acute (é)
\u20acU+20ACtanda Euro (€)
\U0001F600U+1F600emoji senyum