Alasan untuk tidak
Pertama, inilah alasan mengapa tidak menulis garis bawah atau menggunakan trik apa pun untuk mensimulasikannya: ini membuat konstanta lebih sulit ditemukan dalam kode. Misalkan beberapa program menunjukkan, di suatu tempat dalam operasinya, nilai hard-code 1500000 untuk beberapa parameter. Saya ingin tahu di mana dalam kode sumber program ini sebenarnya terjadi, jadi saya ambil kodenya 1500000
, dan tidak menemukan apa pun. Mengapa? Mungkin dalam heksadesimal (tapi mengapa untuk angka desimal bulat). Tanpa sepengetahuan saya, konstanta sebenarnya ditulis sebagai 1_500_000
. Saya membutuhkan regex 1_?500_?000
.
Membimbing Karakter dalam Komentar
Hanya karena satu jenis alat bantu visual tidak tersedia, atau kami tidak ingin menggunakannya karena alasan di atas, tidak berarti kami tidak dapat memanfaatkan dua dimensi file teks untuk membuat alat bantu visual alternatif:
foo = bar / 1000000000;
// --^--^--^
Dengan ini kita dapat dengan mudah meyakinkan diri sendiri bahwa ada tiga kelompok tiga nol. Namun, kami masih dapat menangkap kode sumber untuk 1000000000
dan menemukannya.
Pewarnaan Sintaks
Editor teks dengan pewarnaan sintaks yang dapat diprogram dapat dibuat untuk mewarnai kelompok digit dalam konstanta numerik dengan warna bergantian untuk keterbacaan yang lebih baik. Kami tidak perlu melakukan apa pun dalam kode.
Preprocessing: C, C ++, Objective C
Sekarang, jika kita benar-benar menginginkan beberapa koma di antara digit, di C dan C ++ kita dapat menggunakan beberapa preprocessing:
/* Four digit base TH-ousand constant macro */
/* Condensed using Horner's rule */
#define TH(A,B,C,D) ((((((A) * 1000) + (B)) * 1000) + (C)) * 1000 + D)
tv_sec = nanoseconds / TH(1,000,000,000)
Bekerja untuk angka seperti TH(1,234,567,890)
.
Makro mirip dengan TH juga bisa bekerja dengan token paste daripada aritmatika. Dalam preprocessor C, ##
operator biner ("token paste") dapat digunakan dalam tubuh makro untuk menempelkan dua operan menjadi satu token tunggal. Satu atau kedua operan bisa berupa argumen makro. Kelemahan di sini (menciptakan risiko bagi kami) adalah bahwa jika katenasi yang dihasilkan bukan token yang valid, perilaku tidak terdefinisi.
#define TOK4(A, B, C, D) A ## B ## C ## D
Sekarang
TOK4(1,000,000,000) /* produces the single token 1000000000 */
TOK4(1,123,000,000.0E+2) /* produces the single token 1123000000.0E+2 */
TOK4(pr,in,t,f) /* produces the token printf */
TOK4(#,*,a,b) /* undefined behavior, #*ab is not valid token syntax */
Program C yang menempelkan pengidentifikasi dan menggunakan hasilnya untuk memberi nama variabel global dan fungsi yang ada dan mengerikan untuk bekerja dengan karena mereka tahan terhadap alat-alat seperti GNU id-utils dan ctags.