Я хочу переопределить значение макро константы с другим значением. Теперь я знаю технику использования #undef
, а затем повторно #define
сам макрос, например:
#define LEN_OSG 59
....
#undef LEN_OSG
#define LEN_OSG 70
Я попытался бы сократить это и обнаружил, что возможно для переопределения макроконстанты с помощью другой директивы #define
:
#define LEN_OSG 59
....
#define LEN_OSG 70
Пример программы :
#include <stdio.h>
#define LEN_OSG 59
int main()
{
printf("LEN_OSG is %d.\n",LEN_OSG);
#define LEN_OSG 70
printf("LEN_OSG is %d.",LEN_OSG);
}
Конечно, оба g cc и clang выдают мне предупреждения:
предупреждение: "LEN_OSG" переопределено. (g cc)
и
предупреждение: макрос 'LEN_OSG' переопределен [-Wmacro-переопределен] (clang)
но они компилируют его (без опции -Werror
, конечно) и дают оба правильных результата:
Execution build compiler returned: 0
Program returned: 0
LEN_OSG is 59.
LEN_OSG is 70.
Мои вопросы:
- Могу ли я переопределить макрос с другим Директива #define, игнорируя это заданное c предупреждение?
- Влечет ли это какое-либо неопределенное поведение или может нанести вред программе?
Большое спасибо.