2011-01-06 4 views
1

Я пытаюсь портировать программу C для архитектуры SPARC, которая имеет следующий тип декларацииDatatype вопрос

#include <stdint.h> 

typedef uint32_t WORD ; 
typedef uint64_t DWORD ; 

Беда в том, что компилятор говорит мне, что stdint.h не могу найти. Следовательно, я пересмотрел эти типы данных следующим образом:

unsigned int WORD; 
unsigned long DWORD; 

Это кажется для меня простой декларации, но программа не ожидает, как это должно быть. Может, я что-то пропустил?

Благодаря

ответ

1

<stdint.h> и типами uint32_t и uint64_t являются "новыми" в ISO/IEC 9899: 1999. Ваш компилятор может соответствовать только предыдущей версии стандарта.

Если вы уверены, что unsigned int и unsigned long являются 32-разрядными и 64-разрядными соответственно, тогда у вас не должно быть проблем (по крайней мере, не из-за самих typedefs). Как и вы, это может быть не так. Вы знаете (или можете узнать), если ваш компилятор поддерживает unsigned long long?

Я предполагаю, что unsigned int, вероятно, 32-битный, сколько лет вашему SPARC?

0

Если у вашего компилятора/ОС нет <stdint.h>, тогда самое лучшее, что нужно сделать, это реализовать собственную версию этого заголовка, а не изменять код, который вы пытаетесь выполнить. Вероятно, вам нужно только подмножество типов, которые обычно определены в <stdint.h>, например.

// 
// stdint.h 
// 

typedef int int32_t; // signed 32 bit int 
typedef unsigned long long uint64_t; // unsigned 64 bit int 

(очевидно, вам нужно знать размеры различных целых типов на вашей конкретной платформе, чтобы сделать это правильно).

0

Итак, вам нужно целое число 32 бит, а другое - 64 бит.

Возможно, что int и longs одинаковы для вашей архитектуры, и если ваш компилятор поддерживает долгое время, это может быть 64 бит, тогда как int может быть 32 бит. Проверьте свои документы компилятора на то, что он поддерживает, и если у него есть расширение (например, некоторые компиляторы могут предоставить тип __int64). Это может быть то, что вам нужно:

typedef unsigned int WORD; 
    typedef unsigned long long DWORD; 

Во всяком случае, я бы написать небольшую программу для проверки размеров целых чисел на хосте, так что вы можете выбрать правильный, который PRINTF в SizeOf (INT), sizeof (long) и так далее. (На СПАРК хозяина CHAR_BIT будет 8, так что все по крайней мере multple из 8 бит.)

Кроме того, поскольку вы портирования на Sparc хоста, убедитесь, что ваш код не испорчен где-то в отношении endianess

Смежные вопросы