Renesas Synergy™

FAQ 1008131 : 変数を宣言した順に割り付けるにはどのようにすればよいのでしょうか?

回答

リンカは、変数を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]
他にご質問がございましたら、リクエストを送信してください