英語フランス語スペイン語

Ad


OnWorksファビコン

cpphs - クラウド上のオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターを介して OnWorks 無料ホスティング プロバイダーで cpphs を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド cpphs です。

プログラム:

NAME


cpphs - Haskell 用の自由化された cpp-a のようなプリプロセッサ

SYNOPSIS


cpph [ファイル名|オプション] ...

DESCRIPTION


cpph の自由化された再実装です cpp (1) C プリプロセッサ内および C プリプロセッサ向け
Haskell。

なぜ cpp を再実装するのでしょうか? 良くも悪くも、C プリプロセッサは Haskell で広く使用されています。
ソースコード。 さまざまなコンパイラで条件付きコンパイルが可能になります。
同じコンパイラのバージョン、異なる OS プラットフォーム。 こちらもたまに使われます
マクロ言語については、特定の形式のプラットフォーム固有の詳細を有効にすることができます。
インスタンス定義や FFI の面倒な定型生成などの埋め込み
宣言。 ただし、cpp には、明らかな美しさ以外に XNUMX つの問題があります。
もの:

一部の Haskell システム、特に Windows 上の Hugs では、真の cpp は利用できません。
デフォルト。

他の Haskell システムでも、gcc 3.x シリーズが提供する共通の cpp
Haskell の構文と互換性のない方法で微妙に変更されています。 あります
たとえば、文字列のギャップやプライム文字などの問題が常に発生します。
識別子。 これらの問題は悪化するばかりです。

したがって、どちらも cpp との互換性が高く、cpp の代替手段を提供しようとするのは正しいと思われました。
Haskell と、それ自体がコンパイラとともに配布できるように Haskell で書かれています。

cpph 機能はほぼ完成しており、と互換性があります。 -伝統的な CPPのスタイル。
次の XNUMX つのモードがあります。

条件付きコンパイルのみ (--ノマクロ),

および完全なマクロ展開 (デフォルト)。

In --ノマクロ モード、 cpph 条件付きコンパイル アクションのみを実行します。つまり、 #include「S、
#もし'砂 #ifdefはテキスト置換定義に従って処理されます (両方のコマンド
行および内部)、パラメータ化されたマクロ展開は実行されません。 略さずに
互換モード (デフォルト)、テキストの置換、マクロ拡張も可能です。
非 cpp テキストの残りの本文で処理されます。

動作機能:

#ifdef 単純な条件付きコンパイル

#もし Definition()、&&、||、== などの完全なブール言語。

#エリフ 連鎖した条件文

#定義する
インライン定義 (テキスト置換とマクロ)

#undef 定義のインライン取り消し

#include
ファイルのインクルード

#ライン 行番号ディレクティブ

\n すべての # ディレクティブ内の行継続

/ ** / マクロ定義内のトークン連結

## ANSI スタイルのトークン連結

# ANSI スタイルのトークン文字列化

__ファイル__
DIY エラー メッセージの特別なテキスト置換

__ライン__
DIY エラー メッセージの特別なテキスト置換

__日にち__
特殊なテキスト置換

__時間__
特殊なテキスト置換

マクロ展開は再帰的です。 マクロ名の再定義では警告は生成されません。
マクロはコマンドラインで次のように定義できます。 -D テキストの置換と同じように。 大きい
名前には、Haskell 識別子 (プライム ` とバッククォート ´ など) を使用できます。
C よりも若干緩い文字ですが、それでも演算子が含まれない場合があります。
シンボル。

出力内の行番号は保持されるため、後続のプロセッサで行番号を付けることができます。
意味のあるエラーメッセージ。 ファイルが #include'NS、 cpph インサート #ライン に対する指令
同じ理由です。 行が継続している場合でも、番号付けは正確である必要があります。
あなたがしたくない場合 #ライン 最終出力のディレクティブの場合は、 --ノリン オプションを選択します。

cpp ディレクティブに構文エラーがあると、stderr にメッセージが送られ、プログラムが停止します。
#include されたファイルが見つからない場合は、stderr に警告が生成されますが、処理は続行されます。

コマンドラインでは、任意の数のファイル名を指定できます。 結果は次のように連結されます。
標準出力。

-Dsym テキストの置換を定義します (デフォルト値は 1)

-Dsym=ヴァル
特定の値によるテキスト置換を定義する

-Ipath #include の検索パスにディレクトリを追加します。

-Ofile 出力用のファイルを指定します (デフォルトは stdout)

--ノマクロ
#ifdef と #include のみを処理します。
マクロを展開しないでください

--ノリン
出力から #line ドロップを削除します

- ストリップ
C スタイルのコメントを外部でも空白に変換します
cpp ディレクティブ

--ハッシュ
ANSI # stringise 演算子、および ## を認識します。
マクロ内でのトークンの連結

- テキスト 入力をHaskellコードではなくプレーンテキストとして扱います

- レイアウト
マクロ展開内で改行を保持する

--消灯
読み書きスタイルのコメントを削除する

- バージョン
cpphs のバージョン番号を報告して停止する

デフォルトでは定義されたテキスト置換はありません。 (通常の cpp には通常定義があります
マシン、OS など。必要に応じて、これらを cpphs ソース コードに簡単に追加できます。)
検索パスは次の順序で検索されます。 -I オプション、ただし、
呼び出し元のファイル、次に現在のディレクトリが常に最初に検索されます。 繰り返しますが、ありません
デフォルトの検索パス (これも簡単に変更できます)。

違い FROM CPP


一般に、cpphs は以下に基づいています。 -伝統的な ANSI C ではなく動作し、
標準 cpp との主な違いは次のとおりです。



  # cpp ディレクティブを導入するものは行の最初の列になければなりません (一方、
ANSI では、 # ).

を生成します。 #ライン n "ファイル名" 構文ではなく、 # n "ファイル名" 変異体。

C コメントは cpp ディレクティブ内からのみ削除されます。 他のものから剥奪されることはありません
文章。 たとえば、Haskell では、次のすべてが有効な演算子であると考えてください。
記号: /* */ * / * ただし、次のコマンドを使用して C コメントの削除をオンにすることができます。 - ストリップ オプションを選択します。

マクロ 言語

受け入れる / ** / マクロ定義でのトークン貼り付け用。 しかし、 /* */ (どんなテキストでも
開始コメントと終了コメントの間に)空白が挿入されます。

ANSI ## トークン貼り付け演算子は、 --ハッシュ 国旗。 これは避けるためです
同じ名前の有効な Haskell 演算子を誤解する。

文字列内 (double または single) であっても、マクロの仮パラメータを実際のパラメータに置き換えます。
引用)。 これは従来の動作であり、ANSI ではサポートされていません。

を認識します # マクロ定義で文字列化演算子を使用するのは、 --ハッシュ
オプション。 (これは ANSI の追加であり、引用符で囲まれた文字列化 (上記) が必要な場合にのみ必要です。
ANSI によって禁止されています。)

テキスト置換定義内の空白を正確に保持します (モジュロ改行)。
ただし、先頭と末尾のスペースは削除されます。

マクロ定義 (およびその末尾) 内の空白を正確に保持します (モジュロ)
改行)、ただし先頭のスペースは削除されます。

マクロ呼び出し引数内の空白を正確に保持します (改行を含む)。
そして末尾のスペースは削除されます。

- レイアウト オプション、テキスト置換またはマクロ定義内の行継続
マクロ呼び出しでは改行として保持されます。 (レイアウトに依存するコードに便利です。
ハスケル。)

onworks.net サービスを使用してオンラインで cpphs を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad