Jest zdecydowanie nie #define za to, przynajmniej w mojej wersji GCC.
Aby zobaczyć wszystkie predefiniowane symbole preprocesora:
g++ -dM -E - < /dev/null
Nie sądzę, istnieje jakikolwiek sposób, aby przetestować te opcje. Jeśli jednak korzystasz z GCC 4.4 lub nowszego, możesz użyć opcji "optimize" function attribute lub "optimize" #pragma, aby włączyć określone opcje dla poszczególnych funkcji lub plików.
Na przykład, jeśli dodać do wspólnego pliku nagłówka:
#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif
... należy włączyć opcję dla każdego pliku, który zawiera nagłówek.
[aktualizacja]
OK więc zajęło mi około 10 minut zbyt długo, aby skomponować tę odpowiedź. I tak pozostawiam to tutaj dla linków do dokumentów GCC.
Brzmi jak coś, co powinno być w stanie zrobić. –
@Code Monkey: Oczywiście flaga może być przekazana przez make. Ale jeśli kod źródłowy zostanie przeniesiony do nowego systemu tworzenia, wiedza może zostać utracona (na przykład, jeśli rozprowadzasz źródło do biblioteki). Chcę, żeby sam kod wiedział, czego potrzebuje. W ten sposób jest bardziej SUCHO. :) – paleozogt