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

C++

Войти
Регистрация
Восстановить пароль
 
 
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
#1

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

21.06.2016, 10:24. Просмотров 701. Ответов 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 ")"
откуда он функцию взял?
такое ошушенье, что со скобками запутался
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 10:24     Сравнение в препроцессоре
Посмотрите здесь:

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

Сравнение C++ с С# - C++
Какие существенные достоинства и недостатки C++ есть по сравнению с C# ?

Сравнение звуков в c++ - C++ Builder
Здравствуйте мне нужно написать программу задача которой в следующем. Программа все время с помощью микрофона веб камеры записывает звук,...

Сравнение 3 чисел - C++
Всем привет)) В колледже задали задание: написать программу, которая сравнивает 3 числа. Три варианта я сделал: #include <iostream> ...

Сравнение чисел - C++
Привет всем!Люди помогите написать программ,которая сравнивает три числа и выдает наибольшее и наименьшее из них.Задача из книги Дейтелов. ...

Сравнение векторов - C++
Создать класс, метод, который будет сравнивать два вектора по длине.

сравнение времени - C++
господа прогамисты как можно сравнить реальное време, с временем введённым с клавиатуры? Заранее всем огромное спасибо!!!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
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
поди догадайся че он хочет не люблю я макросы
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
21.06.2016, 16:20     Сравнение в препроцессоре #17
Цитата Сообщение от ValeryS Посмотреть сообщение
поди догадайся че он хочет
Это да.

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

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

#define USARTDMX USART3
#define USARTNUM 3

#if USARTNUM == 3

Добавлено через 3 минуты
ValeryS, собственно, так и было сделано... Слегка опоздал...
vxg
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
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
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 594
Завершенные тесты: 1
21.06.2016, 16:48     Сравнение в препроцессоре #20
ValeryS, вот так работает:
C++
1
#if (uint32_t)USARTDMX == (uint32_t)USART3
Добавлено через 7 минут
ValeryS, хотя нет, погорячился, не работает...
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
21.06.2016, 16:50  [ТС]     Сравнение в препроцессоре #21
Цитата Сообщение от _liv_ Посмотреть сообщение
ValeryS, вот так работает:
как говорит доктор
Цитата Сообщение от DrOffset Посмотреть сообщение
Как только в дело входит типизация, то лавочка сворачивается Типизация - дело компилятора.
посему не буду экспериментировать, оставлю лишний дефайн
а то завтра компилятор сменю и опять блох ловить
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
21.06.2016, 17:01     Сравнение в препроцессоре #22
Цитата Сообщение от vxg Посмотреть сообщение
Borland C++ Builder 6
Ну, видимо у него особо умный препроцессор (что неудивительно, учитывая его дружбу с делфи из коробки).
Скажем так, это не мейнстрим
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2016, 19:50     Сравнение в препроцессоре
Еще ссылки по теме:

Сравнение изображений - C++
ДОБРОЕ ВРЕМЯ СУТОК, уважаемые программисты! У меня будет такой вопрос: Как можно узнать содержимое JPEG файла для попикселного...

Сравнение дробей - C++
Здравствуйте, очень нужна ваша помощь. Помогите, пожалуйста с сравнение дробями. больше, меньше, равно. #include "stdafx.h" ...

сравнение массивов - C++
Доброго времени суток форумчане, помогите пожалуйста написать программу, есть 5 массивов одинаковой размерности, но с разным колличеством...

Сравнение функций - C++
Здравствуйте. Прошу помощи т.к. зашел в тупик. Задача: Требуется написать программу которая вычисляла тригонометрическую функцию двумя...

Сравнение векторов - C++
Вот имеется вектор <bool> длиной допустим 5, а второй вектор <bool> длиной 200. Вот мне надо сравнить первый вектор с частью второго,...


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

Или воспользуйтесь поиском по форуму:
elch10
38 / 21 / 4
Регистрация: 27.04.2015
Сообщений: 164
Завершенные тесты: 2
21.06.2016, 19:50     Сравнение в препроцессоре #23
Вот что значит выстрелить себе в ногу
Yandex
Объявления
21.06.2016, 19:50     Сравнение в препроцессоре
Ответ Создать тему
Опции темы

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