Просматривая пример кода приложения для iPhone, я обнаружил пару методов отправки / получения, которые фактически имели одинаковые определения сигнатур, за исключением типов значений ассоциированный для одной из переменных.
Из заголовка:
- (void)receivedData: (unsigned char *)data length:(NSUInteger)len;
- (void)sendData: (uint8_t*) data length:(NSUInteger) len;
Эти методы используются как оболочки для процесса отправки / получения, который эффективно передает указатель на массив байтов
данных, записываемых в потоки данных и из них. . Я нашел эти сигнатуры методов немного любопытными, и, поскольку я новичок в разработке Cocoa / Cocoa Touch, я решил проверить определение типа uint8_t
. Я обнаружил, что uint8_t
определяется как unsigned char
в stdint.h
, и, следовательно, переменные data
для этих методов являются точно так же. По крайней мере, так обстоит дело с stdint.h
, который связывается в XCode 4.2.
Однако, проведя небольшое дополнительное исследование типа uint8_t
, я нашел этот вопрос относительно использования uint8_t
и unsigned char
.Похоже, что консенсус состоит в том, что довольно часто эти два типа значений абсолютно одинаковы, но с некоторыми реализациями стандартных библиотек C они могут отличаться. Следовательно, не следует полагаться на то, что они будут одним и тем же типом данных при генерации переносимого кода.
С учетом сказанного, можно ли предположить из среды программирования Apple / Objective-C, что uint8_t
будет таким же, как unsigned char
, или я должен следовать такой же совет, данный в рамках вышеупомянутого вопроса?
Это может показаться придирчивым вопросом, но поскольку я могу интегрировать библиотеки, в которых этот тип неправильного кодирования, по-видимому, немного преобладает, в личную кодовую базу, которую можно использовать в нескольких средах Apple (для довольно через несколько лет) я хотел получить дополнительные комментарии.