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

FreeBASIC Ppmacro

目次→その他→プリ・プロセッサ→メタ・コマンド→#MACRO...#ENDMACRO←オリジナル・サイト

#MACRO...#ENDMACRO 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

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

複数行マクロを定義する、プリプロセッサ指示文

構文:
#macro identifier [?] ( [ parameters ] )
body
#endmacro

#macro identifier [?] ( [ parameters, ] variadic_parameter... )
body
#endmacro

説明:
#macro は、#define の複数行バージョンです。

定義構文の識別子(identifier)の後にオプションの疑問符(?)を使うと、引数を括弧で囲まずにパラメーター付きのマクロを呼び出すことができます。
注意: トリガーの可能性に注意してください。つまり、マクロの名前を含む式と用語の 1つとの競合が発生します。

注意:関数のような #define 宣言と異なり、マクロの宣言構文では、マクロ名と開き括弧の間にスペースを入れることができます。

警告:マクロ本体では、演算子の不要な優先順位の変更を受けないようにするために、使われるパラメーターが 1つ以上の演算子を含む式内にある場合は、パラメーターを括弧で囲む必要がある場合があります(演算子で引数として式を渡す場合も)。

例:
'' 式の値としてのマクロ
#macro Print1( a, b )
  a + b
#endmacro

Print Print1( "こんにちは、", "世界" )

'' 出力は :
'' 「こんにちは、世界」

Sleep



'' 複数の命令文としてのマクロ
#macro Print2( a, b )
    Print a;
    Print " ";
    Print b;
    Print "!"
#endmacro

Print2( "こんにちは", "世界" )

'' 出力は :
'' 「こんにちは 世界!」
Sleep
 


' 可変個引数パラメーターを持つマクロ

#macro test1( arg1, arg2... )
    Print arg1
    #if #arg2 = ""
        Print "2nd argument not passed"
    #else
        Print arg2
    #endif
#endmacro

test1( "1", "2" )
Print "-----------------------"
test1( "3" )
Print "-----------------------"
test1( 5, 6 )
Print "-----------------------"
test1( 7 )

/' Output :
1
2
-----------------------
3
2nd argument Not passed
-----------------------
 5
 6
-----------------------
 7
2nd argument Not passed
'/



' 複数のサブパラメーターを含むことができる、可変個引数パラメーターを持つマクロ:
'   variadic_parameter によって渡されたさまざまな引数を区別するため、
'   最初に、演算子 # (プリプロセッサ文字列化)を使って variadic_parameter を文字列に変換できます。
'   次に、この文字列(#variadic_parameter)で、渡された各引数を、区切り文字(通常はコンマ)を見つけて区別します。

#macro test2( arg1, arg2... )
    Print "'" & Trim(#arg1) & "'"
    Scope
        Dim As String s = Trim(#arg2)
        If s <> "" Then
            Do
                Dim As Integer k = InStr(1, s, ",")
                If k = 0 Then
                    Print "'" & s & "'"
                    Exit Do
                End If
                Print "'" & Left(s, k - 1) & "'"
                s = Trim(Mid(s, k+1))
            Loop
        End If
    End Scope
#endmacro

test2( 5 )
Print "----"
test2( 5,6, 7, , 9, 10, ,,13, 14 )

/' Output :
'5'
----
'5'
'6'
'7'
''
'9'
'10'
''
''
'13'
'14'
'/



バージョン:
QBとの違い:

参照:
プリ・プロセッサに戻る

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

ページ歴史:2023-11-19 04:35:52
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall

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

表示-非営利-継承