Содержание
- Проблема с написание программы на C++ выдаёт ошибку: expected unqualified-id before numeric constant. Что делать?
- Arduino.ru
- Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru
- forum.arduino.ru
- Что значит ошибка expected unqualified-id before numeric constant? Как её исправить?
- Ожидаемый unqualified-id перед числовой константой для определения числа
- 2 ответов
- C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- Re: C++:expected unqualified-id
- [offtopic] Про жизнь.
- Re: [offtopic] Про жизнь.
- Re: [offtopic] Про жизнь.
- Re: [offtopic] Про жизнь.
Проблема с написание программы на C++ выдаёт ошибку: expected unqualified-id before numeric constant. Что делать?
#define TEPLO 1
#define vent 8
#define Vla A2
#define PIN_RELAY 7
#define PIN_PHOTO_SENSOR A1
#include
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
#include
#include «DHT.h»
#define DHTPIN A0
#define DHTTYPE DHT11
int val;
int waterPump = 3;
int PIN_RELAY = 4;
int LE = 5;
int LEW = 6;
DHT dht(DHTPIN, DHTTYPE);
byte heart[8] = <
0b10101,
0b10101,
0b01110,
0b00100,
0b01110,
0b10101,
0b10101,
0b00000,
>;
byte H[8] = <
0b00100,
0b00100,
0b01010,
0b01010,
0b10001,
0b10001,
0b10001,
>;
byte A[8] = <
0b10001,
0b11011,
0b10101,
0b10001,
0b10001,
0b10001,
0b10001,
>;
byte Q[8] = <
0b11111,
0b10001,
0b10001,
0b10001,
0b10001,
0b10001,
0b10001,
>;
void setup() <
Serial.begin(9600);
pinMode(waterPump, OUTPUT);
digitalWrite(waterPump, LOW);
pinMode(PIN_RELAY, OUTPUT);
digitalWrite(PIN_RELAY, LOW);
pinMode(LE, OUTPUT);
digitalWrite(LE, LOW);
pinMode(LEW, OUTPUT);
digitalWrite(LEW, LOW);
<
pinMode(PIN_RELAY, OUTPUT);
>
dht.begin();
pinMode(3, OUTPUT);
delay(2000);
pinMode(waterPump, OUTPUT);
digitalWrite(PIN_RELAY, HIGH);
digitalWrite(TEPLO, HIGH);
>
void loop() <
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
lcd.createChar(1, heart);
lcd.createChar(2, H);
lcd.createChar(3, A);
lcd.createChar(4, Q);
lcd.begin(16, 2);
lcd.print(«B»);
lcd.print(char(2));
lcd.print(«A»);
lcd.print(char(1));
lcd.print(«H»);
lcd.setCursor(6, 0);
lcd.print(h, 1);
lcd.setCursor(12, 0);
lcd.print(«IT-8»);
lcd.setCursor(0, 1);
lcd.print(«T»);
lcd.print(«E»);
lcd.print(char(3));
lcd.print(char(4));
lcd.setCursor(5, 1);
lcd.print(t,1);
lcd.setCursor(10, 1);
lcd.print(«Nikita»);
<
if (analogRead (PIN_PHOTO_SENSOR) 30) digitalWrite(waterPump, LOW);
else digitalWrite(waterPump, HIGH);
>
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if ((t) > 25) digitalWrite(TEPLO, HIGH);
else digitalWrite(TEPLO, LOW);
<
if ((t) Лучший ответ
sketch_apr29a:4: error: expected unqualified-id before numeric constant
Источник
Arduino.ru
Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru
forum.arduino.ru
Что значит ошибка expected unqualified-id before numeric constant? Как её исправить?
Код ошибки «Arduino: 1.8.13 (Windows 10), Плата:»Arduino Nano, ATmega328P (Old Bootloader)»
In file included from C:UsersПенёкDocumentsArduinosketch_aug15asketch_aug15a.ino:4:0:
C:Users����DocumentsArduinolibrariesTime-master/Time.h:1:2: warning: #warning «Please include TimeLib.h, not Time.h. Future versions will remove Time.h» [-Wcpp]
#warning «Please include TimeLib.h, not Time.h. Future versions will remove Time.h»
sketch_aug15a:9:11: error: expected unqualified-id before numeric constant
C:UsersПенёкDocumentsArduinosketch_aug15asketch_aug15a.ino: In function ‘void setup()’:
sketch_aug15a:120:7: error: unable to find numeric literal operator ‘operator»»dig_display.init’
C:UsersПенёкDocumentsArduinosketch_aug15asketch_aug15a.ino: In function ‘void loop()’:
C:UsersПенёкDocumentsArduinosketch_aug15asketch_aug15a.ino:166:27: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
sketch_aug15a:195:10: error: unable to find numeric literal operator ‘operator»»dig_display.display’
sketch_aug15a:197:10: error: unable to find numeric literal operator ‘operator»»dig_display.display’
sketch_aug15a:199:10: error: unable to find numeric literal operator ‘operator»»dig_display.display’
sketch_aug15a:201:10: error: unable to find numeric literal operator ‘operator»»dig_display.display’
sketch_aug15a:203:10: error: unable to find numeric literal operator ‘operator»»dig_display.point’
expected unqualified-id before numeric constant
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»»
Сам код:
#include
#include
#include
#include
#include «TM1637.h»
#define CLK 6
#define DIO 5
TM1637 4dig_display(CLK, DIO);
// для данных времени
// для данных dd/mm
// для смены время / день-месяц
unsigned long millist=0;
OLED myOLED(4, 3, 4); //OLED myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
///// часы ..
byte decToBcd(byte val) <
return ( (val/10*16) + (val%10) );
>
byte bcdToDec(byte val) <
return ( (val/16*10) + (val%16) );
>
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
<
Wire.beginTransmission(0x68);
Wire.write(0);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
>
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
<
Wire.beginTransmission(0x68);
Wire.write(0);
Wire.endTransmission();
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
>
///// температура ..
float get3231Temp() <
byte tMSB, tLSB;
float temp3231;
Wire.beginTransmission(0x68);
Wire.write(0x11);
Wire.endTransmission();
Wire.requestFrom(0x68, 2);
if(Wire.available()) <
tMSB = Wire.read(); //2’s complement int portion
tLSB = Wire.read(); //fraction portion
temp3231 = (tMSB & B01111111); //do 2’s math on Tmsb
temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
>
else <
//oh noes, no data!
>
void setup()
<
Serial.begin(9600); // запустить последовательный порт
Serial.begin(9600);
myOLED.begin();
Wire.begin();
// установка часов
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
second = 30;
minute = 0;
hour = 14;
dayOfWeek = 3; // день недели
dayOfMonth = 1; // день
month = 4;
year = 14;
//setDateDs1307(00, 40, 15, 6, 15, 8, 2020);
char time[10];
char data[11];
snprintf(time, sizeof(time),»%02d:%02d:%02d»,
hour, minute, second);
snprintf(data, sizeof(data), «%02d/%02d/%02d»,
dayOfMonth, month, year);
Источник
Ожидаемый unqualified-id перед числовой константой для определения числа
Я новичок в C++, поэтому я не знаю, что они имеют в виду с этой ошибкой в Примере phidget-code:
Main.cpp: 8: 16: ошибка: ожидаемый неквалифицированный-id перед числовой константой
есть ли синтаксическая ошибка? Или что-то еще? Я использую #define вместо int.
EDIT: добавлен полный журнал ошибок..
2 ответов
вы пытаетесь объявить переменную с тем же именем, что и макрос, но это невозможно сделать. Препроцессор уже протоптал программу, превратив ее в string 1234; , что не является допустимым объявлением. Препроцессор не имеет знаний о структуре программы, а макросы не следуют правилам области действия языка.
по возможности используйте языковые функции, такие как константы и встроенные функции, а не макросы. В этом случае, вы можете использовать
это будет ограничено глобальным пространством имен и может быть безопасно скрыто чем-то с тем же именем в более узкой области. Даже когда он скрыт, он всегда доступен как ::homeid .
когда вам действительно нужен макрос, разумно следовать соглашению об использовании SHOUTY_CAPS для макросов. Помимо привлечения внимания к потенциальным опасностям и странностям, связанным с использованием макросов, он не будет конфликтовать с любым именем, используя другую капитализацию.
эта линия в порядке.
скорее всего, компилятор жалуется не на само определение макроса, а на использовать макро. Пример:
при компиляции этого с GCC я получаю:
Это говорит вам, что числовая константа, запрашивающая жалобу, является частью определения макроса, но также и что этот макрос используется (в данном случае, по-видимому, случайно) в строке 3. Брать посмотрите, откуда в вашем коде происходит расширение макроса.
Источник
C++:expected unqualified-id
Сегодня услышал, что в терминах С++ структура похожа на класс, и может иметь конструкторыдеструкторы. Попробовал:
struct some_struct_in_memory<
Получаю от gcc:
error: expected unqualified-id before «void»
error: expected `)’ before «void»
Что это такое и как с этим бороться?
Re: C++:expected unqualified-id
Либо помести обьявление внутрь обьявления структуры, либо обьяви
Re: C++:expected unqualified-id
С классом у тебя то же самое было бы.
так нужно писать только внутри объявления структуры.
А вне ее нужно писать
Re: C++:expected unqualified-id
Структура не просто похожа на класс. Это и есть класс с единтсвенным отличием: доступ по умолчанию public.
Re: C++:expected unqualified-id
Спасибо всем большое!
Re: C++:expected unqualified-id
>Сегодня услышал, что в терминах С++ структура похожа на класс, и может иметь конструкторыдеструкторы.
Тогда это будет не структура а класс с дефолтным public доступом и дефолтным public наследованием. Если есть желание сохранить хоть немного единообразия в С++ проекте используй везде class, а struct делай в стиле Си для интероперабельности с Си кодом.
Re: C++:expected unqualified-id
>Спасибо всем большое!
Они все дали неправильные ответы.
Re: C++:expected unqualified-id
> Они все дали неправильные ответы.
не неправильные, а идеологически невыдержанные
Re: C++:expected unqualified-id
Почему неверные? То что структура С++ задумывалось для совместимости не маешает ей быть классом.
Re: C++:expected unqualified-id
>Почему неверные? То что структура С++ задумывалось для совместимости
Для совместимости с чем? Если она не POD, то она не совместимая
>не маешает ей быть классом
А какой смысл дублировать сущность? Неужели ради того чтобы один раз public не написать?
Re: C++:expected unqualified-id
На сколько я понимаю введено для совместимости c сишными структурами.
Re: C++:expected unqualified-id
Так что же неверно в выше написаном?
Re: C++:expected unqualified-id
Дело в том, что эта структура пишется в заmmapенную память, которая позже скидывается на диск. Эта структура — суперблок, так что мне бы не хотелось засорять плюсовыми прибамбасами образ диска 🙂
Re: C++:expected unqualified-id
>На сколько я понимаю введено для совместимости c сишными структурами.
Структура с конструктором/деструктором по С++ стандарту Plain Old Data (POD) не является и с сишными структурами может быть совместима только случайно.
Re: C++:expected unqualified-id
>Дело в том, что эта структура пишется в заmmapенную память, которая позже скидывается на диск. Эта структура — суперблок, так что мне бы не хотелось засорять плюсовыми прибамбасами образ диска 🙂
Делай методы init()/destroy(). У POD могут быть невиртуальные методы.
Re: C++:expected unqualified-id
значит без пользовательского ктора надо. Иначе она уже не под.
Re: C++:expected unqualified-id
> Структура с конструктором/деструктором по С++ стандарту Plain Old Data (POD) не является и с сишными структурами может быть совместима только случайно.
уточнение: если конструктор без деструктора, то POD:
A POD-struct is an aggregate class that has no non-static data members of type pointer to member, non-POD-struct, non-POD-union (or array of such types) or reference, and has no user-defined copy assignment operator and no user-defined destructor.
Re: C++:expected unqualified-id
> Дело в том, что эта структура пишется в заmmapенную память, которая позже
> скидывается на диск. Эта структура — суперблок,
А вот за это пороть нужно. Что будет, если такую чудо-ФС перенесут с 32-битной
машины на 64-битную? С little endian машины на big endian?
Re: C++:expected unqualified-id
Простите меня заранее. Пишется оно под 64 бита. Под встраиваемую операционку, которая _никогда_ не будет перенесена.
Re: C++:expected unqualified-id
>которая _никогда_ не будет перенесена.
так все говорят, а потом приходит тот кто платит деньги, и говорю а я хочу вот это..
Re: C++:expected unqualified-id
Она делается как очень специализированная оська для очень специфических целей. Простите за возможный понт (просто мне очень повезло), но платит большая-пребольшая фирма, которая заранее знает, чего хочет.
Re: C++:expected unqualified-id
> Пишется оно под 64 бита. Под встраиваемую операционку, которая _никогда_
> не будет перенесена.
Перенос ОС != перенос файловой системы. Вы точно уверены, что никто не захочет
подмонтировать и/или создать образ ФС на PC’юке (или ещё какой-нибудь
архитектуре)?
Re: C++:expected unqualified-id
Хоть и не мне было адресовано, но я всё же отвечу.
> Простите за возможный понт (просто мне очень повезло), но платит
> большая-пребольшая фирма, которая заранее знает, чего хочет.
Ничего страшного. Зато мы получили ещё одну возможность полюбоваться
на качество проприетарного кода.
Re: C++:expected unqualified-id
Работает принцип: «Мы можем сделать быстро, качественно, дёшево. Выберете два из этих трёх.» Чаще всего выбирают быстро и потом так никак и не могут определиться качественно или дёшево.
Re: C++:expected unqualified-id
Я все понимаю. Я _не_ программист на плюсах, и вопрос был детским. К тому же, я еще не спец, но весь код проверяется и «руководится». И мне почему-то кажется, что Вы тоже родились без талмудов Кнута в руках. Все учатся, я тоже, и вы тоже наверняка задавали глупые вопросы, не на форумах, так старшим по мозгам. Вполне естественно, что крупные фирмы берут к себе студентов интернами, а через несколько лет — на полноценную инженерную работу.
Честное слово, я ни на кого не наезжаю — я вам всем очень благодарен за ответы и ваш опыт. Особенно товарищу dilmah, который уже много раз меня спасал в сложных ситуациях.
Re: C++:expected unqualified-id
> Она делается как очень специализированная оська для очень специфических целей.
А что за железяка-то, которой она рулить будет? Интересуюсь для того, чтоб не купить её ненароком.
[offtopic] Про жизнь.
> И мне почему-то кажется, что Вы тоже родились без талмудов Кнута в руках.
Я не лез программировать ФС, да ещё и для встраиваемой ОСи. Да ещё и для production.
> Все учатся, я тоже, и вы тоже наверняка задавали глупые вопросы, не на форумах, так старшим по мозгам.
И не удивлялся, если получал в ответ втык (в том числе — и в буквальном смысле слова).
> Вполне естественно, что крупные фирмы берут к себе студентов интернами, а через несколько лет — на полноценную инженерную работу.
Ни разу это не естественно. Одновременно работать и учиться НЕ ВЫЙДЕТ. В результате и имеем таких «спецов». Как подумаю, что такие же рулят ядерными электростанциями, или лечат людей, жить страшно становится.
> Честное слово, я ни на кого не наезжаю
Я тоже. Только после общения с очередной кривой железкой очень хочется найти того, кто писал прошивку, или разводил печатную плату, etc, и как следует поблагодарить.
И вот я захожу на LOR, и вижу процесс появления такого изделия в реальном масштабе времени, так сказать.
Re: [offtopic] Про жизнь.
>Я не лез программировать ФС, да ещё и для встраиваемой ОСи.
Ну да, все начинали со змейки. Главное — ей не закончить. А для этого надо заниматься чем-то посложнее.
>Да ещё и для production.
Это еще не продакшн. Это прототип. Пруф оф концепт (с). А если оно выйдет в продакшн, но довольно нескоро.
>Одновременно работать и учиться НЕ ВЫЙДЕТ.
Сами же понимаете, что практический опыт в таких узких областях ценнее теории. Хотя здесь есть и теоретическое обучение.
>и как следует поблагодарить
Если через 4 года оно выйдет и вам не понравится — с меня ящик пива. Честно.
Re: [offtopic] Про жизнь.
> Ну да, все начинали со змейки.
Не, я начинал с падающего шарика (требовалось рассчитать траекторию падения с учётом сопротивления воздуха).
> Главное — ей не закончить.
Да некоторым (это не про Вас) лучше было бы на ней и закончить.
> Если через 4 года оно выйдет и вам не понравится — с меня ящик пива. Честно.
Слабое утешение, тем более, что я не употребяю.
Re: [offtopic] Про жизнь.
Все будет хорошо. Если весьма своеобразное высшее руководство не забросит офигенную идею. А такое уже не раз бывало 🙁
Источник
1 / 1 / 0
Регистрация: 25.03.2018
Сообщений: 2
26.03.2018, 23:30
[ТС]
4
Спасибо, буду изучать! Я не претендую на гуру, глуп в програмировании, хотел чтобы носом тыкнули) если у кого время будет, укажите на ошибку, легче будет учить основы!!! За ранее спасибо!)
Добавлено через 23 часа 11 минут
по изучал вопрос, с переменной float конечно напортачил… блин, но ошибку компиляции —
expected unqualified-id before ‘if’
expected unqualified-id before ‘else’
expected declaration before ‘}’ token
ни как не могу понять! Походу тупо синтаксис не верный! Прошу указать, или хотябы навести на информацию!!! вот скетч :
C++ | ||
|
Добавлено через 14 минут
ВСЕ ошибку решил, убрал фигурную скобку перед функцией «if» !! Но блин реле не срабатывает(
Добавлено через 7 минут
ВСЕ ЗАРАБОТАЛО!! перезагрузил и ок))) ВСЕМ БОЛЬШОЕ СПАСИБО ЗА НАВОДКИ!))
1
-
Не работает код для 3-х кнопок и 3-х светодиодов. Выдает:
Arduino: 1.8.2 (Windows 7), Плата:»Arduino/Genuino Uno»In file included from C:Program Files (x86)Arduinohardwarearduinoavrcoresarduino/Arduino.h:32:0,
from sketchsketch_jan18a.ino.cpp:1:
C:Program Files (x86)Arduinohardwarearduinoavrcoresarduino/binary.h:31:12: error: expected unqualified-id before numeric constant
#define B1 1
^
C:UsersЕленаDesktopsketch_jan18asketch_jan18a.ino:4:11: note: in expansion of macro ‘B1’
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»А вот код (на всяк случ):
const int L1 = 9;
const int L2 = 10;
const int L3 = 11;
const int B1 = 2;
const int B2 = 3;
const int B3 = 4;void setup()
{
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(B1, INPUT);
pinMode(B2, INPUT);
pinMode(B3, INPUT);
}void loop()
{
if (digitalRead(B1) == LOW)
{
digitalWrite(L1, LOW);
}
else
{
digitalWrite(L1, HIGH);
}
if (digitalRead(B2) == LOW)
{
digitalWrite(L2, LOW);
}
else
{
digitalWrite(L2, HIGH);
}
if (digitalRead(B3) == LOW)
{
digitalWrite(L3, LOW);
}
else
{
digitalWrite(L3, HIGH);
}
}
Причем любой другой код без проблем грузит. Закон подлости или что-то другое? -
1. Вставьте код правильно (кнопка «<>» на панели редактора);
2. Приведите полный код — в том, что вы привели, нет ни одного #define, на который ругается. -
Это полный код. Не в коде ошибка, а ошибка КОМПИЛЯЦИИ.
-
Понял в чём дело. Дайте другие имена переменным, ибо B1 — это в binary.h определение для двоичного представления числа 1. Короче, B1 как имя переменной — лучше не юзать.
arkadyf и ИгорьК нравится это.
-
Более того, вообще любые имена переменных, состоящие только из заглавных букв и цифр — лучше не юзать. Такие имена принято использовать для макросов препроцессора.
Так что советую во всех ваших переменных заменить большие буквы маленькими…
arkadyf и ИгорьК нравится это.
-
Программа загрузилась, спасибо. А вот работает как-то странно. По идее, светодиоды должны включаться и выключаться нажатием соответствующих кнопок, а они просто мигают.
-
Если не используете внешнюю подтяжку, включите внутреннюю
pinMode(B1, INPUT_PULLUP);
pinMode(B2, INPUT_PULLUP);
pinMode(B3, INPUT_PULLUP);http://wiki.amperka.ru/конспект-arduino:кнопка
-
козляра даже не знает, что названия городов пишутся с большой букы))))
-
не используй капслок.
Смотри на даты сообщений, когда отвечаешь.
Я новичок в C++, поэтому я не знаю, что они имеют в виду с этой ошибкой в Примере phidget-code:
Main.cpp: 8: 16: ошибка: ожидаемый неквалифицированный-id перед числовой константой
//verander de volgende informatie naar de informatie voor jouw database
#define dserver "oege.ie.hva.nl"
#define duser "username"
#define dpassword "password"
#define ddatabase "databasename"
#define homeid 1234 //line 8
есть ли синтаксическая ошибка? Или что-то еще? Я использую #define вместо int.
EDIT: добавлен полный журнал ошибок..
полный журнал ошибок:http://pastebin.com/3vtbzmXD
полный main.код СРР : http://pastebin.com/SDTz8vni
2 ответов
полная ошибка
error: expected unqualified-id before numeric constant
note: in expansion of macro ‘homeid’
string homeid;
^
вы пытаетесь объявить переменную с тем же именем, что и макрос, но это невозможно сделать. Препроцессор уже протоптал программу, превратив ее в string 1234;
, что не является допустимым объявлением. Препроцессор не имеет знаний о структуре программы, а макросы не следуют правилам области действия языка.
по возможности используйте языковые функции, такие как константы и встроенные функции, а не макросы. В этом случае, вы можете использовать
const int homeid = 1234;
это будет ограничено глобальным пространством имен и может быть безопасно скрыто чем-то с тем же именем в более узкой области. Даже когда он скрыт, он всегда доступен как ::homeid
.
когда вам действительно нужен макрос, разумно следовать соглашению об использовании SHOUTY_CAPS
для макросов. Помимо привлечения внимания к потенциальным опасностям и странностям, связанным с использованием макросов, он не будет конфликтовать с любым именем, используя другую капитализацию.
эта линия в порядке.
скорее всего, компилятор жалуется не на само определение макроса, а на использовать макро. Пример:
#define homeid 1234
void homeid() {
}
при компиляции этого с GCC я получаю:
so.cc:1:16: error: expected unqualified-id before numeric constant #define homeid 1234 ^ so.cc:3:6: note: in expansion of macro ‘homeid’ void homeid() { ^
Это говорит вам, что числовая константа, запрашивающая жалобу, является частью определения макроса, но также и что этот макрос используется (в данном случае, по-видимому, случайно) в строке 3. Брать посмотрите, откуда в вашем коде происходит расширение макроса.