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.
Fonksiyon çağrısında '#' (stringizing) operatörü olması amaçlanmış mıdır? –
Emin değilim. Bu, TI derleyicisinde neden çalıştığını açıklayamazdı. – user2939408