c-preprocessor

Po co używać pozornie bezsensownych instrukcji do-while I if-else w makrach?

W wielu makrach C / C++ widzę kod makra zawinięty w coś, co wydaje się być bezsensowną pętlą do while. Oto przykłady. #defi ... ) if (1) { f(X); g(X); } else Nie widzę, co robi do while. Dlaczego nie napisać tego bez tego? #define FOO(X) f(X); g(X)

# define makro for debug printing in C?

Próba utworzenia makra, które może być użyte do wypisywania wiadomości debugowania, gdy Debug jest zdefiniowany, jak następujący pseudo kod: #define DEBUG 1 #define debug_print(args ...) if (DEBUG) fprintf(stderr, args) Jak to się robi z makrem?

Dlaczego preprocesor C interpretuje słowo "linux" jako stałą "1"?

Dlaczego preprocesor C w GCC interpretuje słowo linux (małe litery) jako stałą 1? Test.c: #include <stdio.h> int mai ... int main(void) { int 1 = 5; return 0; } Co-oczywiście-powoduje błąd. (BTW: nie ma #define linux w stdio.plik H.)

C # define makro for debug printing

Próba utworzenia makra, które może być użyte do wypisywania wiadomości debugowania, gdy Debug jest zdefiniowany, jak następujący pseudo kod: #define DEBUG 1 #define debug_print(args ...) if (DEBUG) fprintf(stderr, args) Jak to się robi z makrem?

Łączenie C++ i C-jak działa # ifdef cplusplus?

Pracuję nad projektem, który ma spore dziedzictwo C kodu. Zaczęliśmy pisać w C++, z zamiarem ostatecznie przekonwertowania ... zrobić? Będziemy mieszać C i C++ w przewidywalnej przyszłości, a ja chcesz się upewnić zajmujemy się wszystkim nasze bazy.

Jak niezawodnie wykryć Mac OS X, iOS, Linux, Windows w preprocesorze C?

Jeśli istnieje jakiś wieloplatformowy kod C / C++, który powinien być skompilowany na Mac OS X, iOS, Linux, Windows, Jak mogę je niezawodnie wykryć podczas procesu preprocesora?

GCC dump preprocesor definiuje

Czy istnieje sposób, aby gcc / g++ zrzucał swoje preprocesory zdefiniowane z linii poleceń? Mam na myśli rzeczy takie jak __GNUC__, __STDC__, i tak dalej.

Dlaczego #ifndef i # define są używane w plikach nagłówkowych C++?

Widziałem taki kod zwykle na początku plików nagłówkowych: #ifndef HEADERFILE_H #define HEADERFILE_H I na końcu pliku jest #endif Jaki jest tego cel?

~ pragma Pack effect

Zastanawiałem się, czy ktoś mógłby mi wyjaśnić, co robi instrukcja preprocesora #pragma pack, a co ważniejsze, dlaczego ktoś ... d, ale miałem nadzieję usłyszeć więcej od ludzi z doświadczeniem. Widziałem to już w kodzie, choć nie mogę już znaleźć gdzie.

Preprocesor C++: unikaj powtarzania kodu listy zmiennych członkowskich

Mam wiele klas, każda z różnymi zmiennymi składowymi, które są inicjowane trywialnie w konstruktorze. Oto przykład: struct ... wane zmiennymi składowymi ze względu na wydajność. Zastanawiam się tylko, czy można wymienić parametry i ich typy tylko raz.

Przeciążenie makra na Ilość argumentów

Mam dwa makra FOO2 i FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... Chcę zdefiniować nowe makro FOO w następujący sp ... kra FOO (używając __VA_ARGS__ lub w inny sposób), aby uzyskać taki sam efekt wysyłania FOO(x,y) do FOO2 i FOO(x,y,z) do FOO3?

Jak SPRAWDZIĆ SYSTEM OPERACYJNY za pomocą dyrektywy preprocesora?

Potrzebuję mojego kodu do robienia różnych rzeczy w oparciu o system operacyjny, na którym jest kompilowany. Szukam czegoś ta ... ws-specific stuff #else // do Unix-specific stuff #endif Czy jest na to sposób? Czy jest lepszy sposób, aby zrobić to samo?

MIN i MAX w C

Gdzie są MIN i MAX zdefiniowane w C, jeśli w ogóle? Jaki jest najlepszy sposób, aby je wdrożyć, tak ogólnikowo i bezpiecznie, jak to możliwe? (Preferowane rozszerzenia kompilatora/wbudowane dla popularnych kompilatorów.)

Standardowa alternatywa dla sztuczki GCC ## VA ARGS?

Istnieje dobrze znany problem z pustymi argami dla zmiennych makr w C99. Przykład: #define FOO(...) printf(__VA_ARG ... o oddzielnego printf(), co jest korzystne, jeśli logowanie jest buforowane liniowo i pochodzi z wielu źródeł asynchronicznie.

Kiedy są korzystne makra C++? [zamknięte]

Preprocesor C jest uzasadniony obawą i unikaniem przez społeczność C++. Funkcje in-lined, const i szablony są zwykle bezpiec ... mógł bądź głosowany i jeśli wiesz, jak osiągnąć jedną z odpowiedzi bez preprocesora wskaż, jak w komentarzach tej odpowiedzi.

Jak zobaczyć plik źródłowy C / C++ po wstępnym przetworzeniu w Visual Studio?

Załóżmy, że mam plik źródłowy z wieloma dyrektywami preprocesora. Czy można zobaczyć, jak to wygląda po wykonaniu preprocesora?

Łatwy sposób użycia zmiennych typów enum jako ciąg znaków w C?

Oto co próbuję zrobić: typedef enum { ONE, TWO, THREE } Numbers; Próbuję napisać funkcję, która zrobiłaby przypadek przeł ... st definiować w każdym przypadku, czy istnieje sposób, aby ustawić go za pomocą zmiennej enum, jak staram się zrobić powyżej?

Definiować makro preprocesora przez CMake?

Jak zdefiniować zmienną preprocesora poprzez CMake? Odpowiednikiem kodu będzie #define foo.

Dlaczego wszystkie pliki C napisane przez mojego wykładowcę zaczynają się od #?

Dlaczego wszystkie pliki C napisane przez mojego wykładowcę zaczynają się od#? Przeglądam notatki z kursu C i każdy plik źr ... datkowa linia na end of the closing }) # #include <stdio.h> int main() { printf("Hello, World!"); return 0; }

Czy powinienem używać #define, enum lub const?

W projekcie C++, nad którym pracuję, mam flagę rodzaj wartości, która może mieć cztery wartości. Te cztery flagi można łączy ... ystym nowoczesnym C++ bez #defines, a ja użyłem przestrzeni nazw i szablonów w kilku spacjach, więc te też nie są wykluczone.