Nasıl, tam olarak, çift stringize hile çalışıyor mu?
En azından bazı C preprocessors sen stringizes başka bir makro işlevi gibi: bir geçirilerek kendi adı yerine bir makro değeri, stringize izin verin
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
Örnek vakalar here kullanın.
Bu iş, en azından GCC ve Çınlama (-std=c99
de), ama emin değilimnasılC-standart açısından işe yarıyor.
Bu davranış, C99 tarafından güvence altına alınmıştır?
Eğer öyleyse, nasıl C99 bunu garanti ediyor mu?
Hangi noktada davranış C-tanımlanan GCC tanımlı gider mi?
CEVAP
Evet, orası kesin.
Makrolar için argümanlar kendilerini makro-genişletilmiş, çünkü işe yarıyorhariçmakro değişken adı stringifier ile makro vücutta göründüğü # veya token-paster ##.
6.10.3.1/1:
... Sonra bağımsız değişkenleri işlevi bir makro çağırma bağımsız değişken tespit edilmiştir ikame gerçekleşir. Bir parametre yedek listesinde sürece bir öncesinde # veya ## önişleme token veya takip ## token (aşağıya bakınız) ön işleme, karşılık gelen bağımsız değişken yerine tüm makrolar içerdiği sonra genişletilmiş...
EÄŸer STR1(THE_ANSWER)
Eğer yoksa, bu yüzden "THE_ANSWER", STR1, çünkü tartışmayı makro-genişletilmiş değildir. Ancak, STR2 argümanbu nedenle STR1 STR2 veren, tanımlanması ve yerine gelince makro-genişletilmiş sonucu* *4, bağımsız değişken"". 42
Nasıl {m}{n} ("tam olarak n kez&q...
Teknik olarak, nasıl variadic fonksiyo...
Nasıl eğer root olarak bir bash betiği...
Nasıl dosyaları zaman uyumsuz olarak y...
Nasıl metin yatay ve dikey olarak Andr...