Программы на C++. Форум разработчиков
Anonymous
Ошибка g++-8.4.0: переполнение в константном выражении [-fpermissive]
Сообщение
Anonymous » 27 окт 2024, 12:13
Я скомпилировал такую программу в Ubuntu18.04 с g++8.4.0, параметры компиляции -fno-strict-overflow -fwrapv.
Код: Выделить всё
#include
#include
namespace _crypt {
// clang-format off
// compile-time seed
#define XSTR_SEED ((__TIME__[7] - '0') * 1ull + (__TIME__[6] - '0') * 10ull + \
(__TIME__[4] - '0') * 60ull + (__TIME__[3] - '0') * 600ull + \
(__TIME__[1] - '0') * 3600ull + (__TIME__[0] - '0') * 36000ull)
// -----------------------------------------------------------------------------
// @return a pseudo random number clamped at 0xFFFFFFFF
constexpr unsigned long long linear_congruent_generator(unsigned rounds) {
return 1013904223ull + (1664525ull * ((rounds> 0) ? linear_congruent_generator(rounds - 1) : (XSTR_SEED) )) % 0xFFFFFFFF;
}
// -----------------------------------------------------------------------------
#define Random() linear_congruent_generator(10)
#define XSTR_RANDOM_NUMBER(Min, Max) (Min + (Random() % (Max - Min + 1)))
// -----------------------------------------------------------------------------
constexpr const unsigned long long XORKEY = XSTR_RANDOM_NUMBER(0, 0xFF);
// -----------------------------------------------------------------------------
template
constexpr Char encrypt_character(const Char character, int index) {
return character ^ (static_cast(XORKEY) + index);
}
template
class Xor_string {
public:
const unsigned _nb_chars = (size - 1);
Char _string[size];
// if every goes alright this constructor should be executed at compile time
inline constexpr Xor_string(const Char* string) : _string{} {
for (unsigned i = 0; i < size; ++i) _string[i] = encrypt_character(string[i], i);
}
// This is executed at runtime.
// HACK: although decrypt() is const we modify '_string' in place
const Char* decrypt() const {
Char* string = const_cast(_string);
for (unsigned t = 0; t < _nb_chars; t++) {
string[t] = string[t] ^ (static_cast(XORKEY) + t);
}
string[_nb_chars] = '\0';
return string;
}
};
} // namespace _crypt
//#ifdef _XOR_STINRG_
#define XorS(name, my_string) constexpr _crypt::Xor_string name(my_string)
#define XorString(my_string) []{constexpr _crypt::Xor_string expr(my_string); return expr; }().decrypt()
// Crypt normal string char*
#define _c( string ) XorString( string )
#define XorWS(name, my_string) constexpr _crypt::Xor_string name(my_string)
#define XorWideString(my_string) []{ constexpr _crypt::Xor_string expr(my_string); return expr; }().decrypt()
// _crypt wide characters
#define _cw( string ) XorWideString( string )
int main() {
static std::string test_string = _c(R"(
fdaslkjdsfafjaksdljfa;lksdflajljffffffffffffffffasdfklasjdfkljaskdljfkl;asjdf;aljdsf;kljasdklfjklsadjfklasdjkl;fjasdkl;dfj;lkasdjf;lkasdjf;lkjasd;klfjldsjf;kljasdklfjklsadjfklasdjkl
sdjf;lkasjdfkl;ajsd;lkfjaskl;djf;klasjdf;lkajsdlkfjal;sdkjfkl;asdjrfioqwejhotpiqhntg;lsadnvclmkasdhjdo;fijasd;lkfja;wlkjetpoiquropiqwejrlsjfaadlkjfoiqawhghsngb;lkasewriopqweujtophkjzdnvlkzxdnlkfahsjeftoipwqhytpoiqwhngfkjsafbgfnkljasjf;laksddjfopiqaweehtgoasnfd;laksddjfopiqaweehtgoasnfdldsfj;alskeeurtpoiqwe
kdjsf;lokasudtrfiopqweujtpoiqu;lqwekngsadndfl;ksadjvb;lkasujropiwqehjrtpoiwqethgl;knf;lkasvnv;lkanss;dletrjwioqeurpoqweujrpowqejtojsdfa;ljf
)");
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79130211/g-8-4-0-error-overflow-in-constant-expression-fpermissive[/url]
1730020387
Anonymous
Я скомпилировал такую программу в Ubuntu18.04 с g++8.4.0, параметры компиляции -fno-strict-overflow -fwrapv. [code]#include #include namespace _crypt { // clang-format off // compile-time seed #define XSTR_SEED ((__TIME__[7] - '0') * 1ull + (__TIME__[6] - '0') * 10ull + \ (__TIME__[4] - '0') * 60ull + (__TIME__[3] - '0') * 600ull + \ (__TIME__[1] - '0') * 3600ull + (__TIME__[0] - '0') * 36000ull) // ----------------------------------------------------------------------------- // @return a pseudo random number clamped at 0xFFFFFFFF constexpr unsigned long long linear_congruent_generator(unsigned rounds) { return 1013904223ull + (1664525ull * ((rounds> 0) ? linear_congruent_generator(rounds - 1) : (XSTR_SEED) )) % 0xFFFFFFFF; } // ----------------------------------------------------------------------------- #define Random() linear_congruent_generator(10) #define XSTR_RANDOM_NUMBER(Min, Max) (Min + (Random() % (Max - Min + 1))) // ----------------------------------------------------------------------------- constexpr const unsigned long long XORKEY = XSTR_RANDOM_NUMBER(0, 0xFF); // ----------------------------------------------------------------------------- template constexpr Char encrypt_character(const Char character, int index) { return character ^ (static_cast(XORKEY) + index); } template class Xor_string { public: const unsigned _nb_chars = (size - 1); Char _string[size]; // if every goes alright this constructor should be executed at compile time inline constexpr Xor_string(const Char* string) : _string{} { for (unsigned i = 0; i < size; ++i) _string[i] = encrypt_character(string[i], i); } // This is executed at runtime. // HACK: although decrypt() is const we modify '_string' in place const Char* decrypt() const { Char* string = const_cast(_string); for (unsigned t = 0; t < _nb_chars; t++) { string[t] = string[t] ^ (static_cast(XORKEY) + t); } string[_nb_chars] = '\0'; return string; } }; } // namespace _crypt //#ifdef _XOR_STINRG_ #define XorS(name, my_string) constexpr _crypt::Xor_string name(my_string) #define XorString(my_string) []{constexpr _crypt::Xor_string expr(my_string); return expr; }().decrypt() // Crypt normal string char* #define _c( string ) XorString( string ) #define XorWS(name, my_string) constexpr _crypt::Xor_string name(my_string) #define XorWideString(my_string) []{ constexpr _crypt::Xor_string expr(my_string); return expr; }().decrypt() // _crypt wide characters #define _cw( string ) XorWideString( string ) int main() { static std::string test_string = _c(R"( fdaslkjdsfafjaksdljfa;lksdflajljffffffffffffffffasdfklasjdfkljaskdljfkl;asjdf;aljdsf;kljasdklfjklsadjfklasdjkl;fjasdkl;dfj;lkasdjf;lkasdjf;lkjasd;klfjldsjf;kljasdklfjklsadjfklasdjkl sdjf;lkasjdfkl;ajsd;lkfjaskl;djf;klasjdf;lkajsdlkfjal;sdkjfkl;asdjrfioqwejhotpiqhntg;lsadnvclmkasdhjdo;fijasd;lkfja;wlkjetpoiquropiqwejrlsjfaadlkjfoiqawhghsngb;lkasewriopqweujtophkjzdnvlkzxdnlkfahsjeftoipwqhytpoiqwhngfkjsafbgfnkljasjf;laksddjfopiqaweehtgoasnfd;laksddjfopiqaweehtgoasnfdldsfj;alskeeurtpoiqwe kdjsf;lokasudtrfiopqweujtpoiqu;lqwekngsadndfl;ksadjvb;lkasujropiwqehjrtpoiwqethgl;knf;lkasvnv;lkanss;dletrjwioqeurpoqweujrpowqejtojsdfa;ljf )"); std::cout Подробнее здесь: [url]https://stackoverflow.com/questions/79130211/g-8-4-0-error-overflow-in-constant-expression-fpermissive[/url]
0 Ответы
16 Просмотры
Последнее сообщение Anonymous
03 авг 2024, 02:19
0 Ответы
16 Просмотры
Последнее сообщение Anonymous
25 ноя 2024, 08:14
0 Ответы
30 Просмотры
Последнее сообщение Гость
11 мар 2024, 21:17
0 Ответы
30 Просмотры
Последнее сообщение Anonymous
21 апр 2024, 10:53
0 Ответы
21 Просмотры
Последнее сообщение Anonymous
24 апр 2024, 05:51