Nasıl, tam olarak, çift stringize hile çalışıyor mu? | Netgez.com
SORU
1 Mayıs 2010, CUMARTESİ


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
1 Mayıs 2010, CUMARTESİ


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

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • eyes4beautee

    eyes4beautee

    17 HAZÄ°RAN 2011
  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009