Одиночные кавычки как разделитель в большом количестве? - PullRequest
0 голосов
/ 26 августа 2018

Я пытался скомпилировать части кода из проекта MAME и столкнулся с проблемой компиляции этого раздела в attotime.h:

// core components of the attotime structure
typedef s64 attoseconds_t;
typedef s32 seconds_t;

// core definitions
constexpr attoseconds_t ATTOSECONDS_PER_SECOND_SQRT = 1'000'000'000;
constexpr attoseconds_t ATTOSECONDS_PER_SECOND = ATTOSECONDS_PER_SECOND_SQRT * ATTOSECONDS_PER_SECOND_SQRT;
constexpr attoseconds_t ATTOSECONDS_PER_MILLISECOND = ATTOSECONDS_PER_SECOND / 1'000;
constexpr attoseconds_t ATTOSECONDS_PER_MICROSECOND = ATTOSECONDS_PER_SECOND / 1'000'000;
constexpr attoseconds_t ATTOSECONDS_PER_NANOSECOND = ATTOSECONDS_PER_SECOND / 1'000'000'000;

constexpr seconds_t ATTOTIME_MAX_SECONDS = 1'000'000'000;

Что выдает ошибку:

In file included from ~/git/mame/src/emu/emu.h:32,
                 from main.cpp:1:
~/git/mame/src/emu/attotime.h:54:56: warning: multi-character character constant [-Wmultichar]
 constexpr attoseconds_t ATTOSECONDS_PER_SECOND_SQRT = 1'000'000'000;
                                                        ^~~~~
~/git/mame/src/emu/attotime.h:54:64: warning: missing terminating ' character
 constexpr attoseconds_t ATTOSECONDS_PER_SECOND_SQRT = 1'000'000'000;
                                                                ^
~/git/mame/src/emu/attotime.h:54:64: error: missing terminating ' character
 constexpr attoseconds_t ATTOSECONDS_PER_SECOND_SQRT = 1'000'000'000;
                                                                ^~~~~
compilation terminated due to -Wfatal-errors.
make: *** [<builtin>: main.o] Error 1

Я не модифицировал код и не включал его, но я компилирую его в свой собственный Makefile. Я никогда не видел этот синтаксис и ничего не мог найти в Интернете.

Есть ли флаг g ++, который позволяет это? Я знаю, что могу использовать -Wno-multichar, чтобы избавиться от этого предупреждения, но все равно есть ошибка missing terminating ' character.

1 Ответ

0 голосов
/ 26 августа 2018

Используйте -std=c++14, так как разделителем является функция C ++ 14.См .: https://en.cppreference.com/w/cpp/language/integer_literal

Необязательные одинарные кавычки (') могут быть вставлены между цифрами в качестве разделителя.Они игнорируются компилятором.[начиная с C ++ 14]

...