Solaris 7 64 ビット 開発ガイド

ツール

Sun WorkShop Compilers C のバージョン 5.0 に lint(1) プログラムの新しいバージョンが Sun から提供されています。64 ビットで発生する可能性がある問題を検出できるように強化され、コードを 64 ビット安全にするのに役に立ちます。また、C コンパイラの -v コンパイルオプションも便利です。このオプションを使用すると、コンパイル時に通常のチェックに加えて、より厳しい意味解析上のチェックが行われます。さらに、引数として指定したファイルに対して lint に似たチェックも実行します。

コードを 64 ビット安全に修正する場合、64 ビット環境用の派生型とデータ構造を正しく定義しているヘッダーファイルを使用してください。つまり、Solaris 7 オペレーティング環境にあるヘッダーファイルを使用してください。

Sun WorkShop Compilers C のデバッグ機能と lint(1) の詳細については、『C ユーザーズガイド』を参照してください。

lint(1)

lint(1) は、32 ビットコードおよび 64 ビットコードの両方に使用することができます。32 ビット環境および 64 ビット環境の両方で実行するコードには、-errchk=longptr64 オプションを使用します。-errchk=longptr64 フラグは、ロング整数とポインタのサイズが 64 ビットで、かつ普通の整数が 32 ビットである環境への移植性を調べるのに使用します。

-Xarch=v9 オプションは、64 ビット SPARC 環境で実行するコードに対して lint を実行する場合に使用します。64 ビット SPARC 上で実行するコードに対して、発生する可能性がある 64 ビット関連の問題について警告を表示するようにするには、-Xarch=v9 オプションと共に -errchk=longptr64 オプションを使用します。


注 -

lint には -D__sparcv9 オプションを使用しないでください。


警告がある場合、 lint(1) は、エラーが発生した行の行番号、問題を説明する警告メッセージ、およびポインタが関わっているかどうかを出力します。関連する型のサイズも示されます。ポインタが関わっているかどうかおよび型のサイズを知ることは、64 ビット問題を特定し、さらに 32 ビットとそれより小さい型との間の問題を避けるのに役に立ちます。


注 -

lint は発生する可能性がある 64 ビット関連の問題に関して警告を出すことはできますが、問題をすべて検出できるわけではありません。また lint が出力する警告の中には 64 ビット関連以外の問題が含まれていることもあります。警告が出されていても、そのコードは特定の意図に沿って記述されていてアプリケーションにとって適切なコードである、という場合がよくあります。


次に、考慮すべき警告をいくつか例として示します。


warning: conversion of pointer loses bits 
warning: assignment causes implicit narrowing conversion 
warning: cast to pointer from different-bit integer  
warning: cast from bigger-bit integer to smaller-bit integer
warning: assignment of bigger-bit integer to smaller-bit integer
warning: bigger-bit constant truncated to smaller bits by assignment 
warning: passing bigger-bit integer arg, expecting smaller-bit integer:
  routine name(arg argument number)
warning: passing bigger-bit integer constant arg, expecting smaller-bit
  integer: routine name(arg argument number))
warning: function argument (number) type inconsistent with format
  printf (arg argument number) type used:  (format) type expected file (line)
warning: function argument (number) type inconsistent with format:
  scanf (arg  argument number)  type used: (format) type expected file (line)
warning: cast from bigger-bit constant expression to smaller-bit integer  [lint は、キャストされる型に定数式を変換できない場合にだけ、警告を出します。]  

/*LINTED*/ コメントをその前の行に置くと、任意のソース行に対する警告を抑止できます。これは、意図的に特別な動作をコード中に記述したい場合には役に立ちます。例としては、キャストや代入の場合があります。/*LINTED*/ コメントは、実際に問題がある場合にもそれを検出しないようにするので、使用する際は十分に注意してください。lint(1) コマンドについての詳細は、『C ユーザーズガイド』または lint(1) のマニュアルページを参照してください。