Compaq Cでは,ANSI C規格に対するいくつかのコモンC (旧形式のC) の機能拡張をサポートします。これらの拡張は,コンパイル・コマンド行でコモンC 互換性オプションを使用した場合にだけ認識されます。コモンC の拡張を使用すると,c89コンパイラを使用して,当初はポータブルCコンパイラ(pcc) 用に記述されたコードをコンパイルすることができます。
以降の各節で,コモンC互換性オプションで利用可能なコモンCの拡張機能について説明します。ANSI C 規格に対する拡張は,次の2つのカテゴリに分けられます。
float
へのポインタは,
int
へのポインタと互換性があります。
enum
,short
,char
,
および long
があります。ANSI C
規格では int
,unsigned int
,
または signed int
だけが許されます。
long float
は
double
の同義語と認識されます。
main()
関数の3番目の実引数,すなわち
char *envp[]
が許されます
[1]。
Compaq CをコモンC互換性モードで実行する場合,
main
関数は3番目の仮引数である
envp環境配列を受け入れることができます。この配列には,
ユーザ名などのプロセス情報と制御情報が含まれ,コマンド行から渡す実引数とは無関係です。
主に exec
および getenv
ライブラリ関数の呼出し時に使用されます。
使用しているホスト環境で main
関数を呼び出すための詳細については,
プラットフォームに固有のCompaq Cのマニュアルを参照してください。
#else
および
#endif
前処理命令の後にテキストが許されます。
int
にキャストすることができます。
int
型と long
型は互換性があります。
register
記憶域クラスの指定された変数のアドレスを取得することが許されます。
static
記憶域クラスでの関数のブロック・レベルの宣言が許されます。
[1] main()関数の仮引数は,厳密なANSIモードでのみ検査される。
unsigned
char
および unsigned
short
は unsigned int
へ拡張します。
extern
オブジェクトはすべて,ファイル・スコープを持ちます。
置換並びの再スキャンの際に,置き換えられるマクロの名前が見つかった場合, マクロ置換が行なわれます。
#
開始文字が現れた場合にだけ認識されます。空白が先行する前処理命令は無視されます。
#ifdef
は "#if
defined
" として扱われます。
#ifndef
は "#if
!defined
" として扱われます。
##
演算子のように動作します。生成されたトークンが有効ではない場合には,
マクロ置換並び中のコメントが削除されます。