Re[27]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 22.08.25 11:06
Оценка: +1
Здравствуйте, sergii.p, Вы писали:

SP>по-моему стало ещё более запутанней.


Да.

SP>Для тривиального случая да, компилятор может гарантировать.


Более того, вроде как стандарт определяет совсем немного случаев когда он может этот неявный lifetime начать. + несколько функций из stdlib, применение которых так же начинает implicit lifetime (malloc). + стандарт отдает на откуп производителям компиляторов аналогичные объявления для нестандартных функций вроде VirtualAlloc-а в Win32.

Но не дает возможности программисту самому обозначить функцию как начинающую implicit lifetime.
Т.е. так норм:
X * p = malloc(sizeof(X));

А так уже нет:
X * p = my_custom_alloc(sizeof(X));


SP>
SP>alignas(int) unsigned char buffer[64];
SP>const std::size_t offset = get_some_offset(); // значение неизвестно на этапе компиляции
SP>int* ptr = reinterpret_cast<int*>(buffer + offset);
SP>*ptr = 42;
SP>


SP>Формально UB. Но если offset % alignof(int) == 0 то вполне корректное поведение, но гарантировать это в compile time невозможно.


Как я понимаю, специально для таких случаев в C++23 добавили start_lifetime_as
Re[13]: C++ illegal instruction
От: · Великобритания  
Дата: 25.08.25 10:41
Оценка:
Здравствуйте, sergii.p, Вы писали:

s> ·>Так в данном случае это только С/С++ с приветом. В остальных ЯП всё в порядке с return.

s> в rust return вообще можно не ставить и оно скомпилируется
Так ведь не просто скомпилируется, но и будет работать. В отличие от.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[10]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 27.08.25 16:32
Оценка: -1 :)
Здравствуйте, Marty, Вы писали:

A>>То есть не более одной ошибки на страницу. И тогда это было нормально. Это не вызывало усилий и получалось само.

A>>Без этого человек считался неграмотным, и его в ВУЗ просто не брали. Ну потому что учить дурака бесполезно.
A>>Современные люди с высшим образованием такого даже представить себе такого не могут.

M>Какой у тебя огромный...


Ты начал что-то понимать...

M>>>Что за чудо? Никогда такого не видел. Покажешь?


A>>
A>>FILE * my_fopen( char *filename, char *flags )
A>>{
A>>   return fopen( filename,flags );
A>>}
A>>FILE *fr = my_fopen( "my_file", "r" ); // <--- вот тут будут два совершенно бессмысленных варнинга
A>>


M>Тут очень даже осмысленные варнинги. Внутри твоего my_fopen может происходить запись по переданном указателям, а ты передаёшь литералы. Эти литералы лежат в сегменте инициализированных данных, и туда писать нельзя. Вот тебе компилятор и говорит, что ты хрень творишь


Не надо говорить, что "может", когда "нету".
Внутри моего my_fopen запись не происходит. Это значит, что не может быть. Оно не происходит.
Вообще, похоже, что умение пользоваться глазами — это такой же уходящий скилл, как умение читать.
Есть три ситуации — когда "есть", когда "нету", и когда "может быть".
Так вот первые два варианта исключают третий.

Да, это уже не про программирование. Это про логику. Про обычную человеческую логику.

Течёт вода Кубань-реки куда велят большевики.
Re[10]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 27.08.25 16:34
Оценка: :))
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, alpha21264, Вы писали:


A>>
A>>FILE * my_fopen( char *filename, char *flags )
A>>{
A>>   return fopen( filename,flags );
A>>}
A>>FILE *fr = my_fopen( "my_file", "r" ); // <--- вот тут будут два совершенно бессмысленных варнинга
A>>


R>А RAII — это тоже зло, придуманное "миссионерами"?


1) Что такое RAII и при чём здесь оно?
2) Не съезжай с темы. Ты текст прочёл? Есть тут UB?

Течёт вода Кубань-реки куда велят большевики.
Re[11]: C++ illegal instruction
От: rg45 СССР  
Дата: 27.08.25 16:43
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Здравствуйте, rg45, Вы писали:


R>>Здравствуйте, alpha21264, Вы писали:


A>>>
A>>>FILE * my_fopen( char *filename, char *flags )
A>>>{
A>>>   return fopen( filename,flags );
A>>>}
A>>>FILE *fr = my_fopen( "my_file", "r" ); // <--- вот тут будут два совершенно бессмысленных варнинга
A>>>


R>>А RAII — это тоже зло, придуманное "миссионерами"?


A>1) Что такое RAII и при чём здесь оно?


Капец, ты сеньор, конечно

Это то, без чего сегодня даже на позицию сопливого джуна не возьмут.

A>2) Не съезжай с темы. Ты текст прочёл? Есть тут UB?


С какой темы я съезжаю? Я где-то говорил, что ЗДЕСЬ UB? Это просто говнокод, как правильно тебе сказали выше. Хоть и без UB.

Текст прочёл. То, что ты не видишь смысла в этих варнингах, просто ещё раз демонстрирует твой уровень.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 27.08.2025 17:44 rg45 . Предыдущая версия . Еще …
Отредактировано 27.08.2025 17:19 rg45 . Предыдущая версия .
Отредактировано 27.08.2025 17:15 rg45 . Предыдущая версия .
Отредактировано 27.08.2025 17:07 rg45 . Предыдущая версия .
Отредактировано 27.08.2025 16:49 rg45 . Предыдущая версия .
Отредактировано 27.08.2025 16:45 rg45 . Предыдущая версия .
Re[11]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 27.08.25 17:35
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Не надо говорить, что "может", когда "нету".

A>Внутри моего my_fopen запись не происходит. Это значит, что не может быть. Оно не происходит.
A>Вообще, похоже, что умение пользоваться глазами — это такой же уходящий скилл, как умение читать.
A>Есть три ситуации — когда "есть", когда "нету", и когда "может быть".
A>Так вот первые два варианта исключают третий.

A>Да, это уже не про программирование. Это про логику. Про обычную человеческую логику.


У тебя все функции inline? Когда ты наводишь мышку в IDE на вызов неизвестной тебе функции, тебе там показывают не только прототип, но и всё её тело, чтобы ты мог убедиться, что неконстантные параметры в ней не меняются?

Умение слышать, что тебе говорят, равно как и умение думать — похоже тоже уходящий скил, и не смотря на всю твою длину, он у тебя короткий
Маньяк Робокряк колесит по городу
Re[11]: C++ illegal instruction
От: rg45 СССР  
Дата: 27.08.25 18:05
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>
A>FILE * my_fopen( char *filename, char *flags )
A>{
A>   return fopen( filename,flags );
A>}
A>FILE *fr = my_fopen( "my_file", "r" ); // <--- вот тут будут два совершенно бессмысленных варнинга
A>


А если в каком-то месте программы фактические параметры не будут прибиты гвоздями как строковые литералы, а придут в виде указателей типа const char*, то вместо "бессмысленных" предупреждений, у тебя будет просто ошибка компиляции. Интересно даже, кто будет виноватым у тебя в этом случае.
--
Справедливость выше закона. А человечность выше справедливости.
Re[11]: C++ illegal instruction
От: tryAnother  
Дата: 27.08.25 19:02
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Здравствуйте, Marty, Вы писали:



A>>>
A>>>FILE * my_fopen( char *filename, char *flags )
A>>>{
A>>>   return fopen( filename,flags );
A>>>}
A>>>


Зачем нужна такая мощная функция?

А что, если потом кто-то (если, конечно, кто-то еще имеет доступ к этому божественному коду) напишет так?

FILE * my_fopen( char *filename, char *flags )
{
    char * ext = strstr(filename, ".txt");
    if(ext)
        strcpy(ext, ".xml");
    return fopen(filename, flags );
}


имеет право.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.