Pytania otagowane jako c-preprocessor

Tekstowy procesor makr stosowany przed kompilacją programów w językach C i C ++. Ten tag może być również używany w przypadku pytań dotyczących innych kompilatorów / języków pochodzących z lub mających identyczne funkcje, takie jak #directives w Objective-C lub C #.

7
Po co definiować tylko makro, jeśli nie zostało jeszcze zdefiniowane?
W całej naszej bazie kodu C widzę każde makro zdefiniowane w następujący sposób: #ifndef BEEPTRIM_PITCH_RATE_DEGPS #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #endif #ifndef BEEPTRIM_ROLL_RATE_DEGPS #define BEEPTRIM_ROLL_RATE_DEGPS 0.2f #endif #ifndef FORCETRIMRELEASE_HOLD_TIME_MS #define FORCETRIMRELEASE_HOLD_TIME_MS 1000.0f #endif #ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS #define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS 50.0f #endif Jakie jest uzasadnienie wykonywania tych kontroli definicji zamiast tylko definiowania makr? #define BEEPTRIM_PITCH_RATE_DEGPS …


4
Jak używać argumentu Macro jako literału ciągu?
Próbuję dowiedzieć się, jak napisać makro, które przekaże zarówno ciąg znaków reprezentacji nazwy zmiennej, jak i samą zmienną do funkcji. Na przykład biorąc pod uwagę następującą funkcję. void do_something(string name, int val) { cout << name << ": " << val << endl; } Chciałbym napisać makro, więc mogę to …

1
Co robi ## (double hash) w dyrektywie preprocesora?
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; Powyższa linia pochodzi z Unreal 4 i wiem, że mógłbym zadać to pytanie na nierealnych forach, ale myślę, że jest to ogólne pytanie C ++, które zasługuje na to, aby je tutaj zadać. Rozumiem, że pierwsza linia definiuje makro, jednak nie jestem dobrze zaznajomiony …


13
Jakie są zastosowania operatora preprocesora ## i jakie rozwiązania należy wziąć pod uwagę?
Jak wspomniano w wielu moich poprzednich pytaniach, pracuję przez K&R i obecnie używam preprocesora. Jedną z bardziej interesujących rzeczy - czymś, czego nigdy wcześniej nie wiedziałem z żadnej z moich poprzednich prób nauki C - jest ##operator preprocesora. Według K&R: Operator preprocesora ## umożliwia konkatenację rzeczywistych argumentów podczas rozwijania makr. …



2
Jak dokładnie działa sztuczka z podwójnym naciągiem?
Przynajmniej niektóre preprocesory języka C pozwalają na zdefiniowanie wartości makra, a nie jego nazwy, poprzez przekazanie go przez jedno makro podobne do funkcji do drugiego, które je określa: #define STR1(x) #x #define STR2(x) STR1(x) #define THE_ANSWER 42 #define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */ Przykładowe przypadki użycia tutaj . To działa, …


7
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 container_of, ale nie rozumiem ostatniego zdania, czyli (type *)( (char *)__mptr - offsetof(type,member) …


6
#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 jest więc jakieś rozwiązanie?
83 c  c-preprocessor 

6
#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 sposób jest bardziej wydajny i / lub bezpieczniejszy?

4
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 długie.
81 c++  c  c-preprocessor 

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.