Embarcadero RAD Studio 13.0 Florence Architect Version 37.0.57242.3601 [2025, MULTILANG]

Страницы :   Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Ответить
 

temp128

Стаж: 16 лет 9 месяцев

Сообщений: 507

temp128 · 07-Янв-26 20:21 (3 дня назад, ред. 07-Янв-26 20:51)

olekot писал(а):
88670490Немного про умный компилятор.
проект x64, все по умолчанию, кроме двух флагов линковки rtl и компонентов с динамики -> на статику.
скрытый текст
Код:
switch(здесь_переменная)
{
    case 0xFF:
           здесь_код
        break;
    case 0xFE:
           здесь_код
        break;
    case 0xFD:
           здесь_код
        break;
    defaul:     <- здесь ошибка, не допечатал "t" и не обратил внимания что не покрасилось в ключевое.
           здесь_код
        break;
}
Результат: умный компилятор компилятор вполне разумно определил что "defaul" никому не известная лексема и безошибочно выбросил весь соответствующий кусок не делая вообще никаких предупреждений.
Таким образом в асме осталось только сравнение с 0xFD, 0xFE, 0xFF и default-ный jmp из всего блока.
Здравствуйте !
Ваш код не является ни синтаксически, ни семантически (по смыслу) не верным !
В языках С/С++ каждый оператор может иметь метку, однако никто не насилует Вас, как программиста, передавать на эту метку управление.
Вот поэтому компилятор и не ругается.
Ваш код, с точки зрения компилятора выглядит так:
скрытый текст
Код:
switch(здесь_переменная)
{
    case 0xFF:
        // здесь_код
        break;
    case 0xFE:
        // здесь_код
        break;
    case 0xFD:
        // здесь_код
        break;
        // В ручную созданный цикл do {} while () ;
        defaul:     // Это метка оператора, следующего за ней. Например такого:
            // здесь_код
            if ( условие ) goto defaul;
        break;
}
Иными словами, ваша метка defaul - принадлежит оператору, по уровню иерархии, ниже меток "case 0x...", поэтому компилятор, и не считает, что это неверная метка оператора switch, а Вы, просто не передали на неё управление !
Компилятор g++ ( в Linux ), тоже на это не ругается !
[Профиль]  [ЛС] 

olekot

Стаж: 13 лет 7 месяцев

Сообщений: 58


olekot · 08-Янв-26 03:30 (спустя 7 часов)

temp128 писал(а):
Компилятор g++ ( в Linux ), тоже на это не ругается !
Таки да. Мои смутные воспоминания оказались ошибочными. Напрасный наезд с моей стороны на ембу.
[Профиль]  [ЛС] 

temp128

Стаж: 16 лет 9 месяцев

Сообщений: 507

temp128 · 08-Янв-26 04:20 (спустя 49 мин., ред. 08-Янв-26 13:54)

olekot писал(а):
88676418...Напрасный наезд с моей стороны на ембу.
Да ладно, у них есть более непонятные моменты - вот сам в RAD Studio 12.2 натолкнулся. Причем большинство компиляторов работает классически, только их bcc64x "по новоому" ! По моему это неправильно. Вот я писал, как у них в bcc64x работает.
Да и новинка - нашел глючёк в RAD Studio 12.3. Стал играться с вашим кодом и нашел.
  1. Написал такой код:
    Код:
    #include <iostream>
    int main(int argc, char *argv[])
    {
        std::cout << "argc = " << argc << std::endl;
        for (int I = 0; I < argc; ++I)
            std::cout << "argv[" << I << "] = " << argv[I] << std::endl;
        return 0;
    }
  2. Да и возьми - положи его в каталог "d:\dir with spaces"
И что-же видим ( при запуске из IDE, с одним параметром - 255 ):
  1. Для платформы Win32:
    Код:
    argc = 2
    argv[0] = D:\dir with spaces\.\Win32\Debug\app.exe
    argv[1] = 255
  2. Для платформы Win64:
    Код:
    argc = 4
    argv[0] = D:\dir with spaces\Win64\Debug\app.exe
    argv[1] = with
    argv[2] = spaces\Win64\Debug\app.exe
    argv[3] = 255
  3. Для платформы Win64 (modern):
    Код:
    argc = 4
    argv[0] = D:\dir
    argv[1] = with
    argv[2] = spaces\Win64x\Debug\app.exe
    argv[3] = 255
Хоть стой, хоть падай . Три варианта и все 3 разные !!!
К счастью, в 13 версии, уже поправаили, но опять, как-то криво - в Win32 в пути присутствует точка, а в Win64, Win64x, пути склеили красиво - без точки ( см. параметр argv[0] ) !
Единообразно сделать, для всех платформ, видно не судьба !
[Профиль]  [ЛС] 

jack_nuclear

Стаж: 15 лет 8 месяцев

Сообщений: 4


jack_nuclear · 09-Янв-26 17:42 (спустя 1 день 13 часов, ред. 09-Янв-26 17:42)

В хостс все блокировки есть, дефендер отключен, виртуалка свежая, sdk поставил - не могу никак поставить. Патч не работает. Какие еще будут советы, кроме тех, что в шапке и кейгене? Я уже все перепробовал... С каждой попыткой чистил все, что указано в шапке
[Профиль]  [ЛС] 

asimon_a

Стаж: 13 лет 4 месяца

Сообщений: 4


asimon_a · 10-Янв-26 18:11 (спустя 1 день)

Как у этого ублюдка выключить подстановку своего говна в код?
[Профиль]  [ЛС] 

temp128

Стаж: 16 лет 9 месяцев

Сообщений: 507

temp128 · 10-Янв-26 20:57 (спустя 2 часа 45 мин., ред. 10-Янв-26 20:58)

asimon_a писал(а):
88687863Как у этого ублюдка выключить подстановку своего говна в код?
Откройте Help, и почитайте в нём:
RAD Studio Topics | IDE Reference and Utilities | RAD Studio Menu Commands and Dialogs | Tools Menu | Tools Options | Editor Options | Source Options
Там всё доступным языком написано - Прибегнете к рецепту конька горбунка - "Царь три раза перекрестился, бух в котел и там сварился. Сварился !"
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error