Итак, у меня есть новый и волнующий вопрос, на который я очень хотел бы получить ответ. Итак, я пишу файловый компрессор, в основном tar, и, честно говоря, этот код, кажется, работает довольно хорошо. На чем я сейчас застрял, так это на дополнительной функции, которая требуется от проекта. Нам нужно иметь возможность создавать двоичные файлы, как если бы они были созданы на машине с прямым порядком байтов. Я создал файл заголовка, который я включил в свой код, который должен выполнять замену битов для меня. Отсюда следует следующее:
#ifndef MYLIB_H
#define MYLIB_H
#define BITS_PER_BYTE 8
#define true 1
#define false 0
typedef unsigned char uchar;
typedef unsigned long ulong;
typedef unsigned int uint;
typedef unsigned short ushort;
#ifdef LITTLE_ENDIAN
#define SwapULong(val) (val << 24 | (val << 8 & 0xFF0000) | (val >> 8 & 0xFF00) | val >> 24 & 0xFF)
#define SwapUShort(val) (val << BITS_PER_BYTE | val >> BITS_PER_BYTE)
#else
#define SwapULong(val) (val)
#define SwapUShort(val) (val)
#endif
#endif
Поэтому, когда я компилирую с помощью gcc и запускаю программу, ошибок нет. Однако, когда я делаю шестнадцатеричный дамп -C вывода, вывод по-прежнему находится в порядке с обратным порядком байтов!
Затем я попытался скомпилировать с флагом -E и получил кучу строк, говорящих, что
./compress line #: typedef: command not found
который стал
./compress line #: __extension__ : command not found
пока последние строки вывода терминала не показали
./compress line 86: syntax error near unexpected '}' token
./compress line 86: __extension__ typedef struct { int __val[2]; } __fsid_t;
Итак, какие-либо идеи, что может быть причиной этого для меня?
Любая помощь будет оценена по достоинству.