Russian Qt Forum

Qt => Общие вопросы => Тема начата: juvf от Апрель 21, 2021, 12:23



Название: Разделители разрядов
Отправлено: juvf от Апрель 21, 2021, 12:23
Qt5.15.1, QtC 4.13.2, mingw MINGW 7.3.0-64

код
int asd = 0x1234'5678;

подсветка в QtC ошибка синтаксиса, при компиляции ошибка  
..\main_display.c:821:19: error: missing terminating ' character
   int asd = 0x1234'5678;
                   ^~~~~~
Пару лет назад использовал апострофы для разделения разрядов в QtC.

1) Как в мингвСИ заставить компилятор понимать апострофы?
2) Как в мингвС++ заставить компилятор понимать апострофы?
3) Как креатору объяснить, что на дворе 2021 и апострофы с 14 года не ошибка синтаксиса?


Название: Re: Разделители разрядов
Отправлено: kambala от Апрель 21, 2021, 12:37
а нужный стандарт языка указан в .pro/.qbs/CMakeLists?


Название: Re: Разделители разрядов
Отправлено: juvf от Апрель 21, 2021, 12:38
это как?


Название: Re: Разделители разрядов
Отправлено: kambala от Апрель 21, 2021, 12:46
у разных компиляторов разный стандарт С++ по умолчанию.

например, в .pro файле надо писать CONFIG += c++14


Название: Re: Разделители разрядов
Отправлено: juvf от Апрель 21, 2021, 12:57
в pro CONFIG += c++14 есть. С с++ всё нормально, сорри, поторопился. Компилятор умеет и даже QtC не ругается.
А вот с СИ проблема. И компилятор и QtC ругаетются.

Пробовал CONFIG += c14 - не помогает
Пробавал QMAKE_CFLAGS += -std=c14, пишет error: unrecognized command line option '-std=c14'; did you mean '-std=c11'?
пробовал QMAKE_CFLAGS += -std=c11 - 11-ый не умеет апострафы.


Название: Re: Разделители разрядов
Отправлено: kambala от Апрель 21, 2021, 13:28
с11 и даже с17 не умеет в апострофы. может для начала надо смотреть на стандарт/спецификацию языка? :)

как в .pro указать стандарт для С не знаю, наверное только через QMAKE_CFLAGS += -std=c<smth> (это уже будет от компилятора зависеть)


Название: Re: Разделители разрядов
Отправлено: juvf от Апрель 21, 2021, 14:27
с11 и даже с17 не умеет в апострофы. может для начала надо смотреть на стандарт/спецификацию языка? :)
Я а как сказал? Я где-то говорил обратное? Может для начала нужно почитать что я писал?

 


Название: Re: Разделители разрядов
Отправлено: juvf от Апрель 21, 2021, 14:41
Похоже мингв7.3 не умеет старше с11... ((( буду искать посвежее.


Название: Re: Разделители разрядов
Отправлено: kambala от Апрель 21, 2021, 15:58
Я а как сказал? Я где-то говорил обратное? Может для начала нужно почитать что я писал?
ты сказал только о том, что попробовал наугад, вместо того, чтобы заглянуть в справочник по языку
Похоже мингв7.3 не умеет старше с11... ((( буду искать посвежее.
и чем это тебе поможет с апострофами?


Название: Re: Разделители разрядов
Отправлено: juvf от Апрель 22, 2021, 06:23
ты сказал только о том, что попробовал наугад, вместо того, чтобы заглянуть в справочник по языку
где ты видишь, что я сказал "пробовал наугад"? Апострофы добавили в с++14, но.... например компилятор IAR... в IDE два диалекта c89 и с11. Выбираешь c11 и компилятор спокойно распознает апострофы-разделители. Некоторые считают с17/с18 не отдельный стандарт, а как с11 с дополнениями/исправлениями.

Цитировать
и чем это тебе поможет с апострофами?
ты либо тролишь, либо жёстко тупишь. я же писал мингв7.3 не умеет старше с11. Нужна версия посвежее....

Цитировать
даже с17 не умеет в апострофы
пруф?


Название: Re: Разделители разрядов
Отправлено: kambala от Апрель 22, 2021, 11:48
в гугле забанили что ли? http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2244.htm поиском не могу найти ничего, связанного с апострофами. попытка компиляции клэнгом в Макос это подтверждает независимо от выбранного стандарта:
Код
C++ (Qt)
int main()
{
 int a = 123'123;
 return 0;
}
Код:
❯ clang -std=c17 untitled.c
untitled.c:3:14: warning: missing terminating ' character [-Winvalid-pp-token]
  int a = 123'123;
             ^
untitled.c:3:14: error: expected ';' at end of declaration
  int a = 123'123;
             ^
             ;
1 warning and 1 error generated.
при компиляции этого кода как С++ все, как ожидаемо, нормально:
Код:
❯ clang++ -std=c++17 untitled.c
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
еще раз: стандарты С и С++ — это совершенно разные вещи, не надо их путать.

если твой IAR компилятор умеет что-то нестандартное, это его фичи/проблемы. (тут вспоминаем МС компилятор)


Название: Re: Разделители разрядов
Отправлено: juvf от Апрель 22, 2021, 12:31
Цитировать
еще раз: стандарты С и С++ — это совершенно разные вещи, не надо их путать.
Ещё раз "красное" и "рельсы" - это совершенно разные вещи, не надо их путать.

Цитировать
если твой IAR компилятор умеет что-то нестандартное
IAR не мой... и я ни о каких нестандартных вещах не говорю. Иар работает в стандарте с17/с18
Цитировать
The IAR C/C++ Compiler for Arm supports the INCITS/ISO/IEC 9899:2018 standard, also known as C18. C18 addresses defects in C11

Вобщем пока в MinGW это не умеет.... что делать? Может MSVC умеет? Смотрим описание на MSVC
Цитировать
In September 2020, Microsoft announced C11 and C17 standards support in MSVC
- ДАЛАДНА!!! Я думал что с11 уже 100 лет как включен, а его только в 2020 включили.... Пробую в онлайн компиляторе MSVC - а таки понимает апострофы....
Скачал, поставил только компилятор. Собрал холоворд - понимает апострофы.... конец банальный.... начал настраивать QtC.... коллега подключился к проекту... он собирает "порт" из этих же для linux на gcc7.3. У него переезд на посвежее - нереальный. Придется отложить до лучших времён. ((