web-dev-qa-db-ja.com

C ++コードでは、次のキーワードはどういう意味ですか? SIGSELECT、U32、U16、U8

C++構造体でのキーワードの使用法について質問があります。

私はこのように定義された構造体を見ました:

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

これらのキーワードを理解するのを手伝ってください:SIGSELECT、U32、U16、U8

9
user707549

それらが「意味する」ことは非常に深い質問であり、あなたがいる環境にも依存します。

これらは型名ですが、標準のC++型ではないため、広く知られているわけではありません。

Uxx型は、指定されたビット幅の「符号なし整数」であると推測されます。したがって、U32は32ビットの符号なし整数になります。これは、C99ではuint32_tとして知られていますが、C++ではまだ標準化されていません。

SIGSELECTは少し難しいですが、メンバーの名前は「signo」です。これは、これがシグナル番号であることを意味します。コードがPOSIXのような環境用である場合、SIGSELECTはデフォルトの整数型intの単なるエイリアスである可能性が非常に高くなります。たとえば、 このページ を参照してください。

一部のヘッダーはどちらかを行います

#define SIGSELECT int

または

typedef int SIGSELECT;

この新しい名前を導入するために(そして同様に言及された他のタイプのために)。

これらがプリプロセッサシンボルなのか、実際のtypedef:edタイプのエイリアスなのかを判断するには、プリプロセッサを介してコードを実行し、その出力を読み取ります。表現が変更された場合(つまり、SIGSELECTintまたはその他のタイプに変わる場合)、それらはプリプロセッサシンボルです。それ以外の場合は、typedef:sです。

14
unwind

このスレッドのコメントで@ AJG85が言及しているように、標準ライブラリCSTDINTを含めることでデータ型を移植できます。

#include <cstdint>

Alex Allainによるこの優れた記事 ライブラリとこれらのデータ型について詳しく説明しています。

0
tony gil