Информация об изменениях

Сообщение Re[111]: Че ты лыбишься, хам трамвайный? от 23.08.2023 11:10

Изменено 23.08.2023 11:42 rg45

Re[111]: Че ты лыбишься, хам трамвайный?
Здравствуйте, vopl, Вы писали:

V>вот пример программы, которая well-formed и производит UB одновременно


V>
V>int main(int argc, char* argv[])
V>{
V>    return argc+220;//при достаточно больших argc имеем UB вследствие переполнения инта
V>}
V>


Нет, это как раз-таки пример ill-formed программы. Well-defined программа должна выглядеть как-то так:

int main(int argc, char* argv[])
{
    return argc <= std::numeric_limits<int>::max() - 220 ? argc + 220 : LOGIC_ERROR_CONSTANT;
}


Ну или накрайняк вот так:

int main(int argc, char* argv[])
{
    return int(unsigned(argc) + 220U);
}
Re[111]: Че ты лыбишься, хам трамвайный?
Здравствуйте, vopl, Вы писали:

V>вот пример программы, которая well-formed и производит UB одновременно


V>
V>int main(int argc, char* argv[])
V>{
V>    return argc+220;//при достаточно больших argc имеем UB вследствие переполнения инта
V>}
V>


Программа, порождающая UB, не может быть well-formed по определению. Well-formed программа могла бы выглядеть, например, как-то так:

int main(int argc, char* argv[])
{
    return argc <= std::numeric_limits<int>::max() - 220 ? argc + 220 : LOGIC_ERROR_CONSTANT;
}


Ну или накрайняк вот так:

int main(int argc, char* argv[])
{
    return int(unsigned(argc) + 220U);
}