Próbujesz rozwiązać ten problem: C++ How can I prevent my team developers from using integer version of abs by mistake? za pomocą makra, aby funkcja abs
przestała być użyteczna.Nie można ustawić standardowej funkcji zabronionej przy użyciu instrukcji preprocesora?
Jeśli skompiluję kod zawierający myabs(3);
z opcją g ++ -Dmyabs=abs
, kompilacja (myabs
zostanie zastąpiona przez abs
), dobra.
Teraz, jeśli mogę skompilować kod zawierający abs(3);
zg ++ opcję -Dabs=forbidden
kompiluje zbyt ... dlaczego nie podają, że forbidden
jest nieznany? Wygląda na to, że abs
nie jest zastępowane przez forbidden
podczas wstępnego przetwarzania ... dlaczego?
Jeśli jest on strzeżony przez strażników, możesz wymusić włączenie go za pomocą argumentu -include cmath kompilatora, a następnie zdefiniować makro abs (untried) – matt
Dobra odpowiedź: 'abs' jest zamieniane na' zabronione' przed dodaniem 'matematyki', nie po, więc trzeba zrobić '#undef abs' – jpo38