9.16 定数式

イニシャライザでは、以下に示すような拡張定数式がサポートされています。

以下のサンプルでは、デフォルト、 --strict_warnings、および --strict の各コンパイラモードの動作を示します。

例 1 :変数のアドレスの代入

コードには、変数のアドレスをファイルの有効範囲内で代入する定数式が含まれている場合があります。以下に例を示します。
int i;
int j = (int)&i; /* but not allowed by ISO */
上記のコードを C 用にコンパイルすると、以下の動作が発生します。
  • デフォルトモードでは、警告が生成されます。
  • --strict_warnings モードでは、警告が生成されます。
  • --strict モードでは、エラーが生成されます。

例 2:定数値のイニシャライザ

次の表は、ARM Compilation Tools の動作と ISO C 標準を比較したものです。
--strict では無効なサンプルソースコードでも、--strict ではなく --strict_warnings でコンパイルすると有効になります。--strict のエラーメッセージは 警告メッセージにダウングレードされます。

表 9-1 定数値のイニシャライザの動作(ISO 標準 C との比較)

サンプルソースコード ISO C 標準 ARM Compilation Tools
--strict モード 厳密モード以外
extern int const c = 10; 有効 有効 有効
extern int const x = c + 10; 無効 無効 有効
static int y = c + 10; 無効 無効 有効
static int const z = c + 10; 無効 無効 有効
extern int *const cp = (int*)0x100; 有効 有効 有効
extern int *const xp = cp + 0x100; 無効 無効 有効
static int *yp = cp + 0x100; 無効 無効 有効
static int *const zp = cp + 0x100; 無効 無効 有効
関連する参考文書
8.80 --extended_initializers、--no_extended_initializers
8.176 --strict、--no_strict
8.177 --strict_warnings
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.