Skip to main content

IAR Embedded Workbench for Arm 9.70.x

C89の処理系定義の動作

このセクションの内容:

C89ではなくC規格を使用する場合、C規格の処理系定義の動作を参照してください。

説明

ISOの付録と同順で各項目を説明します。各項目では、処理系定義の動作を説明するISOの章/セクション(括弧で示す)を示しています。

変換

診断 (5.1.1.3)

診断は、以下のフォーマットで生成されます。

filename,linenumber level[tag]: message

ここで、filenameはエラーが発生したソースファイル名、linenumberはコンパイラがエラーを検出した行番号、levelはメッセージの重要度(リマーク、ワーニング、エラー、致命的なエラー)、tag はメッセージを識別する固有のタグ、messageは数行に及ぶこともある説明のメッセージです。

環境

main関数の引数 (5.1.2.2.2.1)

プログラム起動時に呼び出される関数は、main関数です。 mainにはプロトタイプは宣言されていません。mainでサポートされている唯一の定義は以下のとおりです。

int main(void)

DLIBランタイム環境におけるこの動作を変更する場合は、システム初期化を参照してください。

対話型装置 (5.1.2.3)

ストリームstdinおよびstdoutは、対話型デバイスとして扱われます。

識別子

外部リンクなしの識別子 (6.1.2)

外部リンクなしの識別子での有効先頭文字数は200です。

外部リンクありの識別子 (6.1.2)

外部リンクありの識別子での有効先頭文字数は200です。

大文字と小文字の区別 (6.1.2)

外部リンクのある識別子では、大文字と小文字が区別されます。

文字

ソース文字集合・実行文字集合 (5.2.1)

ソース文字集合は、ソースファイルで使用できる正当な文字集合です。ソースファイルに選択したエンコードによって異なります。テキストエンコーディングを参照してください。デフォルトでは、ソース文字集合は、Rawです。

実行文字集合は、実行環境で使用できる正当な文字集合です。これらは文字定数および文字列リテラルの実行文字集合です。それらのエンコードタイプ:

実行文字集合

エンコードタイプ

L

UTF-32

u

UTF-16

U

UTF-32

u8

UTF-8

none

ソース文字集合

表129 実行文字集合およびそのエンコード 


IAR DLIBランタイム環境では、マルチバイトの実行文字集合をサポートするには、マルチバイト文字スキャナが必要です。ロケールを参照してください。

実行文字集合の1文字当たりのビット数 (5.2.4.2.1)

1文字あたりのビット数は、manifest定数CHAR_BITで示されます。標準インクルードファイルlimits.hでは、CHAR_BITは8と定義されています。

文字のマッピング (6.1.3.4)

ソース文字集合(文字か文字列リテラル)のメンバと実行文字集合のメンバのマッピングは、1対1で設定されています。すなわち、文字集合内の各メンバを表現する値は、ISO規格で規定されているエスケープシーケンスを除き、両者で同一のものが使用されています。

表現されない文字定数 (6.1.3.4)

基本実行文字集合かワイド文字定数用の拡張文字集合で表現されていない文字やエスケープシーケンス整数文字定数の値を使用すると、診断メッセージが出力され、実行文字集合に合わせて切り詰められます。

1文字以上の文字定数 (6.1.3.4)

文字数が複数の整数文字定数は、整数定数として処理されます。値は、整数定数で左端の文字を最上位文字、右端の文字を最下位文字として計算されます。値が整数定数で表現できない場合は、診断メッセージが出力されます。

複数のマルチバイト文字を含むワイド文字定数を使用すると、診断メッセージが出力されます。

マルチバイト文字の変換 (6.1.3.4)

ロケールを参照してください。

プレーンなchar の範囲 (6.2.1.1)

プレーンなcharの範囲は、unsigned charと同一です。

整数

整数値の範囲 (6.1.2.5)

整数値は、2の補数で表現されます。最上位ビットは符号を示し、1の場合は負の値、0の場合は正の値またはゼロを示します。

各種の整数型の範囲については、基本データ型整数型を参照してください。

整数の降格 (6.2.1.2)

整数をより短い符号付整数に変換する場合は、切捨てが行われます。符号なし整数を同一長の符号付整数に変換すると値が表現できなくなる場合も、ビットパターンは変化しません。すなわち、値が十分に大きい場合、負の値に変換されます。

符号付整数に対するビット単位の演算 (6.3)

符号付整数に対するビット単位の演算は、符号なし整数に対するビット単位演算と同様に行われます。すなわち、符号ビットが他のビットと同様に扱われます。算術右シフトとして動作する演算子>>を除きます。

整数除算での余りの符号 (6.3.5)

整数除算での余りの符号は、被除数の符号と同一です。

負の符号付整数型の右シフト (6.3.7)

負の符号付整数型を右シフトした場合、符号ビットが保持されます。たとえば、0xFF00を1回右シフトすると、結果は0xFF80になります。

浮動小数点数

浮動小数点数の表現 (6.1.2.5)

浮動小数点数の表現およびセットは、IEC 60559に準拠しています。通常の浮動小数点数は、符号ビット(s)、バイアス指数(e)、指数部(m)で構成されます。

浮動小数点数型(floatdouble)の範囲およびサイズについては、基本データ型浮動小数点数型を参照してください。

整数値から浮動小数点値への変換 (6.1.2.3)

整数値を、値を正確に表現できない浮動小数点数値にキャストした場合、値は最近似値に丸められます(切上げまたは切捨て)。

浮動小数点値の降格 (6.2.1.4)

浮動小数点数値を、サイズが小さな型の、値を正確に表現できない浮動小数点数値に変換した場合、値は最近似値に丸められます(切上げまたは切捨て)。

配列、ポインタ

size_t (6.3.3.4, 7.1.1)

size_tについては、size_tを参照してください。

ポインタからの変換・ポインタへの変換 (6.3.4)

データポインタと関数ポインタのキャストについては、キャストを参照してください。

ptrdiff_t (6.3.6, 7.1.1)

ptrdiff_tについては、を参照してください。

レジスタ

registerキーワードの扱い (6.5.1)

レジスタ変数についてのユーザ要求は考慮されません。

構造体、共用体、列挙型、ビットフィールド

共用体への不正なアクセス (6.3.2.3)

メンバを使用して共用体に値を格納し、そのメンバとは異なる型のメンバを使用してアクセスすると、結果は最初のメンバの内部記憶エリアに完全に依存します。

構造体メンバのパディングとアライメント (6.5.2.1)

データオブジェクトの配置要件については、基本データ型整数型を参照してください。

プレーンなビットフィールドの符号 (6.5.2.1)

プレーンなintビットフィールドは、unsigned intビットフィールドとして処理されます。すべての整数型は、ビットフィールドとして使用できます。

ビットフィールドの配置順 (6.5.2.1)

ビットフィールドは、整数内で最下位ビットから最上位ビットの順でアライメントされます。

記憶単位の境界をまたぐビットフィールド (6.5.2.1)

ビットフィールドは、選択したビットフィールド整数型の記憶単位の境界をまたぐことはできません

列挙型を表現するために選択される整数型 (6.5.2.2)

特定の列挙型用に選択される整数型は、列挙型用に定義された列挙定数によって異なります。最小の整数型が選択されます。

修飾子

volatileオブジェクトへのアクセス (6.5.3)

volatileで修飾された型のオブジェクトへの参照は、すべてアクセスされます。

宣言子

宣言子数の上限 (6.5.4)

宣言子の個数には上限はありません。個数は、空きメモリ容量にのみ制限されます。

case文の上限数(6.6.4.2)

switch文でのcase文(case値)の個数には、上限はありません。個数は、空きメモリ容量にのみ制限されます。

プリプロセッサディレクティブ

文字定数と条件の指定 (6.8.1)

プリプロセッサディレクティブで使用されている文字集合は、実行文字集合と同一です。プリプロセッサは、プレーンcharがsigned charとして扱われる場合、負のcharを認識します。

角括弧で括ったファイル指定 (6.8.2)

角括弧で括ったファイル指定の場合、プリプロセッサは親ファイルのディレクトリを検索しません。親ファイルは、#includeディレクティブを含むファイルになります。その代わりに、コンパイラのコマンドラインで指定したディレクトリで最初にファイル検索を実行します。

引用符で括ったファイル指定 (6.8.2)

引用符で括ったファイル指定の場合、プリプロセッサのディレクトリ検索は、親ファイルのディレクトリでまず実行され、その後でそれより上位の階層のファイルのディレクトリに対して順に実行されます。したがって、処理中のソースファイルを含むディレクトリと相対的に検索が行われます。親よりも上位の階層のファイルがなく、ファイルが見つからなかった場合は、角括弧で括ってファイル名を指定した場合と同様に検索が続行されます。

文字シーケンス (6.8.2)

プリプロセッサディレクティブは、エスケープシーケンスを除き、ソース文字集合を使用します。したがって、インクルードファイルのパスを指定する場合は、次のように円記号を1つだけ使用します。

#include "mydirectory\myfile"

ソースコード内では、次のように円記号が2つ必要です。

file = fopen("mydirectory\\myfile","rt");
認識されるプラグマディレクティブ (6.8.6)

プラグマディレクティブで説明したプラグマディレクティブ以外にも、以下のディレクティブも認識されます。ただし、これらの影響は不定です。プラグマディレクティブはPragmaディレクティブの章とここの両方でリストされる場合、Pragma ディレクティブの章の情報は、ここの情報を上書きします。

  • alignment

  • baseaddr

  • building_runtime

  • can_instantiate

  • codeseg

  • cspy_support

  • define_type_info

  • do_not_instantiate

  • early_dynamic_initialization

  • function

  • function_effects

  • hdrstop

  • important_typedef

  • instantiate

  • keep_definition

  • library_default_requirements

  • library_provides

  • library_requirement_override

  • memory

  • module_name

  • no_pch

  • once

  • system_include

  • vector

  • warnings

Default __DATE__ and __TIME__ (6.8.8)

__TIME____DATE__の定義は常に使用可能です。

DLIB ランタイムライブラリ関数

注記

このリストの項目には、ファイル記述子がライブラリ構成でサポートされている場合にのみ当てはまるものもあります。ランタイムライブラリ構成の詳細は、DLIBランタイム環境のを参照してください。

NULLマクロ (7.1.6)

NULLマクロは、0に定義されています。

assert関数で出力される診断 (7.2)

assert()関数で出力される診断は、以下のとおりです。

filename:linenr expression ‑‑ assertion failed

この診断は、パラメータがゼロに評価される場合に出力されます。

定義域エラー (7.5.1)

数学関数でドメインエラーが発生すると、NaN(非数)が返されます。

浮動小数点値のアンダフロー時にERANGEに設定するerrno (7.5.1)

数学関数は、アンダーフロー範囲エラー発生時に、整数式errnoERANGEerrno.hで定義されているマクロ)に設定します。

fmod 関数の機能 (7.5.6.4)

fmod()の2番目の引数がゼロの場合、関数はNaNerrnoを返しますerrnoはEDOMに設定されます。

signal関数 (7.7.1.1)

シグナル関連のライブラリはサポートされていません。

注記

signalのデフォルトの実装は何の処理も行いません。アプリケーション固有のシグナル処理を実装する場合は、テンプレートソースコードを使用してください。signalおよびraiseを参照してください。

行を終了する文字 (7.9.2)

stdoutストリーム関数は、newline または end of file (EOF) のどちらかを改行文字として認識します。

空白行 (7.9.2)

stdoutストリームで改行文字直前に書き込まれた空白文字は保持されます。stdoutストリームで書き込まれた行を stdinストリームで読み取る方法はありません。

バイナリストリームに書き込まれたデータへのNULL文字の追加 (7.9.2)

バイナリストリームにライトされたデータには、NULL文字は追加されません。

ファイル (7.9.3)

追加モードのストリームのファイル位置インジケータが最初にファイルの先頭または末尾に配置されているかどうかは、低レベルファイルルーチンのアプリケーション固有の実装に依存します。

テキストストリームへのライトにより、対応するファイルでその書込み位置以降が切り捨てられるかどうかは、アプリケーションごとの低レベルファイルルーチンの実装によって異なります。入出力(I/O)の概要を参照してください。

ファイルのバッファ化の特徴は、アンバッファされたファイル、ラインバッファされたファイル、完全にバッファされたファイルが実装でサポートされるということです。

ゼロ長のファイルが実際に存在するかどうかは、下位レベルのファイルルーチンのアプリケーション固有の実装によって異なります。

有効なファイル名の作成規則は、下位レベルのファイルルーチンのアプリケーション固有の実装によって異なります。

同じファイルを同時に何度も開くことができるかどうかは、下位レベルのファイルルーチンのアプリケーション固有の実装によって異なります。

remove関数 (7.9.4.1)

開いたファイルに対する削除処理の結果は、アプリケーションごとの低レベルファイルルーチンの実装によって異なります。入出力(I/O)の概要を参照してください。

rename関数 (7.9.4.2)

ファイルの名前を既存のファイル名に変更した結果は、アプリケーションごとの低レベルファイルルーチンの実装によって異なります。入出力(I/O)の概要を参照してください。

printf関数の%p (7.9.6.1)

printf()%p変換指定子(出力ポインタ)の引数は、void *型として処理されます。値は、%x変換指定子の場合と同様に、16進数として出力されます。

scanf関数の%p (7.9.6.2)

scanf()%p変換指定子(スキャンポインタ)は、16進数を読み取り、void *型の値に変換します。

scanf関数の読み込み範囲 (7.9.6.2)

- (ダッシュ)文字は、常に範囲記号として処理されます。

ファイル位置エラー (7.9.9.1, 7.9.9.4)

ファイル位置エラー発生時に、関数 fgetpos および ftellEFPOSerrnoに格納します。

perror関数で生成されるメッセージ (7.9.10.4)

生成されるメッセージは、次のとおりです。

usersuppliedprefix:errormessage
ゼロバイトのメモリ割り当て (7.10.3)

calloc()malloc()realloc()の各関数では、引数としてゼロを指定できます。メモリが割り当てられ、そのメモリへの有効なポインタが返され、メモリブロックを後でreallocを使用して修正できます。

abort関数の振る舞い (7.10.4.1)

abort()関数では、ストリームバッファをフラッシュしません。また、ファイル処理はサポートされていないため、ファイル処理は実行しません。

exit関数の振る舞い (7.10.4.3)

exit関数では、main関数がcstartupに返した値が引数として引き渡されます。

環境 (7.10.4.4)

使用可能な環境名/環境リストの変更方法については、getenvを参照してください。

system関数 (7.10.4.5)

コマンドプロセッサの動作は、system関数の実装によって異なります。systemを参照してください。

strerror関数が返すメッセージ (7.11.6.2)

strerror()が返すメッセージは、次のとおりです。

引数

メッセージ

EZERO

no error

EDOM

domain error

ERANGE

range error

EFPOS

filepositioningerror

EILSEQ

multi-byteencodingerror

<0 || >99

unknown error

その他

error nnn

表130 strerror()が返すメッセージ — DLIBランタイム環境 


The time zone (7.12.1)

ローカルの時間帯と夏時間の実装については、__time32, __time64を参照してください。

clock関数 (7.12.2.1)

システムクロックがカウントを開始する地点は、clock関数の実装によって異なります。clockを参照してください。