- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
const int sum(int a, int b){
return a+b;
}
int a(int x)
{
const std::function<int(int)> sum4 = std::bind(sum,_1, 4);
return sum4(123);
}
int b(int x)
{
puts("bagor");
const std::function<int(int)> sum4 = std::bind(sum,_1, 4);
return sum4(123);
}
int c(int x)
{
const std::function<int(int)> sum4 = std::bind(sum,_1, 4);
puts("bagor");
return sum4(123);
}
// Функции a и b нормально инлайнятся. Ассемблерный выхлоп:
sum(int, int): # @sum(int, int)
lea eax, [rdi + rsi]
ret
a(int): # @a(int)
mov eax, 127
ret
b(int): # @b(int)
push rax
mov edi, offset .L.str
call puts
mov eax, 127
pop rcx
ret
//А вот int c(int x)
c(int): # @c(int)
push rbx
sub rsp, 32
mov edi, 16
call operator new(unsigned long)
mov rbx, rax
mov qword ptr [rax], offset sum(int, int)
mov dword ptr [rax + 8], 4
mov qword ptr [rsp], rax
mov qword ptr [rsp + 24], offset std::_Function_handler<int (int), std::_Bind<int const (*(std::_Placeholder<1>, int))(int, int)> >::_M_invoke(std::_Any_data const&, int&&)
mov qword ptr [rsp + 16], offset std::_Function_handler<int (int), std::_Bind<int const (*(std::_Placeholder<1>, int))(int, int)> >::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation)
mov edi, offset .L.str
call puts
mov esi, dword ptr [rbx + 8]
mov edi, 123
call qword ptr [rbx]
mov ebx, eax
mov rax, qword ptr [rsp + 16]
test rax, rax
je .LBB3_3
mov rdi, rsp
mov rsi, rdi
mov edx, 3
call rax
.LBB3_3:
mov eax, ebx
add rsp, 32
pop rbx
ret
mov rdi, rax
call __clang_call_terminate
mov rbx, rax
mov rax, qword ptr [rsp + 16]
test rax, rax
je .LBB3_6
mov rdi, rsp
mov rsi, rdi
mov edx, 3
call rax
.LBB3_6:
mov rdi, rbx
call _Unwind_Resume@PLT
mov rdi, rax
call __clang_call_terminate
__clang_call_terminate: # @__clang_call_terminate
push rax
call __cxa_begin_catch
call std::terminate()
std::_Function_handler<int (int), std::_Bind<int const (*(std::_Placeholder<1>, int))(int, int)> >::_M_invoke(std::_Any_data const&, int&&): # @std::_Function_handler<int (int), std::_Bind<int const (*(std::_Placeholder<1>, int))(int, int)> >::_M_invoke(std::_Any_data const&, int&&)
mov rax, qword ptr [rdi]
mov rcx, qword ptr [rax]
mov edi, dword ptr [rsi]
mov esi, dword ptr [rax + 8]
jmp rcx # TAILCALL
std::_Function_handler<int (int), std::_Bind<int const (*(std::_Placeholder<1>, int))(int, int)> >::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation): # @std::_Function_handler<int (int), std::_Bind<int const (*(std::_Placeholder<1>, int))(int, int)> >::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation)
Решил попробовать std::bind.
https://godbolt.org/z/eW5eT5oj4
Что-то мне нямекает, что у тысяч ботов, которых регали нейронкой, пароль надёжнее моего. Ещё и у всех разный поди.
Ещё можно 123 в экспоненциальной записи, в плавающем питухе, в двоичной системе. Вариантов куча.
зачем ему это – фиг знает. скрипты тестит?
Либо же слишком большой. Он сам намекнул недавно:
> Потому ответы Сверхразума на наши вопросы всегда будет выглядеть безумно и нелогично. Но это не потому что Сверхразум глуп.
http://govnokod.ru/27605#comment658972
А что если разметка комментариев - стеганографически зашифрованное послание? 1 комментарий - 1 символ?
Он там ещё вчера недвусмысленно намекал, что "бакланопостит возникает из-за застоя".
Может в этом дело? Кому-то надоел застой на гк?
Какой багор )))
Согласен. Друзьям должна понравиться клякса поноса в логотипе.
Это я с 2017 одной и той же фразой сру послания? Сложно как-то.
https://govnokod.ru/22632#comment378988
Тот кто старался по мере возможности игнорить раковые треды дульфятника.
Нужно было больше раку отвечать на вопросы.
> скрипты тестит?
Мне что заняться нечем? Я сегодня на пляж сходил поплавал.
Сам использую и всем советую.
Нахуя использовать то, чем никто не пользуется?
Единственный момент, когда велосипеды реально лучше массового продукта!
2. Чтобы он ощутил свою никчёмность.
3. Чтобы он начал спамить с бОльшего количества учёток, и мы быстрее подготовили список для Страйкера.
Потому что иначе он потеряет смысл жизни. Да и один фиг он добывает учётки дольше, чем они банятся.
А вообще, всегда можно переключиться на вайтлист.
Какое тестовое задание )))
Питухов со слабыми паролями надо забанить, а доктор Смегма пусть регистриурует новые учётки и повышает окупаемость сайта. Как покроет затраты на хостинг и кодинг - так и быть, заслужит право спамить.
Реальность: любое использование сложнее маркетингового хелоуворлда, распитушивается в несколько сот строк дрисни ассемблерного выхлопа.
Например в жабке нельзя отказаться от GC, а в С++ от ref counting можно
Нельзя отказаться в жабке и от знания типов в рантайме
В С++ можно не пользоваться, и его как-бы не будет
[1] https://github.com/cplusplus/draft/blob/e125ca7c66725801da118fa936e1444b22f8fb23/source/exceptions.tex
Но вроде можно -fno-unwind-tables и -fno-exceptions у gcc сказать.
Была такая дока типа "как запихать С++ в лоу левел питушню" типа твоих контроллеров, и там как раз описывалось как всё говно поотрубать
https://alex-robenko.gitbook.io/bare_metal_cpp/
С++, который понравится j123123!
https://alex-robenko.gitbook.io/bare_metal_cpp/compiler_output/exceptions
назуй RTTI
https://alex-robenko.gitbook.io/bare_metal_cpp/compiler_output/rtti
нахуй STL
https://alex-robenko.gitbook.io/bare_metal_cpp/compiler_output/nostdlib
Там есть какое-то количество мелких отличий, и если ты макросом заебенишь "инлайн" функцию такую, то вероятно можешь отсосать.
Или ты про "D"?
Так "D" сишные хедеры не понимает.
Есть какая-то тула, она поддерживает семь хедеров
Слинкуется всё отлично, если коллконвеншен совпадает.
Да, прототип функции придётся описать на «D», а не тупо подключить хедер. Но тебе всё равно придётся изучать прототип функции, чтобы использовать её в своём коде.
Или ты думаешь, что все функции, как implode в «PHP»: перепутал порядок аргументов, а она всё равно работает.
Извиняюсь, что не по теме, но поэтому я за PHP. Всё, обсуждайте пародии на языки программирования дальше.
* согласно стандарту, в реальных конпеляторах ситуация другая.
Да и зачем тебе при использовании функции VLA и касты воида во что-то? Это уже больше про конпеляцию реализации крестами.
З.Ы. А, тьфу, я дура. Ты же про макро/инлайн.
В вижал си -- нет.
> про макро/инлайн.
ага)
Вообще я не видел в дикой природе чтобы из С++ было не дёрнуть сишный API.
Но гипотетически такой шанс есть
Потому что юзаешь so'шки и dll'ки, скорее всего. А там из реальных проблем разве что массив нулевой длины в хедере.
Массив нулевой длины это такой хак, когда ты в последнее поле его пихаешь, и потом выделяешь память?
Да и не встретишь, наверное. Популярные сишные либы официально совместимы с c++, даже extern "C" сами добавляют.
И действительно тривиальный пример генерит вполне питумальный кот.
А добавляешь одну сточку (допустим отладочную) и тут джва экрана привычной крестодрисни.
В «Сишке» такого нет. Там препроцессор просто подставляет параметр, и обычно компилятор от этого так с ума не сходит.
Например ключевое слово "virtual" может нехило там усложнить выхлоп, хотя выглядит невинно
А для виртуального нужно строить табличку виртуальных методов, потом вызывать его по этой табличке, а не по фиксированному смещению...
"Виртуальность" это мощный интсрумент для выстрела в ногу реализации всякой ООПшни типа полиморфизма, но он не бесплатный
В С++ ты можешь его отключить, и вроде в C# тоже. А например в джаве нет (хотя вероятно JIT его за тебя отключит, если ты им не пользуешься)
или вы про invoke{virtual,static} в йажа?