- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
#include <math.h>
#include <stdio.h>
double DoubleToTheInt(double base, int power) {
return pow(base, power);
}
int main() {
// приводим к указателю на функуцию с обратным порядком аргументов
double (*IntPowerOfDouble)(int, double) =
(double (*)(int, double))&DoubleToTheInt;
printf("(0.99)^100: %lf \n", DoubleToTheInt(0.99, 100));
printf("(0.99)^100: %lf \n", IntPowerOfDouble(100, 0.99));
}
Dummy00001 15.08.2016 11:09 # +18
и на арме похожая песня с d* регистрами.
протестировал - работает везде!
Antervis 15.08.2016 12:22 # +15
dxd 15.08.2016 12:30 # +15
Antervis 15.08.2016 12:42 # +14
dxd 15.08.2016 12:45 # +18
//fix
pdro1 10.04.2017 21:23 # −22
pdro11 10.04.2017 21:34 # −22
pdro7 10.04.2017 21:51 # −22
pdro8 10.04.2017 21:52 # −22
bormand 15.08.2016 17:41 # +16
Но ведь стандарт не обещает, что при этом получится что-то разумное...
Antervis 15.08.2016 19:02 # +19
bormand 15.08.2016 19:09 # +17
laMer007 16.08.2016 13:10 # +17
Soul_re@ver 16.08.2016 13:18 # +17
pdro7 10.04.2017 21:27 # −22
Antervis 16.08.2016 13:30 # +16
А с точки зрения стека - как 12 байт выделили, так и освободили, вообще пофиг
Soul_re@ver 16.08.2016 14:13 # +18
Даже если инт передадут через стек, один фиг будет дабл в регистре и инт на вершине стека.
В общем зависит от соглашения вызовов. Так как плавучка часто передаётся в своих регистрах, это будет работать в большинстве из них.
inkanus-gray 16.08.2016 14:45 # +18
Позабытый компилятор Watcom C, например, кладёт инт в eax, но только если он следует первым аргументом. В данном примере он нормально принимает дабл (потому что он кладётся в сопроцессор), но теряет инт, потому что сигнатура IntPowerOfDouble(int, double) предписывает класть инт в eax, а DoubleToTheInt(double, int) предписывает класть инт в стек.
P.S. А нет, вру, дабл он кладёт в обычный стек. Он только инты пытается через регистры «соптимизировать».
Soul_re@ver 16.08.2016 15:10 # +16
Собственно почти весь код, который "у меня работает" работает только на х86, а подобные товарищи очень больно бьются о любую нестандартную платформу, где соглашения о вызовах другие или легаси компилятор у которого свои собственные соглашения.
inkanus-gray 16.08.2016 15:19 # +17
pdro8 10.04.2017 21:32 # −22
3.14159265 22.07.2020 11:42 # 0
> Microsoft therefore recommends against using C++ interfaces at module boundaries
> Instead of C++, Microsoft recommends using C or COM interfaces, which are designed to have a stable ABI between compiler releases
Эпично.
Мы ехали, ехали и наконец приехали.
guest8 22.07.2020 14:16 # −999
3.14159265 22.07.2020 14:22 # +1
Забавно как крестушня бьёт себя в грудь: «дак у нас же эксепшены, у нас шаблоны, у нас RAII, у нас STL».
А в итоге что? Используйте для модуля Сишные хедеры и структы.
То ABI сишное порекомендуют. То от сишного линкера багры в крестах.
guest8 22.07.2020 15:20 # −999
guest8 22.07.2020 15:38 # −999
TEH3OPHblu_nemyx 22.07.2020 16:08 # 0
В другие слова: выбор из углерода есть только психически здоровый выбор.
guest8 22.07.2020 16:13 # −999
TEH3OPHblu_nemyx 22.07.2020 17:20 # 0
3.14159265 22.07.2020 17:23 # 0
Они как коньяк, с годами всё больше греют душу.
TEH3OPHblu_nemyx 22.07.2020 17:41 # 0
(a) смотрящий за проблемами
(b) C++ изувер, что нельзя видеть, что он пишущий реально только C любым путём
(c) получена правопередача в CS класс делать так.
Чувствовать свободно, чтобы загримировать (d).
gost 22.07.2020 18:13 # 0
guest8 22.07.2020 18:17 # −999
TOPT 22.07.2020 19:03 # 0
guest8 22.07.2020 19:04 # −999
TOPT 23.07.2020 01:40 # 0
gostinho 22.07.2020 21:49 # 0
guest8 22.07.2020 21:59 # −999
pdro3 10.04.2017 21:47 # −22
pdro8 10.04.2017 21:33 # −22
inkanus-gray 16.08.2016 14:16 # +15
guesto 16.08.2016 14:31 # −17
inkanus-gray 16.08.2016 15:00 # +15
1. У функции соглашение вызова fastcall.
2. Регистр способен вместить дабл (что не выполняется на 32-битных машинах).
Вообще вариантов много:
https://en.wikipedia.org/wiki/X86_calling_conventions
И это только для x86. На других процессорах могут быть и другие варианты.
pdro8 10.04.2017 21:27 # −22
pdro9 10.04.2017 21:33 # −22
pdro1 10.04.2017 21:44 # −22
pdro7 10.04.2017 21:51 # −22
pdro3 10.04.2017 21:30 # −22
pdro2 10.04.2017 21:46 # −22
pdro4 10.04.2017 21:48 # −22
pdro3 10.04.2017 21:29 # −22
pdro14 10.04.2017 21:56 # −22
inkanus-gray 15.08.2016 12:28 # +13
dxd 15.08.2016 12:32 # +16
void_main 15.08.2016 12:35 # −30
dxd 15.08.2016 12:39 # +13
nihau 15.08.2016 12:42 # +14
а не проще?
dxd 15.08.2016 12:44 # +12
pdro5 10.04.2017 21:31 # −22
pdro15 10.04.2017 21:37 # −22
pdro1 10.04.2017 21:45 # −22
pdro11 10.04.2017 21:54 # −22
pdro2 10.04.2017 21:29 # −22
inkanus-gray 15.08.2016 12:46 # +12
Сменить порядок аргументов нам никто не даст. А во-вторых, ничего не получится на платформах, где sizeof(int)≠sizeof(double):
http://ideone.com/otHyLL
inkanus-gray 15.08.2016 12:54 # +13
dxd 15.08.2016 12:54 # +13
j123123 15.08.2016 20:42 # +13
inkanus-gray 15.08.2016 21:09 # +13
pdro7 10.04.2017 21:26 # −22
pdro1 10.04.2017 21:28 # −22
dxd 15.08.2016 12:54 # +18
У меня версия из статьи скомпилилась и работает. Как из ideone вытащить параметры платформы?
inkanus-gray 15.08.2016 13:13 # +14
> Как из ideone вытащить параметры платформы?
Написать свою программку типа uname с пасьянсом и барышнями.
Dummy00001 16.08.2016 01:01 # +16
Догадываюсь что у тебя тоже есть серьёзные проблемы с "works for me" типами.
inkanus-gray 16.08.2016 14:15 # +13
С одной стороны, обилие платформ напрягает, потому что приходится слишком много всего изучать. С другой стороны, изучение других платформ помогает избавиться от синдрома «works for me».
HaskellGovno 15.08.2016 22:04 # +14
биты cpuid выведи например. гуглится cpuid хеловорлд довольно легко
pdro7 10.04.2017 21:32 # −22
bormand 15.08.2016 17:43 # +17
Кому оно должно? Сегодня компилятор хранит флоаты в fpu, а завтра на каком-нибудь arm'е включат соглашение с soft float'ами и всё пойдёт через обычный стек...
pdro11 10.04.2017 21:55 # −22
pdro12 10.04.2017 21:55 # −22
nihau 15.08.2016 12:34 # +16
pdro5 10.04.2017 21:25 # −22
pdro14 10.04.2017 21:37 # −22
pdro1 10.04.2017 21:44 # −21
pdro13 10.04.2017 21:56 # −22
inkanus-gray 15.08.2016 13:07 # +13
http://ideone.com/j7oAdB
Psionic 15.08.2016 20:49 # +14
inkanus-gray 15.08.2016 21:09 # +14
Psionic 16.08.2016 14:30 # +13
gost 16.08.2016 18:49 # +11
inkanus-gray 16.08.2016 18:58 # +14
Выберите зелёную ссылку:
Чёрная Зелёная Красная Синяя
Soul_re@ver 16.08.2016 19:03 # +16
inkanus-gray 16.08.2016 19:06 # +10
Soul_re@ver 16.08.2016 19:11 # +12
pdro6 10.04.2017 21:26 # −22
pdro4 10.04.2017 21:30 # −22
pdro5 10.04.2017 21:50 # −22
pdro5 10.04.2017 21:31 # −22
pdro3 10.04.2017 21:48 # −22
pdro8 10.04.2017 21:27 # −22
pdro2 10.04.2017 21:28 # −22
pdro2 10.04.2017 21:24 # −22
pdro9 10.04.2017 21:53 # −22
pdro7 10.04.2017 21:32 # −22
Dummy00001 15.08.2016 16:50 # +14
я не знаю чего я там ожидал. и почему говорят что это в С? во многих языках я уверен эта же бага будет (паскаль, ада, даже java в натив скомпилированая) потому что конвенция вызова схожа/одинаковая/основана на стандартной конвенции ABI (которая описывается структурами и типами С, но тем не менее абстракта).
Dummy00001 15.08.2016 17:00 # +12
3_14dar 15.08.2016 17:08 # −35
http://govnokod.ru/14052#comment345102
Dummy00001 15.08.2016 17:19 # +18
Shamill 15.08.2016 17:21 # −32
pdro4 10.04.2017 21:25 # −22
pdro15 10.04.2017 21:38 # −22
pdro16 10.04.2017 21:39 # −22
pdro13 10.04.2017 21:56 # −22
pdro6 10.04.2017 21:32 # −22
pdro5 10.04.2017 21:49 # −22
bormand 15.08.2016 19:11 # +16
Какое меткое слово.
3_14dar 15.08.2016 21:51 # −9
Dummy00001 15.08.2016 22:01 # +14
повторять какую-то херню ad infinitum, которую ты очевидно сам не понимашь, это не аргументация.
3_14dar 16.08.2016 01:20 # −18
http://govnokod.ru/14052#comment345108
guesto 16.08.2016 03:01 # −16
3_14dar 16.08.2016 14:56 # −40
void_main 16.08.2016 14:58 # −63
#collapse_me
guest 20.08.2016 02:06 # −11
pdro6 10.04.2017 21:31 # −22
pdro2 10.04.2017 21:45 # −22
pdro2 10.04.2017 21:46 # −22
pdro1 10.04.2017 21:28 # −22
pdro11 10.04.2017 21:35 # −22
pdro4 10.04.2017 21:48 # −22
pdro12 10.04.2017 21:35 # −22
pdro10 10.04.2017 21:54 # −22
pdro4 10.04.2017 21:30 # −22
bormand 15.08.2016 17:50 # +12
bormand 15.08.2016 18:23 # +15
Dummy00001 15.08.2016 20:16 # +12
в некоторых местах просто уже надоедает пытаться понимать какого хера не работает.
из предыдущей дискусии - и как раз последних граблей - я сделал вывод что много граблей новых у меня происходят из-за использования size_t вместе int. последние грабли были с андерфлоу: инт спокойно уходил в негативые и все заканчивалось хорошо после проверки на верхний лимит. а вот с size_t там циклилось почти до бесконечности, и только потом с сегфолтом вылетало. что больше всего запутало это то что на бубунте почему-то работало, и слетало только на виндах с mingw.
j123123 16.08.2016 00:52 # +13
Не знаю насчет "побочных эффектов", но есть опция -fsanitize=undefined
pdro12 10.04.2017 21:35 # −22
pdro6 10.04.2017 21:50 # −22
pdro3 10.04.2017 21:24 # −22
pdro8 10.04.2017 21:52 # −22
pdro9 10.04.2017 21:53 # −22
1024-- 15.08.2016 19:09 # +11
Soul_re@ver 15.08.2016 19:16 # +11
pdro4 10.04.2017 21:49 # −22
dxd 16.08.2016 08:36 # +12
pdro16 10.04.2017 21:38 # −22
pdro10 10.04.2017 21:53 # −22
guest 16.08.2016 00:01 # −9
pdro10 10.04.2017 21:34 # −22
inkanus-gray 16.08.2016 15:30 # +13
Для сравнения: у чисел есть и касты, и функции преобразования.
А для функций у нас только касты:
Не хватает генератора переходника, который будет переставлять аргументы в нужном порядке и, при необходимости, преобразовывать типы аргументов. Я джва года ждал такой компилятор!
Soul_re@ver 16.08.2016 15:37 # +13
inkanus-gray 16.08.2016 17:05 # +8
Но без named тоже интересно, ибо для каждой функции можно насоздавать кучу синонимов: func1(x, y, z), func2(x, z, y), func3(y, x, z), func4(y, z, x), func5(z, x, y), func6(z, y, x). У нас даже говнокод был с такими перестановками.
Soul_re@ver 16.08.2016 18:35 # +10
Аргументировал, что так в порядке не запутаешься.
inkanus-gray 16.08.2016 18:38 # +9
pdro13 10.04.2017 21:36 # −22
pdro14 10.04.2017 21:37 # −22
pdro3 10.04.2017 21:47 # −22
pdro13 10.04.2017 21:36 # −22
bormand 26.10.2020 15:44 # 0
З.Ы. Проводим учения по прикладной некромантии.
Soul_re@ver 26.10.2020 19:28 # +1
guest8 26.10.2020 19:31 # −999
guest8 26.10.2020 19:48 # −999
Saehrimnir 26.10.2020 20:49 # 0
pdro9 10.04.2017 21:33 # −22
pdro6 10.04.2017 21:51 # −22
pdro12 10.04.2017 21:55 # −22
cykablyad 10.04.2017 21:22 # −1
AntiSpam 10.04.2017 21:23 # −22
pdro10 10.04.2017 21:34 # −22
guest8 23.07.2020 03:10 # −999
guest8 23.07.2020 05:02 # −999
guest8 26.10.2020 20:52 # −999
guest8 26.10.2020 20:53 # −999
guest8 26.10.2020 20:54 # −999
guest8 26.10.2020 21:00 # −999
MAPTbIwKA 26.10.2020 21:03 # +1
Кстати, ты наверняка путаешь республику Алтай и алтайский край
Все путают
>, тянки в тиндере тоже оттуда есть
А вот если тебе понравится тян из Златохуйска в девяти часах лету от Москвы -- что будешь делать?
defecate-plusplus 26.10.2020 21:07 # 0
может, из горно-алтайска
guest8 26.10.2020 21:08 # −999
guest8 26.10.2020 21:11 # −999
guest8 26.10.2020 21:13 # −999
guest8 26.10.2020 21:16 # −999
guest8 26.10.2020 21:18 # −999
guest8 26.10.2020 21:22 # −999