Как использовать проверку #if c float константами определенными через #define - C (СИ)
Формулировка задачи:
Для примера, привожу код, который хочу реализовать:
На это компилятор выдает следующие возражения:
Error[Pe059]: function call is not allowed in a constant expression. Line 31
Модифицирую до следующего:
Он ругается уже так:
Error[Pe018]: expected a ")" Line 31
Зато после такого:
Выдает:
Error[Pe018]: expected a ")" Line 31
Fatal Error[Pe035]: #error directive: "Verify setup CLK". Line 32
В связи с этим подскажите, кто знает как реализовать задуманное? Желательно пример
#define Ar 5 #define Br 3 #define Cr ((uint32_t )(Ar/Br)) #if (Cr<5) // Line 31 #error "Verify setup CLK" #endif
#define Cr const static ((uint32_t )(Ar/Br)) #if (Cr<5) // Line 31 #error "Verify setup CLK" #endif
#define Cr (const static ((uint32_t )(Ar/Br))) #if (Cr<5) // Line 31 #error "Verify setup CLK" // Line 32 #endif
Решение задачи: «Как использовать проверку #if c float константами определенными через #define»
textual
Листинг программы
#include <stdio.h>
#define DIV ( 1000 )
#define FakeAr (1)
#define Ar ((double)(FakeAr) / (double)(DIV))
#define FakeBr (30000)
#define Br ((double)(FakeBr))
#define FakeCr (FakeAr * FakeBr)
#if ((FakeCr) < (5 * (DIV)))
#error "Vsyo ploho!"
#endif
#define Cr ((double)(FakeCr) / (double)(DIV))
int main(void) {
printf("Ar: %f\nBr: %f\nCr: %f\n", Ar, Br, Cr);
return 0;
}
Объяснение кода листинга программы
- Подключаем стандартную библиотеку ввода-вывода
- Определяем константы: — DIV равна 1000 — FakeAr равна 1 — Ar вычисляем как FakeAr, приведенную к типу double, деленную на DIV — FakeBr равна 30000 — Br вычисляем как FakeBr, приведенную к типу double — FakeCr вычисляем как произведение FakeAr и FakeBr
- Проверяем, что FakeCr меньше 5, умноженного на DIV
- Если условие в if выполняется, выводим сообщение
Vsyo ploho! - Определяем Cr как FakeCr, деленное на DIV
- В функции main выводим значения Ar, Br и Cr
- Возвращаем 0, чтобы указать, что программа успешно завершилась