C de Direktif li Makro

Başlatan hasankara, 02 Ekim 2014, 15:44:03

hasankara

İ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ı?

kimlenbu

#1
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

hasankara

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.

X-Fi

#3
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);


http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

hasankara

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.