これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド shtool-scpp です。
プログラム:
NAME
shtool-scpp - GNU shtool C ソース ファイル プリプロセッサ
SYNOPSIS
シュツール scpp [-v|-詳細] [-p|- 保存] [-f|- フィルター filter ] [-o|- 出力 オフィス]
[-t|- レンプレート tファイル] [-M|- マーク マーク] [-D|- 定義 dname] [-C|- クラス cname] file [file
...]
DESCRIPTION
このコマンドは、共有用の追加の ANSI C ソース ファイル プリプロセッサです。 cpp(1) コード
セグメント、内部変数、内部関数。 この意図は以下から来ています
ANSI C でライブラリを作成します。ここでは、通常、共通の共有内部ヘッダー ファイルが使用されます。
ライブラリソースファイル間で情報を共有します。
この操作は、特殊な構造を解析することです。 fileこれらからいくつかのものを生成します
を構築し、所定の位置に挿入します マーク in tファイル 出力を書き込むことで オフィス.
さらに、 fileは決して触れられたり変更されたりすることはありません。 代わりに構成要素が削除されます
後で、 cpp(1) ビルドプロセスのフェーズ。 唯一の前提条件は、 file
``"#include "" がありますオフィス"""'' 頂点で。
このコマンドは次の機能を提供します。 まず、名前空間の汚染を回避します。
関数と変数を認識することで、内部シンボルのプロトタイピングの労力を軽減します
これらはストレージ クラス識別子「」で定義されています。cname”。 たとえば、 cname is
「intern」、関数「"intern void *foobar(int quux)"」 filesが
``"#define foobar __foobar"'' と ``"extern void *foobar(int) の両方に変換されます。
quux);"" で オフィス。 さらに、グローバル ``"#define" cname 「/**/"」も作成されます
オフィス コンパイラがこの追加のストレージ クラス識別子を黙って無視できるようにします。
次に、ライブラリのソース ファイルは通常、「typedef」、「#define」などを共有する必要があります。
ソースファイルの境界。 これを達成するには、これを手動で配置します。
tファイル または、次の XNUMX 番目の機能を使用します scpp: すべてのコードが入っています files は ``"#if " でカプセル化されますdname
... "#endif"'' が自動的にコピーされます オフィス。 さらに、グローバル ``"#define" dname
0''も作成されます オフィス コンパイラーがこの部分を黙ってスキップできるようにします (
すでにヘッダー内にあります)。
OPTIONS
次のコマンド ライン オプションが使用できます。
-v, -詳細
いくつかの処理情報を表示します。
-p, - 保存
保存する オフィス 生成された「#line」行とは独立しています。 これは次のような場合に便利です
Makefile の実際の内容 オフィス 行番号だけが変更されません。 デフォルトは
上書きします。
-f, - フィルター filter
XNUMX つ以上の前処理を適用する sed(1) filter コマンド (通常は次のタイプ)
入力が解析される前に、各入力ファイルに ``"s/.../.../"'') を追加します。 このオプションでできることは、
複数回発生します。
-o, - 出力 オフィス
出力ファイル名。 デフォルトは「lib.h」です。
-t, - レンプレート tファイル
テンプレートのファイル名。 デフォルトは「lib.h.in」です。
-M, - マーク マーク
生成された構成によって置き換えられるマーク。 デフォルトは「%%MARK%%」です。
-D, - 定義 dname
フィックスミー。 デフォルトは「cpp」です。
-C, - クラス cname
フィックスミー。 デフォルトは「インターン」です。
実施例
# メイクファイル
SRCS=foo_bar.c foo_quux.c
foo_p.h: foo_p.h.in
shtool scpp -o foo_p.h -t foo_p.h.in \
-M %%MARK%% -D cpp -C インターン $(SRCS)
/* foo_p.h.in */
#ifndef FOO_P_H
#FOO_P_H を定義
%%マーク%%
#endif /* FOO_P_H */
/* foo_bar.c */
#include "foo_p.h"
#if cpp
#定義 OURS_INIT 4711
#endif
私たちのインターン。
static int myone = 0815;
インターン int バー(void)
{
私たちのもの += 私のもの。
}
/* foo_quux.c */
#include "foo_p.h"
int main(int argc, char *argv[])
{
int i;
私たちの = OURS_INIT
for (i = 0; i < 10; i++) {
バー();
printf("私たちのものは現在 %d\n", 私たちのもの);
}
0リターン;
}
歴史
この GNU シュツール scpp コマンドはもともとラルフ S. エンゲルシャルによって書かれました
<[メール保護]> 1999年に GNU シュツール。 そのきっかけとなったのは、事前に
の処理施設 GNU pth プロジェクト。
onworks.net サービスを使用してオンラインで shtool-scpp を使用する