Meta: мне не нравится, когда ответы удаляются. Я думаю, это где-то обсуждалось.
Во всяком случае, KennyTM и другие добрые единоличники заставили меня начать, и хотя один ответ был удален, я оценил ваши усилия.
Похоже, что это ожидаемое поведение на Mac, и даже кажется, что оно работает и на 32-битной Linux (хотя я не тестировал экстенсивно)
Да. GCC ведет себя по-разному (по крайней мере, в моем ограниченном наблюдении) для 32 (-m32) и 64 (-m64) битовых режимов. В 32-битном я смог получить доступ к переменным аргументам, используя массив. В 64-битном режиме это просто не работает.
Я узнал, что вы ДОЛЖНЫ получить доступ к переменным параметрам, используя va_list, как определено в stdarg.h, потому что он работает в обоих режимах.
Теперь у меня есть программа командной строки, которая запускает и проходит все мои тесты в 32-битном и 64-битном режимах на Mac OS-X.
В программе реализован сборщик мусора из связанного списка, сметающий 16-байтовые выровненные объекты, распределенные по malloc, из глобального списка, а также из машинных регистров и стека - на самом деле в 64-битном режиме есть дополнительные регистры, поэтому у меня все еще есть немного работы, чтобы сделать.
Объекты - это набор из 32- или 64-битных слов, которые соединяются вместе, образуя структуры данных, подобные LISP / Scheme.
Таким образом, это сложная программа, которая много работает с указателями и работает одинаково в 32- и 64-битных режимах.
Если вы зададите несколько вопросов, вы не получите всех ответов, которые вам могут понадобиться.
Кажется, он работает, как я писал, в Linux.
Опять же, спасибо, что помогли мне с этим.