В коде c ++, что означают следующие ключевые слова?SIGSELECT, U32, U16, U8 - PullRequest
9 голосов
/ 20 июня 2011

У меня есть вопрос об использовании ключевых слов в структуре c ++.

Я видел структуру, определенную следующим образом:

typedef struct {
    SIGSELECT signo;
    U32 id;
    U32 re;
    U16 id1;
    U8 id2;
}First;

Пожалуйста, помогите мне понять эти ключевые слова: SIGSELECT, U32,U16, U8

Ответы [ 2 ]

14 голосов
/ 20 июня 2011

Что они «значат», это довольно глубокий вопрос, и также зависит от среды, в которой вы находитесь.

Это имена типов, но не стандартные типы C ++, поэтому они не известны всем.

Предполагается, что типы Uxx являются "целыми числами без знака" указанной ширины в битах. Так что U32 будет 32-разрядным целым числом без знака, которое известно как uint32_t в C99, но еще не стандартизировано в C ++.

SIGSELECT немного сложнее, но член называется "signo", что означает, что это номер сигнала. Если код предназначен для POSIX-подобной среды, вполне вероятно, что SIGSELECT - это просто псевдоним целочисленного типа по умолчанию, int. См. эту страницу , например.

Какой-то заголовок делает либо

#define SIGSELECT int

или

typedef int SIGSELECT;

чтобы ввести это новое имя (и аналогично для других упомянутых типов).

Чтобы выяснить, являются ли они символами препроцессора или являются действительными typedef: псевдонимы типа ed, пропустите код через препроцессор и прочитайте его вывод. Если формулировка изменяется (то есть SIGSELECT превращается в int или какой-либо другой тип), они являются символами препроцессора, в противном случае они typedef: s.

0 голосов
/ 11 сентября 2012

Поскольку @ AJG85 упоминается в комментарии к этой теме, вы можете портировать типы данных, включив стандартную библиотеку CSTDINT

#include <cstdint>

В этой превосходной статье Алекса Аллена описывается библиотека иэти типы данных более подробно.

...