- 1
- 2
- 3
- 4
- 5
#ifdef ret
#undef ret
#endif
#define ret return
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−5
#ifdef ret
#undef ret
#endif
#define ret return
Говнокод или всё-таки нет? :)
З.Ы. Ты поломал код с асм вставками и любой код, который юзал переменную ret.
Поэтому, в нормальном C++ коде никаких вставок не должно быть, также как и goto. Тем более разные реализации компиляторов смотрят на эти ебучие вставки по-разному, а некоторые вообще запрещают использование определенного типа асм-инструкций. Либо мы изначально что-либо пишем на Ассемблере, либо на C++. Иначе никак.
https://github.com/torvalds/linux/search?utf8=%E2%9C%93&q=int+ret
11,936 code results
А еще, в английском слово "ret", может быть глаголом, который означает "мочить" (коноплю); может быть сокращением от : 1) "retired", 2) "returned" (наш пациент), 3) "ring-emitter transistor" (транзистор с кольцевым эмиттером); и т.д. и т.п.
Если честно, практика именования переменных - вопрос спорный. Лично меня переменные с именем ret напрягают, я лучше буду использовать бг-мерзкий result или придам конкретный смысл.
да, я хотел возвратить именно мочёную коноплю, а не результат
практика задавать ret для имени возвращаемой переменной довольно распространенная, юзалась в обоих командах, где мне довелось поработать, и часто встречаю в статьях, опенсорсе. Хотя может сказывается работа преимущественно с С-подобным кодом уж не пыхарь ли ты часом?
Ах, так это еще и кресты... Тогда за такие макросы надо вообще анально карать.
...процессора и конпелятора.
А вот SSE инструкции компилятор еще может втулить в ответ на сишный код без каких-либо интринсиков и асмовставок
Неплохо звучит. Прям-таки компилятор, разработанный "под коноплёй", что, кстати, не исключение.
ну вот в вебе любят посреди HTML вставлять PHP который генерирует JavaScript который генерирует HTML, и ничего
Многие вебщики понятия не имеют, как работают всякие окошки, кнопки и прочие свистоперделки, не говоря уже о коде Ассемблера.
Возвращаясь к asm-вставкам в C++, то существует эмпирическое правило "Не используй asm-вставки!". Вместо них гораздо лучше asm-код вынести в отдельный asm-файл, а затем подключить к проекту.
Уважаю за свежий взгляд и небанальные выводы
Кроме того асмо вставки наверняка не стандартны и конпелятороспецифичны и как я уже грил в 64бит там буй
http://mariusbancila.ro/blog/2010/10/17/no-more-inline-asm-in-vc-on-x64/
хорош-ли код gсс под ARM?
x86 говно же
ламерский вопрос: а gcc умеет под win32 без цигвина?
mingw-w64?
Неужели старт в реальном режиме — это так плохо?
Внмиание, сейчас копмпьютерные гно борманд нам всё объяснит.
>>Неужели старт в реальном режиме — это так плохо?
Ну целый режим со своей адресацией ради старта? Не слишком-ли сложно?
Нужно отрефакторить и выкинуть старый мусор. Частично это уже сделано (в 64 нет сегментов и нет v86), но говна еще осталось.
Или вот взять IO. Зачем нужен отдельный неймспейс под него?
--------
В общем чем проще понять ISA процессора обычному программисту -- тем лучше. ISA x86 сложно (именно потому детей учат на примерах других CPU) и оно сложно not because of good reason, а по причине обратной совместимости.
Ваш кэп
Да, ось потом ставит свою гдт.
В общем-то сама гдт процу не особо нужна (кроме некоторых кейсов). Если бы при резете теневые регистры правильно заполнялись - он мог бы сразу в протектеде просыпаться. Но совместимостьс древним говном, все дела...
З.Ы. Хотя, по сути, она там и не нужна - старая фирмварь один хер на новых процах не взлетит.
Эксклюзивно для Борманда пустил душок свободы без модерации.
ну вот фирмваря грит
mov ax, 0x123456
как это 0x123456 превратится в физ. адрес для контролера памяти?
GDT проц читает только когда он суёт новый селектор в сегментный регистр:
- явный mov в сегментный регистр
- far call/jmp/ret
- вход в прерывание и выход из него
- lldt и ltr
Вот вроде и все кейсы. Каждая из этих инструкций читает одну запись из GDT и кеширует её в теневом регистре. И если твой код эти инструкции не юзает - можно какое-то время пожить совсем без GDT.
> как MMU работает
Никак, его в protected mode не обязательно включать (в отличие от long mode). Просто физические адреса равны виртуальным, вот и всё.
Я эти вставки воспринимаю примерно как сорт интринсиков, платформозависимые костыли.
> Кроме того асмо вставки наверняка не стандартны и конпелятороспецифичны
Ну естественно. Они и нужны, когда нужно сделать что-то изъебистое. Такое врятли может быть покрыто стандартом, а потому заведомо зависит от компилятора.
Кстати, в буст.атомик на 64-разрядной студии используют студио-специфичные интринсики.