Muszę tymczasowo zastąpić makro, a następnie przywrócić je. Na przykład:Tymczasowe nadpisanie makra w preprocesorze C
#define FOO X
#save FOO
#define FOO Y
...
#restore FOO
Czy to możliwe w standardowym preprocesorze C? W GCC?
ADDED. O prawdziwym przykładzie świata. Używam globalnego makra dla wyjątku błędu. Działa jak assert
, ale do trwałego użytkowania, nie tylko dla wersji debugowania; więc na przykład zwykle wywołuję funkcje (z efektem ubocznym) wewnątrz makra. Jest zdefiniowany raz, ale definicja nie jest trwała; dlatego nie znam tego a priori. Dla jakiegoś kawałka kodu potrzebuję jego własnej, zmodyfikowanej wersji makra, ale chcę, aby zapisał ogólny styl kodu. Wygląda to paskudnie, gdy jedna część kodu używa jednego makro, druga część używa innego makra - oba makra mają ten sam cel , ale nieco inną implementację.
Dobrze, że tymczasowo zapisuję oryginalne makro, używam innej wersji dla części kodu, po tym przywracam oryginalne makro.
Chyba że wiesz dokładnie, co 'foo 'jest przed i po, nie, to nie jest możliwe. –
Dlaczego nie wystarczy zmienić nazwy makr? Wydaje się dużo prostsze. –
Nie mam pewności co do zwykłego C, ale w języku C++ można użyć funkcji push_macro: http://stackoverflow.com/questions/1543736/how-do-i-temporarily-disable-a-macro- expansion- in -cc –