Egor
@antoshkka спасибо, то, что нужно =)
Berkus
вот Антон прямо за тебя написал всё
Egor
@berkus 👍, ага, понял, я просто разворачивал указатель, компилилось и вылетало
Egor
дам лектору, пусть читает =)
Дмитрий
Всем привет.
Vovenzio
Вы код с телефона читаете?
Крылатый
1 млн строк это уже много для чата.
Egor
char x() {
printf("x");
return 'a';
}
int q() {
return 222;
}
void* call(void* a) {
printf("start\n");
// тут уже некий псевдокод, потому что не могу допереть как правильно сделать любой возращаемый тип
void* a = (((void(*)())a)());
printf("end\n");
return a;
}
int main(int argc, char** argv) {
void* c = call((void*)x);
void* c2 = call((void*)q);
char z = *((char*)c);
int z2 = *((int*)c2);
return 0;
}
как это профиксить, где строка с комментарием?
Anonymous
ты что-то мутное творишь
Anonymous
давай так, что изначально требуется реализовать?
Egor
ну я сам потыкаюсь, если не получится, попробую объяснить
Anonymous
я вот думаю, что возвращать void* — не лучшая идея
Anonymous
мб
void* call(void* func, void* result) {
}
Anonymous
и присваивать как-то
Egor
ну хорошо, а как мне тогда с вызова получить указатель к выходному рез-ту
Anonymous
сегфолтится небось
Egor
только "lala" выводит
Egor
рез-т на выход не могу получить
Anonymous
Дмитрий
Народ, где можно найти хорошую реализацию паттернов?
Anonymous
уточни, о каких паттернах идёт речь, а что-то туплю)
Anatoly
Дмитрий
спасибо
Anonymous
Anonymous
ты там чтоле код обфусцируешь, чтобы преподу напакостить
Anatoly
Egor
Egor
ну нет, я просто еще хочу кое-что попробовать интересное сделать
Egor
на чистом си, ес-сно
Anonymous
Anonymous
0x4d это твой 77
Egor
ух еп)))
Anatoly
Egor
@foxcpp ❤️
Matwey
По почте
Pavel
лучше бы на ассемблере писали, если такой специфичной магии хочется
Anonymous
Anonymous
да... generic programming на C — это сильно
Egor
да, именно, я уже разобрался
Egor
спасибо еще раз, а чем трейсишь?
Anonymous
clang -fsanitize=undefined
Egor
thx
Anton
@ZedDead
Вот это уже почти silver bullet:
https://gperftools.github.io/gperftools/heap_checker.html
https://gperftools.github.io/gperftools/heapprofile.html
Billy
Pavel
сначала должен быть асм, и только потом уже (void*) (((void* (*)()) ((void*)xxx))())
Pavel
хотя я вообще не понимаю зачем (void*) (((void* (*)()) ((void*)xxx))()) писать. один раз пример почитал, понял как работает и держишься от всего этого подальше
Berkus
Egor
да, про плюсы знаю
Egor
но я хочу в си приспособиться
🐙 Antony
Egor
уже все сделали =)
🐙 Antony
И как оно выглядит?
Egor
int q(int a, int b) {
printf("lalal2\n");
return a + b;
}
void* call(void* a, void* v[]) {
printf("start\n");
void* z = (void*) (((void* (*)(void* a, void* b, void* c)) ((void*)a))(
v[0], v[1], v[2]
));
printf("end\n");
return z;
}
int main(int argc, char** argv) {
void* args[] = {(void*)10, (void*)15, (void*)3};
void* c = call((void*)q, args);
printf("\n%d", ((int*)c));
return 0;
}
Egor
черновой вариант
Matwey
Господа, я чо-то не понял. А давно к статическим членам разрешили через точки обращаться?
🐙 Antony
остановись
Matwey
Или так всегда было?
Anatoly
Berkus
int q(int a, int b) {
printf("lalal2\n");
return a + b;
}
void* call(void* a, void* v[]) {
printf("start\n");
void* z = (void*) (((void* (*)(void* a, void* b, void* c)) ((void*)a))(
v[0], v[1], v[2]
));
printf("end\n");
return z;
}
int main(int argc, char** argv) {
void* args[] = {(void*)10, (void*)15, (void*)3};
void* c = call((void*)q, args);
printf("\n%d", ((int*)c));
return 0;
}
так и рождаются говнопрограммисты на си...
Anonymous
int q(int a, int b) {
printf("lalal2\n");
return a + b;
}
void* call(void* a, void* v[]) {
printf("start\n");
void* z = (void*) (((void* (*)(void* a, void* b, void* c)) ((void*)a))(
v[0], v[1], v[2]
));
printf("end\n");
return z;
}
int main(int argc, char** argv) {
void* args[] = {(void*)10, (void*)15, (void*)3};
void* c = call((void*)q, args);
printf("\n%d", ((int*)c));
return 0;
}
Может тебе на питон перейти с Си?
🐙 Antony
черновой вариант
скажу по другому:
ТВОЙ КОД РАБОТАЕТ ПО ЧИСТОЙ СЛУЧАЙНОСТИ
Berkus
int q(int a, int b) {
printf("lalal2\n");
return a + b;
}
void* call(void* a, void* v[]) {
printf("start\n");
void* z = (void*) (((void* (*)(void* a, void* b, void* c)) ((void*)a))(
v[0], v[1], v[2]
));
printf("end\n");
return z;
}
int main(int argc, char** argv) {
void* args[] = {(void*)10, (void*)15, (void*)3};
void* c = call((void*)q, args);
printf("\n%d", ((int*)c));
return 0;
}
void* c = call((void*)q, args);
printf("\n%d", ((int*)c));
Berkus
prog.cc:19:27: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int*' [-Wformat=]
printf("\n%d", ((int*)c));
Berkus
кастрировать, потом банить
wl#zk}s
Всем привет
Berkus
иначе sequencing нарушается
wl#zk}s
Чем отличается программист техник от программиста?
Крылатый
Что.
Dr. Friedrich
Что-то у вас под вечер какие-то нездоровые тут дискуссии начались, друзья.
Крылатый
БАН
Dr. Friedrich
Не надо никого банить, давайте спокойно общаться.
wl#zk}s
То есть это тот же программист?
wl#zk}s
Я в любом случае пойду на высшие потом