near/far関数(#pragma near/#pragma far) 【V1.05以降】
|
__near/__farを指定した関数であることをコンパイラに示唆します。
[機能]
- | #pragma nearを指定した関数を,__near指定の関数として呼び出します。 |
#pragma nearを指定した関数のアドレス参照は必ずnearポインタを返し,関数は再配置属性TEXTのセクションへ配置します。
__nearについてはメモリ配置領域指定(__near/__far)を参照してください。
- | #pragma farを指定した関数を,__far指定の関数として呼び出します。 |
#pragma farを指定した関数のアドレス参照は必ずfarポインタを返し,関数は再配置属性TEXTFのセクションに配置します。
__farについてはメモリ配置領域指定(__near/__far)を参照してください。
- | #pragma nearを指定した関数は,__callt,__farキーワードを付加した関数であっても,警告なしでキーワードを無視します。 |
callt関数としたい場合は#pragma nearではなく#pragma calltを指定してください。
- | #pragma farを指定した関数は,__callt,__nearキーワードを付加した関数であっても,警告なしでキーワードを無視します。 |
- | 同一関数に対して#pragma callt,#pragma near,#pragma farが重複した場合は,#pragma callt > #pragma near > #pragma farの優先度で#pragmaが有効になります。 |
[方法]
- | 関数の最初の宣言より前で#pragma near/#pragma farを宣言します。 |
#pragma near [(] 関数名 [,...][)]
#pragma far [(] 関数名 [,...][)]
|
[制限]
- | 同一関数に対し複数の宣言があり,2度目以降の宣言に作用する位置に#pragma near/#pragma farを記述した場合,動作を保証しません。#pragma near/#pragma farは宣言より前に記述してください。 |
- | 同一関数に対し#pragma callt,#pragma near,#pragma far以外の#pragmaを指定すると,コンパイル・エラーとなります。 |
- | 本#pragma指令の対象となる関数の宣言に__inlineを指定すると,コンパイル・エラーとなります。 |
[使用例]
#pragma near func1,func3
#pragma far func2,func3 // func3は#pragma nearが優先されます
extern void func1(void); // #pragma nearの影響で,警告なしで__nearになります
extern void __near func2(void); // #pragma farの影響で,警告無しで__farになります
extern void __callt func3(void); // #pragma nearの影響で,警告なしで__nearになります
// 警告なしで__calltは無効になります
void main(void)
{
func1( );
func2( );
func3( );
:
}
|
[備考]
- | キーワード__near / __far と #pragma near/#pragma farの違いについて |
- | #pragma near/#pragma far は複数の関数に対して同時に指定できます。 |
- | __farキーワードは__calltキーワードや__nearキーワードとの混在を許さずコンパイル・エラーとなります。 |
- | #pragma near/#pragma far は警告なしで__callt/__near/__farキーワードを無効とします。 |