Pytania oznaczone «c-preprocessor»

99
Wcięcie #defines

Wiem, że #defines itp. Zwykle nie są wcięte. Czemu? W tej chwili pracuję nad jakimś kodem, który ma okropną mieszankę #defines, #ifdefs, #elses, #endifs itd. Wszystko to często jest pomieszane z normalnym kodem C. Brak wcięć w literach #definesprawia, że ​​są one trudne do odczytania. A mieszanka...

99
Preprocesor C ++ __VA_ARGS__ liczba argumentów

Proste pytanie, na które nie mogłem znaleźć odpowiedzi w sieci. Jak znaleźć liczbę argumentów w makrach argumentów o zmiennej liczbie argumentów? Jestem w porządku z preprocesorem doładowania, jeśli ma rozwiązanie. Jeśli to robi różnicę, próbuję przekonwertować zmienną liczbę argumentów makr, aby...

94
Dlaczego makra preprocesora są złe i jakie są alternatywy?

Zawsze o to pytałem, ale nigdy nie otrzymałem naprawdę dobrej odpowiedzi; Myślę, że prawie każdy programista jeszcze przed napisaniem pierwszego „Hello World” zetknął się z wyrażeniem „makro nie powinno być nigdy używane”, „makro jest złe” i tak dalej, moje pytanie brzmi: dlaczego? Czy po tylu...

84
Zrozumienie makra container_of w jądrze Linuksa

Kiedy przeglądałem jądro Linuksa, znalazłem container_ofmakro, które jest zdefiniowane w następujący sposób: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) Rozumiem, co robi...

83
#ifdef wewnątrz #define

Próbuję napisać coś takiego: #define COV_ON(x) \ #ifdef COVERAGE_TOOL \ _Pragma (COVERAGE #x) #endif Czy jest jakiś sposób, aby to zdefiniować COV_ON? Wiem, że to, co zrobiłem powyżej, jest złe, ponieważ nie mogę mieć #ifdefwewnątrz #define. ( #nie jest dozwolonym znakiem w #define). Czy...

81
#define vs const w Objective-C

Jestem nowy w Objective-C i mam kilka pytań dotyczących constdyrektywy wstępnego przetwarzania #define. Po pierwsze stwierdziłem, że nie jest możliwe zdefiniowanie typu stałej za pomocą #define. Dlaczego? Po drugie, czy są jakieś zalety używania jednego z nich nad drugim? Wreszcie, który...

81
Wieloliniowe makra preprocesora

Jak zrobić makro preprocesora wieloliniowego? Wiem, jak zrobić jedną linię: #define sqr(X) (X*X) ale potrzebuję czegoś takiego: #define someMacro(X) class X : public otherClass { int foo; void doFoo(); }; Jak to działa? To jest tylko przykład, rzeczywiste makro może być bardzo...