Re[5]: Несколько замечаний по поводу качества кода
От: TSS_TSS http://kitrap08.blogspot.com/
Дата: 20.11.15 15:33
Оценка:
Здравствуйте, EreTIk, Вы писали:

TSS>>Да, вероятно я не прав насчет стандарта. Тем не менее, по умолчанию компилятор всегда лепит пролог, если явно не указать ему этого не делать. В сорцах win10 видимо явно указана директива __declspec(naked).


ETI>Думаю, что дело в версии и/или настройках компилятора. Пример:

ETI>
ETI>void (*g_pFunc)() = nullptr;

ETI>extern "C"
ETI>__declspec(dllexport)
ETI>void f()
ETI>{
ETI>    g_pFunc();
ETI>}
ETI>


ETI>
>>cl /O2 /Zi /MTd /EHsc test.cpp /link /RELEASE /OPT:REF
ETI>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
ETI>Copyright (C) Microsoft Corporation.  All rights reserved.

ETI>test.cpp
ETI>Microsoft (R) Incremental Linker Version 9.00.30729.4999
ETI>Copyright (C) Microsoft Corporation.  All rights reserved.

ETI>/out:test.exe
ETI>/debug
ETI>/RELEASE
ETI>/OPT:REF
ETI>test.obj
ETI>   Creating library test.lib and object test.exp
ETI>


ETI>
ETI>f:         FF25C03F4200                   jmp          d,[000423FC0]
ETI>.00401006: CCCCCCCCCCCCCCCCCCCC           int          3
ETI>


Это безусловно зависит от компилятора, но все таки мы говорим про windows, а она использует микрософтовский компилятор. Соответственно, с прологом там все более менее понятно. Хотя признаться, я не знаю как с этим дела в последних версиях компиляторов.
http://kitrap08.blogspot.com/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.