しばらく経ちましたが、問題は実際にはUDT(ユーザー定義型、別名「組み込みではない任意の型」)を返すことができないことにあると思います。あなたがする必要があるのは、3 番目の引数を に渡して、Vector2Add
それをSUB
. 例えば:
SUB Vector2Add (r AS Vector2, a AS Vector2, b AS Vector2)
r.x = a.x + b.x
r.y = a.y + b.y
END SUB
はSUB
、構文の違いを除けば、同等の C コードを使用したほぼ正確な翻訳です。私の推論は、通常、QB の a の名前に型サフィックスを追加するか、 (またはQB64 でFUNCTION
オーバーライドされた可能性がある) デフォルトの型を使用することです。UDT では使用できません) たとえば、次の文字列を返します。DEFxxx M-N
_DEFINE
_DEFINE
'Default type for all identifiers beginning with 'S' is STRING.
' Type suffixes, "AS xxxx" clauses and future "DEFxxx" items override the behavior.
DEFSTR S-S
FUNCTION swapFirstLast$ (s)
swapFirstLast$ = RIGHT$(s, 1) + MID$(s, 2, LEN(s) - 2) + LEFT$(s, 1)
END FUNCTION
QB64 は、QuickBASIC 4.5 で使用される構文と可能な限り互換性を保つことを目的としているため、この点で少し制限されています。QB に基づく別の言語である FreeBASIC には、そのような制限はありません。
'Notice the "AS Vector2" at the end of this next line and the RETURN statement
' that FB introduced for FUNCTIONs (originally it was used to return from an
' "old-style" subroutine that was invoked via the GOSUB statement).
FUNCTION Vector2Add (a AS Vector2, b AS Vector2) AS Vector2
DIM r AS Vector2
r.x = a.x + b.x
r.y = a.y + b.y
RETURN r
END FUNCTION
覚えておくべき重要な点は、QB64 は基本的に QB のままですが、最新のオペレーティング システム (DOS ではなく) で実行するコードをコンパイルすることを除きます。一方、FreeBASIC は、QB の構文を保持するより「現代的な」言語を作成することを優先して、互換性をいくらか犠牲にすることを選択しました。