JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: C ユーザーガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  C コンパイラの紹介

2.  C コンパイラ実装に固有の情報

3.  C コードの並列化

4.  lint ソースコード検査プログラム

5.  型に基づく別名解析

6.  ISO C への移行

7.  64 ビット環境に対応するアプリケーションへの変換

7.1 データ型モデルの相違点

7.2 単一ソースコードの実現

7.2.1 派生型

7.2.1.1 <sys/types.h>

7.2.1.2 <inttypes.h>

固定幅の整数型

unintptr_t などの便利な型

定数マクロ

制限

書式文字列マクロ

7.2.2 lint によるチェック

7.3 LP64 データ型モデルへの変換

7.3.1 整数とポインタのサイズの変更

7.3.2 整数とロング整数のサイズの変更

7.3.3 符号拡張

7.3.4 整数の代わりのポインタ演算

7.3.5 構造体

7.3.6 共用体

7.3.7 型定数

7.3.8 暗黙の宣言に対する注意

7.3.9 sizeof( ) は符号なし long

7.3.10 型変換で意図を明確にする

7.3.11 書式文字列の変換操作を検査する

7.4 変換に関するその他の注意事項

7.4.1 注: サイズが大きくなった派生型

7.4.2 変更の副作用の検査

7.4.3 long のリテラル使用の効果持続の確認

7.4.4 明示的な 32 ビットと 64 ビットプロトタイプに対する #ifdef の使用

7.4.5 呼び出し規則の変更

7.4.6 アルゴリズムの変更

7.5 変換前の確認事項

8.  cscope: 対話的な C プログラムの検査

A.  機能別コンパイラオプション

B.  C コンパイラオプションリファレンス

C.  ISO/IEC C 99 の処理系定義の動作

D.  C99 の機能

E.  ISO/IEC C90 の処理系定義の動作

F.  ISO C データ表現

G.  パフォーマンスチューニング

H.  Oracle Solaris Studio C: K&R C と ISO C の違い

索引

7.4 変換に関するその他の注意事項

この節では、アプリケーションを完全な 64 ビットプログラムに変換するときに発生する問題を取り上げます。

7.4.1 注: サイズが大きくなった派生型

いくつかの派生型は、64 ビットアプリケーションコンパイル環境で 64 ビット量を表すようになりました。この変更が 32 ビットアプリケーションに影響することはありませんが、これらの型で表されるデータを消費またはエクスポートする 64 ビットアプリケーションは、評価し直す必要があります。たとえば、utmp(4) または utmpx(4) ファイルを直接操作するアプリケーションでは、これらのファイルに直接アクセスを試みないでください。64 ビットアプリケーション環境での正しい操作のためには、getutxent (3C) および関連する関数ファミリを代わりに使用します。

7.4.2 変更の副作用の検査

ある場所で型を変更したために、別のコード部分で予想外の 64 ビット変換が発生することがあります。たとえば、それまで int を返していて、現在は ssize_t を返す ようになった関数のすべての呼び出し元を検査してください。

7.4.3 long のリテラル使用の効果持続の確認

long と定義された変数は、ILP32 データ型モデルでは 32 ビット、LP64 データ型モデルでは 64 ビットです。可能な場合は、変数を定義し直し、移植性に優れた派生型を使用することによって問題を回避してください。

この問題に関連して、LP64 データ型モデルでは、いくつかの派生型が変更されています。たとえば、pid_t は 32 ビット環境では long のままですが、64 ビット環境では pid_tint です。

7.4.4 明示的な 32 ビットと 64 ビットプロトタイプに対する #ifdef の使用

場合によっては、32 ビットや 64 ビット専用のインタフェースを使用しなければならないことがあります。これらのバージョンは、ヘッダー中で _LP64 または _ILP32 機能テストマクロを指定することによって区別できます。同様に、32 ビットまた 64 ビット環境で動作するコードでは、コンパイルモードに従って適切な #ifdefs を使用する必要があります。

7.4.5 呼び出し規則の変更

構造体を値によって渡し、64 ビット環境用にコードをコンパイルした場合、その構造体は、コピーへのポインタとしてではなく、レジスタ中で渡されます (構造体がそのようにできるほどの大きさの場合)。C コードと手書きのアセンブリコード間で構造体を渡そうとすると、この処理によって問題が起きる可能性があります。

浮動小数点パラメータも同様に機能します。値で渡される一部の浮動小数点値は浮動小数点レジスタ中で渡されます。

7.4.6 アルゴリズムの変更

64 ビット環境で安全なコードを作成したら、コードを見直して、アルゴリズムとデータ構造体が正しく機能することを確認してください。データ構造体のデータ型が大きいほど、使用する空間が増えることがあります。コードのパフォーマンスも影響を受けるかもしれません。こうしたことに注意し、必要に応じてコードを修正してください。