by まけイヌ » 2005年7月06日(水) 00:16
レスの内容が私が受け取った意味と違っていたので、
念のため書いておきます。
> ActiveBasicでC用語のプログラムって作れるんでしょうか。
恐らく、C言語の関数をActiveBasicで再現できるか?という意味かと。
それを"C用語"と言われているのではないでしょうか?
この前提で答えていきます。
●#ifdef, #ifndef, #endif, #else, #define
この辺りの動作はプリプロセッサの処理になりますので、
厳密な再現は出来ないと思われます。
ただし、#defineに関してはconst命令で近いところをサポートできます。
●main関数 (最初に実行される関数)
Createイベントの末尾でCreateThread関数(API)を使って新たなスレッドを立て、
その関数名を"main"にしてしまえば近い事はできます。
が、どうしてもその前にグローバル領域とCreateイベント内の処理が行われてしまうので、
厳密に再現する事はできません。
●ラベル
ラベルの前に*を付ける事で可能です。
GOTO文も健在ですので、問題なく再現できます。
●printf関数
コレ自体を再現するには関数を一つ作らねばなりません。
wsprintf関数(API)を参考にすれば可能だと思われます。
●switch ~ case
Select Case文が近い事をやっていますが、完全な再現は無理です。
ちなみにcaseの後にコロンを付けてもコンパイルは通ります。
※ActiveBasic的には誤りみたいですが、私は敢えて付けています
※でないとCを書く時に間違えそうですし..
●for
C特有の3段指定は無理です。
●関数ポインタ
AddressOf文で対応できます。
●ポインタ
DWordPtrなど、型に対してPtrを付けて対応可能です。
巷では*が有効とか聞いたのですが、ホントかどうかは未検証です。
●void型
VoidPtr型で対応できます。
引数の場合はAnyでも対応できるみたいです。
●ポインタのポインタ
BASICなんで不要な気もしますが可能です。
BytePtr型などのポインタ型変数を宣言しておいて、
関数の引数にByRefを指定すれば同等の効果が得られます。(たぶん)
●おまけ:printf("%a");
Beep関数(API)で対応可能です。
ただし、この関数はOSバージョンによって使い分けされるので、
ヘルプかMSDNをよく読んでお使いください。
レスの内容が私が受け取った意味と違っていたので、
念のため書いておきます。
> ActiveBasicでC用語のプログラムって作れるんでしょうか。
恐らく、C言語の関数をActiveBasicで再現できるか?という意味かと。
それを"C用語"と言われているのではないでしょうか?
この前提で答えていきます。
●#ifdef, #ifndef, #endif, #else, #define
この辺りの動作はプリプロセッサの処理になりますので、
厳密な再現は出来ないと思われます。
ただし、#defineに関してはconst命令で近いところをサポートできます。
●main関数 (最初に実行される関数)
Createイベントの末尾でCreateThread関数(API)を使って新たなスレッドを立て、
その関数名を"main"にしてしまえば近い事はできます。
が、どうしてもその前にグローバル領域とCreateイベント内の処理が行われてしまうので、
厳密に再現する事はできません。
●ラベル
ラベルの前に*を付ける事で可能です。
GOTO文も健在ですので、問題なく再現できます。
●printf関数
コレ自体を再現するには関数を一つ作らねばなりません。
wsprintf関数(API)を参考にすれば可能だと思われます。
●switch ~ case
Select Case文が近い事をやっていますが、完全な再現は無理です。
ちなみにcaseの後にコロンを付けてもコンパイルは通ります。
※ActiveBasic的には誤りみたいですが、私は敢えて付けています
※でないとCを書く時に間違えそうですし..
●for
C特有の3段指定は無理です。
●関数ポインタ
AddressOf文で対応できます。
●ポインタ
DWordPtrなど、型に対してPtrを付けて対応可能です。
巷では*が有効とか聞いたのですが、ホントかどうかは未検証です。
●void型
VoidPtr型で対応できます。
引数の場合はAnyでも対応できるみたいです。
●ポインタのポインタ
BASICなんで不要な気もしますが可能です。
BytePtr型などのポインタ型変数を宣言しておいて、
関数の引数にByRefを指定すれば同等の効果が得られます。(たぶん)
●おまけ:printf("%a");
Beep関数(API)で対応可能です。
ただし、この関数はOSバージョンによって使い分けされるので、
ヘルプかMSDNをよく読んでお使いください。