/ / Czy obsługiwane są makra wielowierszowe w GCC - gcc, makra, wielowierszowe

Czy makra Multiline w GCC są obsługiwane - gcc, makra, multiline

Czy makra wieloliniowe są obsługiwane (kompilowalne) wwersja gcc 3.2.4. Próbuję zbudować moje źródło, które ma makra z wieloma wierszami na hoście Linux, używając wyżej wspomnianej wersji gcc. Błąd kompilacji pojawia się w makrze, które jest wielowierszowe.

      #define YYCOPY(To, From, Count)       
do                    
{                  
YYSIZE_T yyi;                
for (yyi = 0; yyi < (Count); yyi++)  
(To)[yyi] = (From)[yyi];       
}                  
while (0)

Jeśli nie są obsługiwane, jakie jest obejście tego problemu, konwersja makra na funkcję lub inną opcję kompilatora może pomóc?

Dziękuję Ci.

-OGŁOSZENIE

Odpowiedzi:

3 dla odpowiedzi № 1

Odwrotne ukośniki, aby kontynuować makro, to standardowy preprocesor. Sprawdź dodatkowe spacje lub inne niewidoczne postacie po odwrotnym ukośniku.


2 dla odpowiedzi nr 2

Specyfikacja ANSI C wymaga kompilatorów dowesprzyj to - w szczególności standard mówi, że jeśli linia kończy się odwrotnym ukośnikiem bezpośrednio przed nową linią, preprocesor traktuje tę linię i kolejną linię jako jedną linię logiczną, tak jakby zarówno ukośnik odwrotny, jak i nowa linia nie istniały. Jeśli preprocesor tego nie zrobi, nie jest to zgodny preprocesor (lub bardziej technicznie: tłumacz, jak to nazywa standard).

GCC dąży do jak największej zgodności ze standardem ANSI C. Tak, obsługuje makra wielowierszowe zdefiniowane za pomocą ukośników odwrotnych na końcu linii.

Powodem są błędy kompilatoracoś innego. Nie używasz makra poprawnie. Bez opublikowania dokładnych komunikatów o błędach i kodu wywołującego makro nie można powiedzieć, co robisz źle.