#c #c
#c #c
Вопрос:
Я долгое время работал с C , и сейчас я работаю над проектом на C.
Я нахожусь в процессе преобразования программы на C в C.
У меня возникли трудности с константами, используемыми в программе.
В коде C у нас есть константы, определенные как
static const int X = 5 3;
static const int Y = (X 10) * 5
static const int Z = ((Y 8) 0xfff) amp; ~0xfff
В C эти определения выдают ошибку.
Когда я использую #defines вместо констант типа
#define X (5 3);
#define Y (((X) 10) * 5)
#define Z ((((Y) 8) 0xfff) amp; ~0xfff)
компилятор C жалуется на определения «Y» и «Z».
Не мог бы кто-нибудь, пожалуйста, помочь мне найти решение для этого.
Комментарии:
1. Люди уже предложили решение, но я просто хочу указать причину, по которой вам нужно удалить точку с запятой.
#define
в c препроцессор выполняет текстовую подстановку перед компиляцией, поэтому представьте, что вы берете содержимое X и вставляете его в Y, и вы, вероятно, увидите, в чем проблема.2. Некоторые люди также используют перечисления для объявления констант в C, например
enum { N = 100 };
.3.
static
является избыточным в примере C .const
объекты, которые явно не объявленыextern
, в любом случае имеют внутреннюю связь.4. Да, это была точка с запятой. Какой я глупый. Спасибо всем.
Ответ №1:
Вам нужно убрать точку с запятой из строки #define X
#define X (5 3)
#define Y (((X) 10) * 5)
#define Z ((((Y) 8) 0xfff) amp; ~0xfff)
Ответ №2:
#define X (5 3);
неправильно, это должно быть #define X (5 3)
(без ‘;’)
также имейте в виду разницу между использованием static const и #define: в static const значение фактически вычисляется, в #define это команда препроцессора, поэтому
#define n very_heavy_calc()
...
n*n;
приведет к вычислению very_heavy_calc() дважды
Ответ №3:
Другой вариант — использовать перечисление:
enum {
X = 5 3,
Y = (X 10) * 5,
Z = ((Y 8) 0xfff) amp; ~0xfff
};