問題タブ [conditional-compilation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 条件付き Java コンパイル
私は長年の C++ プログラマーで、Java は初めてです。Eclipse で Java Blackberry プロジェクトを開発しています。質問 - プロジェクト内に異なる構成セットを導入し、それらに基づいてわずかに異なるコードをコンパイルする方法はありますか?
Visual Studio には、プロジェクト構成と #ifdef; があります。Javaには#ifdefがないことは知っていますが、ファイルレベルで何かあるのでしょうか?
c# - 条件付きコンパイル シンボルが定義されていない
Visual Studio を期待どおりに動作させるのに問題があります。2 つの構成プロファイルを作成しました。1 つはシンボル FOO が定義されており、もう 1 つはシンボル BAR が定義されています。そして、私はこのコードを持っています:
そして後で私が持っている別のファイルで
私のアプリケーションでは、MyClass.MyData が定義されていないというエラーが表示されます。
また、FOO プロファイルにそれがあり#error test
、#if FOO
その後のようなものを入力すると、ビルド エラーが発生しますが、それを削除すると問題なくビルドされ、実行するとコンパイル エラーが発生します。 MyClass には MyData の定義が含まれていません。また、これは ASP.Net Web アプリケーションです。
誰かが条件付きコンパイルの使用方法を理解するのを手伝ってくれますか? Visual Studio がコンパイル シンボルを使用して適切にコンパイルするかのように動作しますが、ASP.Net Web サーバーがそれを実行するたびに、シンボルなしで再コンパイルします...
編集: FOO または BAR プロファイルを使用するかどうかは問題ではありません。どちらも MyData シンボルを適切に定義していないようです。
EDIT2:
わかりました、これは再生にとって重要です!!! ソリューションに新しいApp_Code
フォルダーを作成し、そこに .cs ファイルを追加してから、MyClass を追加します。これにより、空のプロジェクトで動作するバグが再現されます。私は実際にそれを単純化しました
Visual Studio が App_Code 内の通常の .cs ファイルの条件付きコンパイル シンボルを設定していないようです。
c++ - クロスコンパイルには`#ifdef`または継承を使用する方が良いですか?
仮想継承と多重継承に関する以前の質問(クロスプラットフォームシナリオ)に続くために-いくつかの回答を読んだ後、サーバークラスとクライアントクラスを保持し、プラットフォーム固有のクラスを次のように置き換えることでモデルを単純化できることに気付きました#ifdefs(これは私が最初にやろうとしていたことです)。
このコードを使用する方が簡単ですか?少なくともファイルが少なくなることを意味します!欠点は、いたるところにFoobar
あるため、クラスがやや「醜く」、少し読みづらくなることです。#ifdefs
Unix Foobarのソースコードがコンパイラに渡されることはないため、これはと同じ効果があることに注意してください(呼び出すプラットフォーム固有のクラスを決定するために#ifdef
も使用するため)。#ifdef
注:簡単な例として、いくつかのもの(ctorなど)は省略されています。
アップデート:
この問題の背景をもっと読みたい人のために、私は本当に適切なメーリングリストのスレッドをざっと読むことをお勧めします。3番目の投稿のあたりで物事が面白くなり始めます。また、関連するコードコミットがあり、ここで問題の実際のコードを確認できます。
c - すべての ifdef / ifndef ディレクティブを自動的にコンパイルするためのツール
私のCプロジェクトでは、プリプロセッサ ディレクティブを使用して一部の機能をアクティブ化/非アクティブ化しています。数日前に .xml 内で行われた変更が原因で、あまり一般的ではない構成の一部がコンパイルされなくなったことは珍しいことではありません#ifdef
。
スクリプトを使用して最も一般的な構成をコンパイルしますが、すべてが確実にコンパイルされるようにするためのツールを探しています (私たちの場合、テストは問題ではありません。コンパイルが停止しないことをできるだけ早く検出したいだけです)。通常、ifdefs / ifndefs は独立しているため、通常、各モジュールを 2 回だけコンパイルする必要があります (すべてのシンボルが定義され、すべて未定義)。しかし、場合によっては ifdef がネストされているため、それらのモジュールをさらに何度もコンパイルする必要があります。
すべての ifdef / ifndef (ネストされたものも含む) を検索し、コードのすべてのソース行を確実にするためにモジュールをコンパイルする必要がある回数 (それぞれで定義されるプリプロセッサ シンボルのセットを使用) を提供するツールを知っていますか?コンパイラによって解析されますか?
c# - 条件付き属性
簡単な C# の質問です。私のプロジェクト > プロパティ > ビルドで、 「DEBUG 定数を定義する」というチェックがあることを知りたいので、それをチェックしてからこれを行うと、
「DEBUG」ではなく、DEBUG定数であることを確認してください。では、これでよろしいでしょうか?または、プロジェクト設定の条件付きコンパイル シンボルに「DEBUG」を追加する必要がありますか? それとも#define ?
c - dprintf のクロスプラットフォーム互換性
Linuxにはこの素晴らしい機能がありますdprintf
:
関数
dprintf()
andvdprintf()
(glibc2 ライブラリにある) はfprintf()
and とまったく同じvfprintf()
ですが、指定されたストリームではなくファイル記述子 fd に出力する点が異なります。
ただし、同じソースが指摘しているように:
これらの関数は GNU 拡張機能であり、C や POSIX のものではありません。明らかに、名前の選択は不適切でした。多くのシステム (MacOS など) には、 と呼ばれる互換性のない関数があり
dprintf()
、通常は のデバッグ バージョンでprintf()
、おそらく次のようなプロトタイプがあります。
ここで、最初のパラメーターはデバッグ レベルです (出力は to
stderr
です)。さらに、dprintf()
(orDPRINTF
) もデバッグ用の一般的なマクロ名ですprintf
。したがって、おそらく、移植性を意図したプログラムではこの関数を避ける方がよいでしょう。
私の質問
必要な関数が存在する場合はそれを安全に呼び出すdprintf
か、その関数が存在しない場合は合理的なエラーメッセージでコンパイルに失敗するセットアップを作成するにはどうすればよいですか? 私はこのようなことをすると思います:
SOMETHING
しかし、どうあるべきかわかりません。Linux だけに制限することはできると思いますが、もっと緩くすることはできますか?
c# - 条件付きコンパイル - C# のコードの一部を段階的に廃止する
私はプロジェクトに取り組んでおり、プロジェクトの 1 つのフェーズで一連のクラスを設計して使用する必要があります。
次のフェーズでは、クラスとメソッドのセットは必要ありません。これらのクラスとメソッドのセットはアプリケーション全体で使用されるため、それらを他のクラスとして追加した場合、不要になったら手動で削除する必要があります。
クラスまたはクラスがインスタンス化される場所に属性を設定して、属性の値に基づいてそのインスタンス化とメソッド呼び出しを回避する方法はありますか。
設定のようなもの
この面での助けに感謝します。
c# - Visual Studio で異なるコンパイル マクロに対して異なるリソースをセットアップする方法は?
条件付きコンパイルに基づいて異なる値を持つ必要がある文字列リソースがあります。
Visual Studio 2008 Professional で異なるコンパイル マクロに対して異なるリソースをセットアップする方法は?
iphone - XCodeで複数のターゲットをコンパイルする場合、特定のファイルが1つのターゲットに含まれないようにするにはどうすればよいですか?
私はこれを解決するために考えられるすべてのキーワードを使用してstackoverflowを長い間検索しました。私はiPhone用にプログラミングしていて、アプリのライトバージョンと有料バージョンを持っています。ここの手順に従って、ターゲットを複製するためのiPhoneゲーム/アプリのLiteバージョンを作成します。これは機能し、現在、ライトバージョンのスリム化に取り組んでいます。
主な問題?画像。ライトバージョンは、有料バージョンよりも数百少ない画像が必要です。そこで、XCodeで2つのグループを作成しました。Xcodeの1つの「フォルダグループ」-「FreeImages」という名前ともう1つの「ProImages」という名前。すべてのFreeImagesをliteアプリにのみ含め、すべてのFreeImagesとProImagesを有料アプリに含めたいと思います。XCodeがこれらのグループを仮想フォルダと見なしてもかまいません。指示を逆にして、XCode "PLUS_VERSION"に環境フラグ(-D)を設定しました。XCodeに基本的に次のことを実行させます。
グループのコンテンツを条件付きでターゲットにコピーするようにXCodeに指示する場所を知っている人はいますか?
java - ant でソースコードを変更することは可能ですか?
私のプログラムで条件付きコンパイルをしたいと思います。public static final boolean を宣言すると、コンパイラはトラバースされていないブランチを無視することを私は知っています。プログラムをビルドする前に、ant ターゲットに変数を変更させることは可能ですか?
たとえば、私が持っている場合:
final public static boolean windows = false;
Windows と Mac の 2 つのアリ ターゲットが必要です。
ant windows
変数をそのままにして、ブール値をtrueに変更する
コマンドが欲しい
ant mac
です。
ありがとう。