10.63 __attribute__((alias)) 変数属性

この変数属性を使用すると、1 つの変数に複数のエイリアスを指定できます。

構文

type newname __attribute__((alias(" oldname ")));
各項目には以下の意味があります。
oldname
エイリアスされる変数の名前を指定します。
newname
エイリアスされる変数の新しい名前を指定します。

使用法

エイリアスは、元の変数と同じ変換単位内で定義されている必要があります。

ブロックスコープでは、エイリアスを指定できません。コンパイラは、ローカル変数定義に関連付けられているエイリアス生成属性を無視し、変数定義を通常のローカル定義として扱います。
出力オブジェクトファイル内では、コンパイラは、エイリアス参照を元の変数名の参照に置換し、エイリアスが元の名前と共に生成されます。以下に例を示します。
int oldname = 1;
extern int newname __attribute__((alias("oldname")));
このコードは以下のようにコンパイルされます。
     LDR      r1,[r0,#0]  ; oldname
     ...
oldname
newname
     DCD      0x00000001
元の変数が static と定義されていてもエイリアスが extern として定義されている場合は、コンパイラによって元の変数が外部変数に変更されます。

関数名は、対応する関数属性 __attribute__((alias)) を使用してエイリアスされる可能性があります。

#include <stdio.h>
int oldname = 1;
extern int newname __attribute__((alias("oldname"))); // declaration
void foo(void)
{
    printf("newname = %d\n", newname); // prints 1
}
関連する参考文書
10.31 __attribute__((alias)) 関数属性
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.