Structure declaration

ページ名:Structure declaration
  • Structure declaration

PUBLIC STRUCT Identifier
Field 1 AS [ Datatype ]

Field 2 AS [ Datatype ]

. . .

Field n AS [ Datatype ]
END STRUCT

このキーワードは構造体を宣言します。
内部的には、構造体はパブリック変数のみを持つクラスとまったく同じです。 しかし、以下で説明するように、それらを埋め込み構造体または埋め込み構造体配列として宣言できます。

埋め込み構造体、または埋め込み構造体配列を使用する場合、インタプリタは一時的なオブジェクトを作成する必要があります。そうすることで、それらを実際のオブジェクトのように操作できます。 そしてこれは遅くなります!

そのため、構造を使用しないでください。 たとえば、C構造体を必要とする共有Cライブラリ関数と通信します。

 

2つの異なるクラスで同じ構造体を宣言した場合、それらはまったく同じフィールドを持つ必要があります。そうしないと、インタープリタはエラーを発生させます。

Embedded Arrays

を使って構造体に埋め込み配列を持つことができます。

PUBLIC STRUCT Identifier

...

Field k [ Embedded array declaration ] AS [ Datatype ]

...

END STRUCT

Fields Alignment

構造体はパックされません。つまり、フィールドはそのメモリ長の倍数であるメモリアドレスに整列されます。

  1. ブールまたはバイトは任意のアドレスに格納できます。
  2. ショートは偶数アドレスに格納されます。
  3. 整数は、4の倍数のアドレスに格納されています。
  4. ...等々。

宣言の順序が尊重されているので、あなたはあなたの構造に穴があるかもしれません。 たとえば、Byteフィールドを宣言し、Integerフィールドの直後に宣言すると、3バイトの穴が空けられます。

問題があります:Cソースコードをコンパイルするとき、Cコンパイラは構造体フィールドを並べ替えるかもしれません。 そして、私の知る限りでは、そのプロセスは標準化も文書化もされていません。

Gambasが使用しているlibffiライブラリを使用して、将来的に解決策があるかもしれません。 明らかに、そのライブラリはその問題を考慮に入れることによってC関数に構造体を送ることができます。 しかし、そのライブラリはGambasよりはるかに文書化されていないので、難しさがあります。

Embedded Structures

次の構文で変数を宣言することで、構造体を通常のクラスまたは別の構造体の内部に埋め込むことができます。

[ PRIVATE | PUBLIC ] Identifier AS STRUCT Structure name

Example

' Gambas class file

Public Struct Arm
Length As
Float
NumberOfFingers As Integer
HasGlove As Boolean
End Struct

Public Struct Leg
Length As
Float
NumberOfFingers As Integer
HasSock As Boolean
HasShoe As Boolean
End Struct

Public Struct Man
FirstName As
String
LastName As String
Age As Integer
Eyes As String
LeftArm As Struct Arm
RightArm As Struct Arm
LeftLeg As Struct Leg
RightLeg As Struct Leg
End Struct

Arrays Of Structure

Identifier [ Dimensions ] AS STRUCT Structure name

構造体は埋め込まれています。つまり、その内容は配列内に直接割り当てられます。
このような配列は実際の配列ではなく、元の配列クラスのメソッドがいくつかあります。

  1. それらはインデックスによってアクセスすることができます。
  2. それらは列挙することができます。
  3. あなたは配列の長さと配列の大きさについての情報を得ることができます。
それで全部です!
構造体の埋め込み配列のみを作成できます。

See also

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧