@hirthwork

Тег c в блоге hirthwork

hirthwork
21 Sep 2016
hirthwork
$ cat main.c
#include <stdio.h>

inline void f() {
        puts("hello, world");
}

int main() {
        f();
}

$ gcc main.c
/tmp/ccBmwK0W.o: In function `main':
main.c:(.text+0xa): undefined reference to `f'
collect2: error: ld returned 1 exit status

Живите теперь с этим.

hirthwork
29 Sep 2015
hirthwork

осознал, что ни разу в жизни не писал АВЛ-дерево. пишу сюда, потому что здесь тупняк в моде

hirthwork
14 Feb 2014
hirthwork

У POSIX и Linux в частности есть проблема. Когда ты вызываешь dlsym(), то ты
можешь задать только имя функции, которую надо загрузить, ничего больше.
Затем уже элементарно можно ошибиться с параметрами и получить увлекательный
дебаг. Ошибиться с параметрами можно не только из-за криворукости, а ещё и
из-за того, что при увеличении мажорной версии автор либы чуть изменил API

Казалось бы, C++ и манглинг спасают ситуацию. Можно сразу в dlsym() передать
трудночитаемую строку, которая говорит, что загружаемая функция принимает в
себя struct stat по значению. И опять получить увлекательный дебаг, потому что
с годами размер struct stat тоже растёт. Можно передавать все аргументы по
указателю/ссылке, но это не cache friendly.

Получается, что система загрузки символов должна включать указание abi, которое
будет описывать layout аргументов и возвращаемого значения, например,
указывать, что функция возвращает восьмибайтный дабл и принимает структуру,
состоящую из поля вмещающего в себя size_t и указателя, а вторым параметром
идёт массив из десяти восьмибитных элементов.
При этом набор типов такого метаязыка описания abi можно свести к intN_t,
floatN_t, size_t и void*, всё остальное можно описать комбинируя эти типы в
структуры и массивы.
Вот только вряд ли общественность примет динамическую загрузку символов со
стогой типизацией

hirthwork
29 Jan 2014
hirthwork

хороший, годный аллокатор, готовый исполнить все самые сокровенные мечты задротов от программирования: ftp://gee.cs.oswego.edu/pub/misc/malloc.c особенно радует отсутствие фрагментации памяти

hirthwork
20 Apr 2013
hirthwork

это чувство, когда думаешь что понял memory_order в сишечкк

hirthwork
16 Apr 2013
hirthwork

Как в C++ унаследовать класс Circle от класса Point
и в compile-time запретить изменять координаты Point после инициализации, так
что остальные члены Circle можно было изменять? Да никак.
Как в C сделать то же самое?

struct Point {int x,y;};
struct Circle {const struct Point p; int r, color;};

#define RED (0xff0000)
#define BLAKC (0x000000)

int main() {
    int x = 1;
    int y = 2;
    struct Circle c = {.p = {.x = x, .y = y}, .r = 5, .color = RED};
    (void) c; // get rid of 'set but unused' warning
    c.color = BLAKC;
    // c.p.x = 5; // <- uncomment to get error
    return 0;
}

Видите? В отличие от плюсцов, C — объектно-ориентированный язык.
Всем проникшимся, а так же ебанутым и им сочувствующим, рекомендую к прочтению
книгу "Object-oriented programming with ANSI C" by AT Schreiner.
У меня, конечно не ANSI, а, минимум, C99, но сути это не меняет.

hirthwork
06 Apr 2013
hirthwork

За окном шёл 2013 год, Сергей Брин засунул компьютер в оправу очков, на соседней планете катался любопытных марсоход, hirthwork угорел по Джаве, а стандарт языка Си до сих пор не говорил, как узнать почему fopen вернул NULL.

hirthwork
04 Apr 2013
hirthwork

все знают, что volatile говно и нихуя не синхронизируется. однако выяснилось, что на моём слабом ноутбуке, в схеме один писатель-много читателей, обновление значение глобальной volatile переменной, читатель способны заметить порядка пятнадцати тысяч раз в секунду. при этом максимальный интервал между «замечаниями» составил меньше пяти миллисекунд. это я к чему? да к тому, что если у вас только один писатель, то volatile отлично подходит для передачи данных между потоками

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.