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.
| Sequence | Nama | Nilai (ASCII) | Deskripsi |
|---|---|---|---|
\a | Alert (bell) | 0x07 | Menghasilkan bunyi/sinyal |
\b | Backspace | 0x08 | Mundur satu kolom |
\f | Form feed | 0x0C | Halaman baru (printer) |
\n | Line feed (newline) | 0x0A | Pindah ke baris berikutnya |
\r | Carriage return | 0x0D | Kembali ke awal baris |
\t | Horizontal tab | 0x09 | Tab horizontal |
\v | Vertical tab | 0x0B | Tab vertikal |
\\ | Backslash | 0x5C | Literal \ |
\' | Single quote | 0x27 | Literal ' (untuk char literal) |
\" | Double quote | 0x22 | Literal " (untuk string literal) |
\? | Question mark | 0x3F | Literal ? (hindari trigraph) |
\0 | Null character | 0x00 | Terminator string |
\ooo | Octal escape | variabel | Karakter dari 1-3 digit oktal |
\xhh | Hex escape | variabel | Karakter dari digit hex setelah \x |
\uhhhh | Universal char name | variabel | Code point UTF-8 (4 hex) |
\Uhhhhhhhh | Universal char name | variabel | Code 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.
| Literal | Hasil karakter | Kode ASCII |
|---|---|---|
'\x41' | A | 65 |
'\x7F' | DEL | 127 |
'\101' | A | 65 (oktal 101 = 65) |
'\177' | DEL | 127 (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.
/* 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:
gcc -std=c11 -Wall -Wextra -o esc1 esc1.c
./esc1Output yang Dihasilkan:
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: HelloMari kita telaah baris-baris kode di atas:
- Baris 6 (
printf("Baris pertama\nBaris kedua\n")): Escape\nmemerintahkan terminal pindah ke baris berikutnya. Tanpa\n, kedua teks akan tergabung dalam satu baris panjang. - Baris 8 (
printf("Hapus satu karakter\bX\n")):\bmemundurkan kursor satu kolom. Output mentahnyaHapus satu karakter\bX—saat dirender terminal, hurufrditimpa olehX, menghasilkanHapus satu karakteX. Pada output terminal yang tidak mendukung kontrol, ini bisa terlihat aneh. - Baris 9 (
printf("Kembali ke awal\rSelesai\n")):\rmengembalikan kursor ke awal baris tanpa pindah baris. Teks “Kembali ke awal” lalu ditimpa oleh “Selesai” sehingga hanya “Selesai” yang terlihat di baris tersebut. - Baris 15 (
char s[] = {'H','a','l','o','\0','X','Y'}): Array karakter berisi 7 elemen dengan\0di tengah. Fungsiprintf("%s", s)mencetak sampai menemui\0pertama, sehingga hanya “Halo” yang muncul—karakterXdanYdiabaikan. - Baris 23 (
printf("Hex string: \x48\x65\x6c\x6c\x6f\n")): Lima hex escape digabung dalam satu string literal menghasilkan kataHello. 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.
| Literal | Code Point | Karakter |
|---|---|---|
\u0041 | U+0041 | A |
\u00e9 | U+00E9 | e dengan acute (é) |
\u20ac | U+20AC | tanda Euro (€) |
\U0001F600 | U+1F600 | emoji senyum |