İstiyorum ki bir makro tanımlayayım içerisinde başka direktiflerde olsun.
mesela ;
#define makro\
#define direktif 5
şeklinde yazdığım makroyu derlediğimde
"warning: backslash-newline at end of file"
"warning: missing whitespace after the macro name"
şeklinde uyarı alıyorum ama derlenebiliyor. makro ismini verdiğim makroyu döngünün birisinde yazdığım zaman ise
example-small.c:108:9: error: stray '#' in program
Makefile-impl.mk:39: recipe for target '.build-impl' failed
example-small.c:108:9: error: 'define' undeclared (first use in this function)
example-small.c:108:9: note: each undeclared identifier is reported only once for each function it appears in
example-small.c:108:9: error: expected ';' before 'direktif'
şeklinde hatalar alıyorum.
uzun lafın kısası makro içerisinde direktif tanımlamamızın bir yolu var mı?
Dün bloguma yazarken güzel bir pdf bulmuştum, belki işine yarar :
https://gcc.gnu.org/onlinedocs/gcc-4.0.4/cpp.pdf
mesaj birleştirme:: 02 Ekim 2014, 15:54:23
Bu arada ben de tam okumadım ama #'den önce boşluk olmayacak, yeni satır karakterinden önce de bir boşluk bırak
bende bu gün bu sayfayı inceledim biraz. https://gcc.gnu.org/onlinedocs/cpp/Directives-Within-Macro-Arguments.html#Directives-Within-Macro-Arguments bu linkte sanki benim istediğimi yapıyor gibi ama örneği, anlayamadım ve derletemedim.
struct Register
{
uint16_t register_1;
uint16_t register_2;
uint16_t register_3;
};
#define Macro(info)\
info.register_1=0xFFFD;\
info.register_2=0xFFFE;\
info.register_3=0xFFFF
Yapmaya çalıştığın şeyi tam olarak anlamadım ancak yukarıdaki makroyu aşağıdaki şeklinde çağırıp topluca register değeri yükleyebilirsin. İstediğin buysa tabi.
Macro(Register);
aslen yapmak istediğim __COUNTER__ makrosunun yaptığı işi yapabilecek bir makro yapmak. __COUNTER__ makrosu istediğim işin bir kısmını yapabiliyor. örnek olarak;
degisken=__COUNTER__;
degisken=__COUNTER__;
degisken=__COUNTER__;
şeklinde yazdığımız zaman degisken içerisine sırasıyla 0 1 2 değerlerini yüklüyor. buraya kadar tam istediğim gibi ancak ben bazen bunu resetleyebilmek te istiyorum. ancak bu resetleme işlemini __COUNTER__ üzerinde sanırım yapamıyoruz. makro ile değilde, dahil et direktifiyle yani #include ile bu söylediğimi yaptım ancak bu da nihayetinde bir direktif olduğu için başka bir makronun içerisine dahil edemedim. direk kodun yazıldığı kısma #include koymak gerekiyor buda kötü görünüyor.
verdiğim örnek sadece göstermek için yazdım ve bu işin derleme aşamasında yapılmış olmasını istiyorum.