Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
#1

Сравнение в препроцессоре - C++

21.06.2016, 10:24. Просмотров 755. Ответов 22
Метки нет (Все метки)

нужна условная компиляция
корректна ли такая конструкция (утрирую)
C++
1
2
3
4
5
6
#define A 10
#define B 10
#if A==B
 
..............
#endif
Добавлено через 8 минут
не получилось утрировать
на такую конструкцию Keil не ругается
вот кусок реального кода
где то в заголовочных файлах
C++
1
#define USART3              ((USART_TypeDef *) USART3_BASE)
еще где то
C++
1
2
3
4
5
#define PERIPH_BASE           ((uint32_t)0x40000000)
//....................................
#define APB1PERIPH_BASE       PERIPH_BASE
// ...............................................
#define USART3_BASE           (APB1PERIPH_BASE + 0x4800)

мой файл
C++
1
2
3
4
5
#define USARTDMX USART3
 
#if USARTDMX == USART3
//......................
#endif
ругается собака из за того что указатели?

Добавлено через 7 минут
вот ошибки
C:\STM\project\RadioDMX\MyFile\UART_DMX.c(14): error: #29: expected an expression
#if USARTDMX==USART3
C:\STM\project\RadioDMX\MyFile\UART_DMX.c(14): error: #59: function call is not allowed in a constant expression
#if USARTDMX==USART3
C:\STM\project\RadioDMX\MyFile\UART_DMX.c(14): error: #18: expected a ")"
откуда он функцию взял?
такое ошушенье, что со скобками запутался
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 10:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение в препроцессоре (C++):

"Циклы" на препроцессоре - C++
Хотелось данную информацию включить в блог, но пока не понимаю, как это аккуратно сделать. А потому просто тему помещу на форум, а в блоге...

Сравнение двух предложений по смыслу - C++
Необходимо сравнить два коротких предложения по смыслу. Я так понимаю, нужно семантическое сравнение предложений. Как его можно...

сравнение двух лиц людей - C++
Здравствуйте! подскажите пожалуйста, есть ли в сети готовые библиотеки на Си или С++, которые выдают % схожести одного лица на...

БПФ и сравнение двух генетических последовательностей - C++
Надеюсь, что тут мне помогут. Написал БПФ, но теперь даже в голову не приходит, как мне использовать БПФ для сравнения двух ген....

Сравнение процессов - C++ Builder
Добрый вечер. Уже спрашивал подобное,но теперь немного другая ситуация.Написал программу. Есть мемо и таймер. Через определённые промежутки...

Сравнение скорости - C++ Builder
Вопрос теоретический: что работает быстрее-поразрядное И,ИЛИ (& |),либо логическое И,ИЛИ(&& ||)и в чем их разница?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
21.06.2016, 16:18  [ТС] #16
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну вот три распространенных компилятора, короткие примеры:
missing binary operator before token "0x40000000"
fatal error C1017: invalid integer constant expression
token is not a valid binary operator in a preprocessor subexpression
ну и мой
C:\STM\project\RadioDMX\MyFile\UART_DMX.c(14): error: #29: expected an expression
поди догадайся че он хочет не люблю я макросы
0
DrOffset
7147 / 4288 / 966
Регистрация: 30.01.2014
Сообщений: 7,091
21.06.2016, 16:20 #17
Цитата Сообщение от ValeryS Посмотреть сообщение
поди догадайся че он хочет
Это да.

Цитата Сообщение от ValeryS Посмотреть сообщение
token is not a valid binary operator in a preprocessor subexpression
Вот, называется почувствуй качество диагностики Сlang. Все четко и ясно Везде бы так было.
0
_liv_
214 / 214 / 82
Регистрация: 07.10.2015
Сообщений: 604
Завершенные тесты: 1
21.06.2016, 16:30 #18
Цитата Сообщение от ValeryS Посмотреть сообщение
из за того что указатели?
ValeryS, похоже, что у компилятора "заходят шарики за ролики" ,
когда разбирается конструкция #if, у которой и в левой, и в правой частях стоят макросы

Я бы порекомендовал несколько упростить задачу для компилятора.

#define USARTDMX USART3
#define USARTNUM 3

#if USARTNUM == 3

Добавлено через 3 минуты
ValeryS, собственно, так и было сделано... Слегка опоздал...
1
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
21.06.2016, 16:35 #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Можно код целиком, который работает, версию компилятора и хостовой операционной системы?
код целиком я привел вот он еще разок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef int uint32_t;
struct USART_TypeDef {};
 
#define PERIPH_BASE           ((uint32_t)0x40000000)
#define APB1PERIPH_BASE       PERIPH_BASE
#define USART3_BASE           (APB1PERIPH_BASE + 0x4800)
 
#define USART3              ((USART_TypeDef *) USART3_BASE)
 
#define USARTDMX USART3
 
#if USARTDMX == USART3
#define XXX 123
#else
#define XXX 000
#endif
 
//далее в тексте программы (у меня - в конструкторе формы - слепил приложение в одни клик - поэтому приводить специфический код думаю смысла нет) идет
int xxx = XXX;
Borland C++ Builder 6 Windows XP SP 3
0
_liv_
214 / 214 / 82
Регистрация: 07.10.2015
Сообщений: 604
Завершенные тесты: 1
21.06.2016, 16:48 #20
ValeryS, вот так работает:
C++
1
#if (uint32_t)USARTDMX == (uint32_t)USART3
Добавлено через 7 минут
ValeryS, хотя нет, погорячился, не работает...
1
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
21.06.2016, 16:50  [ТС] #21
Цитата Сообщение от _liv_ Посмотреть сообщение
ValeryS, вот так работает:
как говорит доктор
Цитата Сообщение от DrOffset Посмотреть сообщение
Как только в дело входит типизация, то лавочка сворачивается Типизация - дело компилятора.
посему не буду экспериментировать, оставлю лишний дефайн
а то завтра компилятор сменю и опять блох ловить
0
DrOffset
7147 / 4288 / 966
Регистрация: 30.01.2014
Сообщений: 7,091
21.06.2016, 17:01 #22
Цитата Сообщение от vxg Посмотреть сообщение
Borland C++ Builder 6
Ну, видимо у него особо умный препроцессор (что неудивительно, учитывая его дружбу с делфи из коробки).
Скажем так, это не мейнстрим
1
elch10
38 / 21 / 4
Регистрация: 27.04.2015
Сообщений: 164
Завершенные тесты: 2
21.06.2016, 19:50 #23
Вот что значит выстрелить себе в ногу
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2016, 19:50
Привет! Вот еще темы с ответами:

Сравнение объектов? - C++ Builder
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include...

Сравнение папок - C++ Builder
Ребят, можно ли так делать? if((Edit1->Text!=Edit3->Text)&(CheckBox2->Checked==false)) { Label6->Caption="Размеры папок не...

Сравнение дат - C++ Builder
Добрый день. Существует ли функция для сравнения переменных типа DateTime? Т.е. у меня есть массив DateTime a и переменная DateTime b....

@media в препроцессоре Sass - HTML, CSS
Непонятно, как записать корректно запрос в Sass (не в Scss): @media screen and (min-width: 320px) and (max-width: 580px) Тяжело...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.06.2016, 19:50
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru