回答
リンカは、変数をextern宣言して、かつ使用されているオブジェクト・ファイルが仮定義しているオブジェクト・ファイルよりも先にリンクされた場合、extern宣言された変数から配置場所を決定しています。
宣言順に変数を配置するためには、変数を仮定義しているオブジェクト・ファイルを、 その変数をextern宣言して、かつ使用されているオブジェクト・ファイルよりも先にリンクさせる必要があります。
例) /* func1.c */ extern int b; void func1( void ) { ... } /* func2.c */ int a; int b; int c; void func2( void ) { ... }
c:\> ld850.exe file1.o file2.o
変数bは、extern宣言されたfile1.oで先に配置されるため、変数b、変数a、変数cの順で配置される。
c:\> ld850.exe file2.o file1.o
file2.oの変数a、変数b、変数cを配置後、file1.oの変数bがextern宣言されているため、 変数a、変数b、変数cの順で配置される。
#pragma section を使用して変数を定義すると、定義した順に配置されます。
例) #pragma section sdata begin unsigned short a; unsigned short b; unsigned short c; #pragma section sdata end
適用製品
V850用コンパイラパッケージ [CA850] |