FreeBASIC マニュアルのトップに戻る

FreeBASIC ALIAS (修飾子)

目次→言語リファレンス→変数とデータ型→標準のデータ型→データ型修飾語→ALIAS (Modifier)←オリジナル・サイト

ALIAS (修飾子) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

パブリック・シンボルの、データ型名修飾(装飾)を変更します。

構文:
... as [ const ] datatype alias "modifier" [ const [ ptr ... ] ]

用法:
dim variable as datatype alias "modifier"
type name as datatype alias "modifier"
declare sub name ( param as datatype alias "modifier", ... )
declare function name ( param as datatype alias "modifier", ... ) as datatype alias "modifier"


パラメータ:
datatype
変更する、標準データ型またはユーザー定義データ型
modifier
以下の内容節で説明されている、サポートされている修飾子の1つ

内容:
Alias "modifier" は、データ型の後に指定すると、データ型に代替の意味を与えます。
これは、FreeBASIC 以外の言語とのリンクに必要な場合があります。

パブリック・シンボル名は、シンボルに使われる、データ型に関する情報をエンコードするために、修飾されています(装飾されています)。
c言語とリンクする場合、alias 修飾子の特別な意味は、無意味です。追加情報は、パブリック名にエンコードされないためです。
c++ 言語とリンクする場合、通常、より多くの情報がパブリック・シンボルにエンコードされ、alias 修飾子が必要になる場合があります。
パブリック名はコンパイルされたオブジェクト・ファイルに書き込まれます。そして、リンカによって、あるオブジェクト・モジュールから別のオブジェクト・モジュールに、シンボル名を一致させるために使われます。

使われるバックエンド(gasまたはgcc)コード放出に関係なく、データ型のマッピングには、同じルールが使われます。
また、FB のコンパイル済みコードが、自身のオブジェクト・モジュールや、他の言語からコンパイルされたオブジェクト・モジュール(またはライブラリ)と、矛盾なくリンクできることを目的としています 。

サポートされている修飾子

byte alias "char"
ubyte alias "char"
FB の 8 ビットのバイト型を c/c++ の 8 ビットの char 型にマップするために使われます。

long alias "long"
ulong alias "long"
Win 64ビット・ターゲットでは、FB の 32ビット longulong 型を、32ビット int 型ではなく、c/c++ の32ビット long [int] 型にマッピングするために使われます。

any alias "char" ptr
Maps any ptr to c/c++'s char *. In c/c++, char, signed char, and unsigned char, are three distinct types.
  • byte ptr maps to signed char *
  • ubyte ptr maps to unsigned char *
  • On some platforms the variable argument list va_list type is a typed as a char *, but FB does not have an equivalent type, therefore any ptr is used instead. Linking with names encoded with this type will fail since, normally, FB encodes void * data type instead of char *.
  • alias "char" keeps the any ptr behaviour in FB but then encodes the public name as char * for linking.

any alias "__builtin_va_list" ptr
Maps the data type to gcc's __builtin_va_list type
  • expected that gcc's built-in type is a pointer type
  • used on dos, win32, win64, linux-x86, targets
  • see cvalist for default usage in the cva_list data type

alias "__builtin_va_list"
Maps the data type to gcc's __builtin_va_list type
  • expected that gcc's built-in type is a struct type
  • used on aarch64 target
  • see cvalist for default usage in the cva_list data type

alias "__builtin_va_list[]"
Maps the data type to gcc's __builtin_va_list type
  • expected that gcc's built-in type is a struct array type
  • used on linux-x86_64 target
  • see cvalist for default usage in the cva_list data type

データ型マッピングの詳細

On all targets, FB to c/c++:
Several of FB's data types are consistently mapped across all targets:

On Dos/Win/Linux 32-bit targets, FB to c/c++:
integer on 32-bit targets is 32-bits wide

On Linux 64-bit targets, FB to c/c++:
integer on 64-bit targets is 64-bits wide

On Win 64-bit targets, FB to c/c++:
64ビット・ターゲットの integer は、64ビット幅です。
ただし、Win ターゲットでは、c/c++ の long int 型は、64ビットではなく32ビットであり、FB の longint 型で既に使われているため、long long int 修飾は使えません。
2 つの異なるデータ型に、同じ修飾(装飾)を再利用すると、関数の多重定義が失敗するか、定義が重複します。
64ビット・ターゲットの Integer が、常に 64ビットであるという FB の動作を維持するために、カスタム・データ型で、シンボルを修飾(装飾)し、サイズを64ビットに保ちます。
To create a data type in FB that will map to c/c++'s long [int] 32-bit on win, we must use alias modifier.

例えば、extern c++ : declare sub proc( byval as long alias "long" ) : end extern.
これにより、FreeBASIC は、32ビットの long int 型を必要とする、外部 c++ 手続き(win-64)を呼び出すことができます。
この方法での Alias の使用は、win-64 ターゲットのみに影響し、他のすべてのターゲットでは無視されます。

例:
Alias (Name) の例を参照下さい。


バージョン:
QBからの違い:
参照:
標準のデータ型に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2022-08-01 12:39:29
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall

ホームページのトップに戻る

表示-非営利-継承