| 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キーワードを無効とします。 |