2013-10-30 26 views
7

GCC ile bir derleyici hatası var, bazı TI kodlayıcıdan bazı makroları TI derleyicisiyle tamamlayan işlemciye çalışırken. Söz konusu## operatörü ile neyi özlüyorum

Makro en

#define CHIP_FSET(Reg,Field,Val)  _CHIP_##Reg##_FSET(##Field,Val) 

bazı varyasyon vardır ve

CHIP_FSET(ST1_55, XF, CHIP_ST1_55_XF_OFF) 

gibi kod kullanılır ve KİK ele geçirmesi zaman

error: pasting "(" and "XF" does not give a valid pre-processing token

söylüyor Alanın önündeki ## öğesini kaldırırsam, önceden başarılı bir şekilde işlem yapar. Eğer kodu doğru bir şekilde anlıyorsam, alanın önündeki ##, iki parametre alan bir işlev çağrısına (veya başka bir makro aramaya) çevrildiğinden alakasız görünüyor. Yani ## gereksizdir, orjinal ikame, sonuçta ..._ FSET (Alan, Val) ile sonuçlanacaktır.

Peki neden eksiklerim? ## ön işlemci yönergesinde bulabildiğim her şey sadece metni bir araya getirdiğini söyledi. Yani bu durumda ilk sırada hiç bir şey yapmadı.

Neyi eksik?

Ve neden GCC onun üzerinde boğuşuyordu ama TI derleyicisi buna izin veriyor? Bunun cevabının "spesifikasyonun belirsiz kısmı" gibi bir şey olduğunu tahmin ediyorum.

=========================

Güncelleme

Ben iç içe bir dizi olduğu için sorun olduğunu düşünüyorum Tamamen çözülmemiş olabilecek makrolar. Derleyicinin neyle bittiği geçersizdir, bu yüzden kuklayı hepsini işlemek için bir noktada harcar.

Kayıp makroları doldurarak sorunu daha da kötüleştirmeyi başardım ve diğer bazı parçaların kırılmasına neden oldu. Bu sanırım platformlar ve derleyiciler arasındaki kodlama portunun sevinçleridir. Yardım için

teşekkürler.

+3

Fonksiyon çağrısında '#' (stringizing) operatörü olması amaçlanmış mıdır? –

+0

Emin değilim. Bu, TI derleyicisinde neden çalıştığını açıklayamazdı. – user2939408

cevap

4

Özelliklerin hiçbiri belirsiz değil. ##, simge seviyesinde çalışır. Birbirine yapıştırılan iki simgenin yine geçerli bir belirteç oluşturması gerekir. (, alfa karakterleri olan bir simge oluşturmaz, dolayısıyla hata iletisi.

+0

Teşekkürler. Peki neden eski derleyici bunu kabul etti? Kafa karıştırıcı şey, neden ilk etapta yapıldı? Onları bir araya getirmekten daha fazlasını yapacak mı? – user2939408

+3

Bunu kabul eden eski derleyici özensizdi - buggy. –