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

8
Przeciążenie makra na liczbę argumentów
Mam dwa makra FOO2i FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... Chcę zdefiniować nowe makro FOOw następujący sposób: #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) Ale to nie działa, ponieważ makra nie przeciążają wielu argumentów. Bez modyfikacji FOO2i FOO3czy istnieje jakiś sposób zdefiniowania makra FOO(przy użyciu __VA_ARGS__lub w inny sposób), aby …
183 c  macros  c-preprocessor 

30
Kiedy makra C ++ są korzystne? [Zamknięte]
Zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby skupiało się na jednym problemie, edytując ten post . Zamknięte 2 lata temu . Popraw to pytanie C preprocesor jest uzasadniony strach i odrzucani przez społeczność C ++. Funkcje wbudowane, …



6
Używanie __FILE__, __LINE__ i __FUNCTION__ w C ++
Zakładając, że C ++ wspiera je kompilatora, czy jest jakiś szczególny powód nie do użytku __FILE__, __LINE__a __FUNCTION__do rejestrowania i celów debugowania? Przede wszystkim interesuje mnie podawanie użytkownikowi wprowadzających w błąd danych - na przykład zgłaszanie nieprawidłowego numeru linii lub funkcji w wyniku optymalizacji - lub przyjmowanie w rezultacie spadku …

2
Jak dwukrotnie połączyć z preprocesorem C i rozwinąć makro, jak w „arg ## _ ## MACRO”?
Próbuję napisać program, w którym nazwy niektórych funkcji są zależne od wartości określonej zmiennej makra z makrem takim jak to: #define VARIABLE 3 #define NAME(fun) fun ## _ ## VARIABLE int NAME(some_function)(int a); Niestety, makro NAME()zamienia to na int some_function_VARIABLE(int a); zamiast int some_function_3(int a); więc jest to zdecydowanie niewłaściwy …

10
Standardowa alternatywa dla sztuczki ## __ VA_ARGS__ GCC?
Istnieje dobrze znany problem z pustymi argumentami dla makr wariadycznych w C99. przykład: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); Użycie BAR()powyższego jest rzeczywiście nieprawidłowe zgodnie ze standardem C99, ponieważ rozszerzy się do: printf("this breaks!",); Zwróć uwagę na końcowy przecinek - nie działa. Niektóre …

3
Jaki jest cel pojedynczego znaku krzyżyka / krzyżyka (#) we własnym wierszu w preprocesorze C / C ++?
I zostały patrząc na Boost kodu źródłowego biblioteki, a ja zauważyłem, że często nie są to pojedyncze znaki funta bez żadnych dyrektyw preprocesora dołączonych do nich. Przeczytałem podręcznik preprocesora GCC i przewodnik specyfikacji i nie mogę znaleźć nic na ten temat. (1) #ifndef BOOST_CONFIG_HPP (2) # include <boost/config.hpp> (3) #endif …
145 c++  c  boost  c-preprocessor 

18
„#Include” plik tekstowy w programie w języku C jako znak []
Czy istnieje sposób na dołączenie całego pliku tekstowego jako ciągu w programie C w czasie kompilacji? coś jak: plik.txt: This is a little text file main.c: #include <stdio.h> int main(void) { #blackmagicinclude("file.txt", content) /* equiv: char[] content = "This is\na little\ntext file"; */ printf("%s", content); } uzyskanie małego programu, który …

15
Powinienem użyć #define, enum czy const?
W projekcie C ++, nad którym pracuję, mam wartość typu flagi, która może mieć cztery wartości. Te cztery flagi można łączyć. Flagi opisują rekordy w bazie danych i mogą być: nowy rekord usunięty rekord zmodyfikowany rekord istniejący rekord Teraz dla każdego rekordu chcę zachować ten atrybut, więc mogę użyć wyliczenia: …

14
Jak wyświetlić wartość #define w czasie kompilacji?
Próbuję dowiedzieć się, jakiej wersji Boost mój kod używa. Chcę zrobić coś takiego: #error BOOST_VERSION ale preprocesor nie rozwija BOOST_VERSION. Wiem, że mógłbym wydrukować go w czasie wykonywania z programu i wiem, że mógłbym spojrzeć na dane wyjściowe preprocesora, aby znaleźć odpowiedź. Czuję, że sposób na zrobienie tego podczas kompilacji …



3
Łączenie ciągów makr C / C ++
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 Czy można łączyć, że STR3 == "s1"? Możesz to zrobić, przekazując argumenty do innej funkcji Macro. Ale czy istnieje bezpośredni sposób?
121 c++  c  c-preprocessor 

4
Jak zidentyfikować platformę / kompilator na podstawie makr preprocesora?
Piszę kod wieloplatformowy, który powinien być kompilowany pod linuxem, Windows, Mac OS. W systemie Windows muszę obsługiwać Visual Studio i mingw. Jest kilka fragmentów kodu specyficznego dla platformy, które powinienem umieścić w #ifdef .. #endifśrodowisku. Na przykład tutaj umieściłem kod specyficzny dla win32: #ifdef WIN32 #include <windows.h> #endif Ale jak …

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.