Использование процессора freescale более соответствует стандартным квалификаторам типов, таким как const
, поэтому размещение указывает на указатель, а не на данные, на которые он указывает.Тем не менее, поскольку « дальние данные » вместо « дальний указатель » были бы бессмысленными, вы бы подумали, что это не имеет значения, но большая согласованность, по-видимому, делает более простымпарсер компилятора.
Вы можете использовать что-то вроде kludgey, например:
#if defined __SOME_ARCHITECTURE__
#define DECLARE_FARPTR( type, identifier ) type __far * identifier
#if defined __SOME_OTHER_ARRCHITECTURE__
#define DECLARE_FARPTR( type, identifier ) type * __far identifier
#else
#define DECLARE_FARPTR( type, identifier )
#endif
Тогда ваши объявления будут выглядеть так:
DECLARE_FARPTR( somestruct_t, foo ) ;
или в прототипе функции с указателемпараметр:
void fn( DECLARE_FARPTR( somestruct_t, foo ) ) ;
или функция, возвращающая дальний указатель:
DECLARE_FARPTR( somestruct_t, fn( void ) ) ;
Как вы можете видеть, он быстро становится трудным для чтения и декларативный функционально-подобный макрос обычно этого лучше избегать.