- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
typedef float vec_t;
...
typedef vec_t matrix3x4[3][4];
...
void Matrix3x4_ConcatTransforms( matrix3x4 out, const matrix3x4 in1, const matrix3x4 in2 );
...
static matrix3x4 g_bonestransform[MAXSTUDIOBONES];
static matrix3x4 g_rotationmatrix;
...
matrix3x4 bonematrix;
...
Matrix3x4_ConcatTransforms( g_bonestransform[i], g_rotationmatrix, bonematrix );
Новодел какой-то. У меня нельзя.
По идее, логично было бы позволять передавать все типы, у которых не больше слов const на указанных в сигнатуре местах (кроме const в сигнатурах функций при передаче указателей - там количество const должно быть не меньше указанного в сигнатуре).
Уже в c++98 можно "метопрограммно" вычислить :)
... где-то чуть ниже ...
> Починил:
> typedef const matrix3x4 *cmatrix3x4;
Любой, кто кодил на сишке?
Мне кажется, что сишка - это основополагающий язык программирования и любой программист должен его знать.
Тут встает вопрос программисты ли 1с-ники и пхпешники...
С - нет. Асм - да.
Знать - нет. Но раз в глаза ему посмотреть, и пару простых лаб на нем написать - да.
После этого и С, и Фортран - и даже Лисп - уже будут простыми. И после этого басики (шарпы и жабы) будут уже совсем мелочами.
конечно же сишка это лингва франка современных компьютеров
на нем описывают алгоритмы и API операционок
Не знать си это примерно как не знать латынь для историка церкви
Только после знакомства с asm x86 из какой-то книги, мне стало всё понятно.
я тоже только после асма понял что такое куча и стек и как работают указатели
а как это опровергает мои слова?
>>на нем описывают алгоритмы
Ага-ага. Только алгоритмы описывают в алголо- или бейсико- подобных псевдокодах.
https://en.wikibooks.org/wiki/LaTeX/Algorithms
Или даже напитонских (с отсутствием endов и отступами). Но никак не в сишных значках и закорючках.
И почему в интернетах оверхулион сайтов на пхп, а на с можно пересчитать на пальцах?
PHP, кстати, тоже не удобно.
Но вопрос про хулион, конечно, глуп. Миллионы мух.
Си вообще для этой задачин не подходит. В нем нельзя выразить много чего из нормальных языков, зато в нем есть много неоднозначностей и неопределенностей, и дохера ненужных вещей, о которых никому не интересно знать, при чтении алгоритмов, таких как, например, что будет если к беззнаковому индексу массива прибавить отрицательное знаковое число.
Запомни: что можно выразить на одном тюринг-полном языке ВСЕГДА можно выразить и на другом
Вопрос в сахаре
На си ему, блядь, алгоритм не выразить.
На PHP наверное выразить, ага
просто wxvw бессмысленный пиздабол не владеющий терминологией, да еще и не осиливший си
это так смешно
А потом доходит до употребления веществ, потому что у асма нет иструментов управления сложностью: http://ekimoff.ru/230/
или с моей перспективы: на С учат структурное программирование, максимально скрывая/игнорируя детали того как железо работает.
подмножество асма что бы простые программы писать освоить достаточно легко.
после написания пары программ на асме быстро понимаешь: зачем нужны функции, зачем нужны типы данных и структурное программирование, зачем нужны абстракции и стандартные библиотеки, и т.д.
Оче толсто
Это неявное умножение не добавляет ровно никакого препятствия для понимания указателей. Вот хочу я выделить 15 интов - пищу malloc(15 * sizeof(int));, этот sizeof(int) сразу же учит писать любой вменяемый сишконаставник как только требуется работать с динамической памятью. Как только я увидел array + i, у меня возник только один вопрос: "Где же sizeof(int), Карл?" И я не стал гиперабстрактным заедушным питухом, я наоборот к нотации царского маллока стремился. Си по сути это умножение маскирует только в одном месте, оставляя пользователю всякие malloc/qsort на закуску. Заодно рассказали про юнионы. Потом попросили реализовать бл**ский двусвязный список. После всего этого никаких вопросов про адреса уже не было, всё стало очевидным.
Вот многомерные массивы - это да, питушня какая-то. Но после того, как изучишь одномерные, они уже не сдвинут с дороги истины.
Наассемблер меня послали уже после того, как понял указатели и посмотрел несколько менее брейнфакоподобных языков.
> я наоборот к нотации царского маллока стремился
>Потом попросили реализовать бл**ский двусвязный список.
Надеюсь ты заяснил по хардкору этим анскилябрам, что единственная полезная структура данных - одномерный массив?
Хотя, потом написал калькулятор, где переменные лежали в массиве (double * или variable *), т.к. std::map, документацию на него и все эти ссылки амперсандные не осилил.
> я наоборот к нотации царского маллока стремился
Оно и видно. Цари ведь не используют аллокаторы.
Чтобы понять лучшее - надо изучить асм. Это основа всего. Изучая сишку ты знаешь - как делают питухи и к чему это приводит - и ты уже не будешь делать как питух.
Не изучая сишку, а потокая говну, как ты, - ты будешь до конца дней своих говнарём, который ваяет говно и думает, что ваяет не говно - всё просто.
Поэтому в x64 ты можешь сделать 4к маллоков на всю ширину физического адресного пространства. Это в бесконечное число раз быстрее любого заедушного софтварного аллокатора, ибо любой питушарский аллокатор это же и делает, но имеет оверхед намного больше, чем операции связывания в ведре.
да. но не `char * const`. указатель на конст чар != конст указатель на чар.
> Что же тогда с матрицами то не так?
вот именно это и разница. у тебя констный не массив (который ты прячешь за тайпдефом), а указатель на массив. (в тему почему в С тайпдефы плохо.) если сделаешь из matrix3x4 структуру, то будет работать так как ты ожидаешь.
ЗЫ понедельник. утро. похмелье. может быть гоню.
А у меня сложилось впечатление, что не в тайпдефах тут проблема.
Вы за то, чтобы в языке был явный способ отличить скалярные типы (которые можно передать по значению) от «больших» типов, которые передаются только по указателю?
я ни за, ни против. просто в С это так.
в крестах все меняется, потому что все в классы/структуры завернуто.
И при вызове: