Я не вижу, в чем здесь проблема; нет несовместимости между -std = c89 и _USE_MATH_DEFINES, один определяет, какой язык компилятор компилирует, другой определяет, какие части math.h будут включены.
Те части, которые включены, не определены как часть стандарта ISO C library , но это не то же самое, что не быть стандартным языком C, язык и библиотека - это отдельные объекты в C. не менее совместим с C89, чем если бы вы определили свои собственные макросы в своем собственном заголовке.
Однако я бы предложил, чтобы вы определяли макрос в командной строке, а не в коде:
-std=c89 -D_USE_MATH_DEFINES
Если вы когда-либо сталкивались с реализацией math.h, которая не определяет M_PI, то это легко исправить без модификации кода, аналогичным образом используя макросы, определенные в командной строке:
-std=c89 -DM_PI=3.14159265358979323846