アセンブリ ファイル内で #define された関数/インライン関数を使用することに制限はありますか。
2 つの異なる実装が定義されている bsd カーネルを参照しました。1 つはマクロで、もう 1 つは通常の関数です (どちらも同じ関数です)。
c ファイルでは、splx は関数として定義されています 。
h ヘッダー ファイルでは、splx はマクロとして定義されていますが、 http://ftp.hu.freebsd.org/pub/netbsd/NetBSD-release-4-0/src/sys/arch/arm/omap/omap_intr.h
私の理解では、c ファイル定義はアセンブリ ファイルで使用されますが、マクロ定義はヘッダー ファイルが含まれる他のすべての関数で使用されます。
なぜアセンブリがここに登場するのかはっきりしないと思います。基本的に 2 つの定義があります。1 つは c ファイルにあり、もう 1 つは splx の h ファイルにあります。C ファイルで splx 定義をコメントアウトすると、アセンブリ ファイルのコンパイルでエラーが発生します。 h ファイルを含む他のすべてのファイルに使用されます。
ここで私の質問は、ヘッダー ファイルをインクルードしてマクロ定義を使用できないのはなぜですか?