Olmama Nedenleri
Öncelikle, burada simüle etmek için herhangi bir alt çizgi yazmamak ya da herhangi bir numara kullanmamak için bir neden: sabitleri kodda bulmayı zorlaştırıyor. Bazı programların çalışmasının bir yerinde, bazı parametreler için 1500000 kodlanmış değer gösterdiğini varsayalım. Bu programın kaynak kodunda gerçekte nerede gerçekleştiğini bilmek istiyorum, bu yüzden kodu okuyorum 1500000
ve hiçbir şey bulamadım. Neden? Onaltılık (ancak böyle bir yuvarlak ondalık sayı için neden) olabilir. Bana göre, sabit aslında olarak yazılmıştır 1_500_000
. Regex'e ihtiyacım vardı 1_?500_?000
.
Yorumdaki Karakterleri Rehberlik Etme
Sadece bir çeşit görsel yardım bulunmadığı veya yukarıdaki nedenlerden dolayı kullanmak istemediğimizden, alternatif bir görsel yardım oluşturmak için metin dosyasının iki boyutundan yararlanamayacağımız anlamına gelmez:
foo = bar / 1000000000;
// --^--^--^
Bununla kendimizi üç sıfır grubun olduğu konusunda rahatlıkla ikna edebiliriz. Yine de, kaynak kodunu hala 1000000000
bulabilir ve bulabiliriz.
Sözdizimi Renklendirme
Programlanabilir sözdizimi renklendirmeli bir metin editörü daha iyi okunabilmesi için basamakları nümerik sabitler halinde değişen renklerle renklendirmek için yapılabilir. Kodda hiçbir şey yapmak zorunda değiliz.
Ön işleme: C, C ++, Amaç C
Şimdi, basamaklar arasında gerçekten virgül istiyorsak, C ve C ++ 'da ön işleme kullanabiliriz:
/* 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)
Gibi sayılar için çalışıyor TH(1,234,567,890)
.
TH'ye benzer bir makro da aritmetik değil, token yapıştırma ile de çalışabilir. C önişlemcisinde, ##
iki işleci tek bir tonada yapıştırmak için ikili operatör ("token paste") bir makro gövdede kullanılabilir. İşlenenlerden biri veya her ikisi de makro argümanlar olabilir. Buradaki dezavantaj (bizim için bir risk oluşturmaktır) ortaya çıkan katener geçerli bir belirteç değilse, davranış tanımsızdır.
#define TOK4(A, B, C, D) A ## B ## C ## D
şimdi
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 */
Tanımlayıcıları bir araya getiren ve sonuçları global değişkenleri ve fonksiyonları isimlendirmek için kullanan C programları mevcuttur ve çalışmak için zordur çünkü GNU id-utils ve ctags gibi araçlara karşı hassastırlar.