問題タブ [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条件付きコンパイル:コードチャンクがコンパイルされないようにする方法は?
私のプロジェクトでは、コンパイルと実行にJava1.6が必要です。今、私はそれをJava 1.5で動作させるための要件があります(マーケティング側から)。メソッド本体を置き換えて(戻り値の型と引数は同じままです)、エラーなしでJava1.5でコンパイルできるようにします。
詳細:OS
OS固有のものをすべてカプセル化するというユーティリティクラスがあります。方法があります
ダブルクリックのようにファイルを開くには(start
Windowsコマンドまたはopen
Mac OS Xコマンドと同等)。Java 1.5ではコンパイルできないので、コンパイル時に除外しrun32dll
、Windowsまたはopen
MacOSXを使用して呼び出す別のメソッドに置き換えたいと思いRuntime.exec
ます。
質問:どうすればそれができますか?注釈はここで役立ちますか?
注:私はantを使用しており、2つのJavaファイルOS4J5.java
を作成できます。このファイルには、Java 1.5および1.6に必要なコードをOS4J6.java
含むクラスが含まれ、コンパイルする前にそのうちの1つをコピーします(または醜い方法-Javaに応じて条件付きでコンテンツを置き換えます)バージョン)しかし、別の方法がある場合、私はそれをしたくありません。OS
OS.java
OS.java
さらに詳しく説明すると、CIifdef, ifndef
ではを使用できます。Pythonではコンパイルは行われず、または他の何かを使用して機能をチェックhasattr
できます。CommonLispではを使用できます#+feature
。Javaに似たものはありますか?
この投稿が見つかりましたが、役に立たないようです。
どんな助けでも大歓迎です。kh。
c# - .NET Framework & .NET Compact Framework でライブラリをコンパイルするには?
両方のタイプのフレームワーク (コンパクトかどうか) で使用できるテクニカル ライブラリ クラスを開発しています。
そのようなライブラリを開発する最良の方法は何ですか? デフォルトで .NET 機能 (XP Embedded 用) を使用し、Windows CE を使用する場合 (CF.NET を使用) の制限を行いますか?
ありがとう。
iphone - #ifdef は機能しません。しかし、なぜ?
私のログ: ケース 1、2 番目。しかし、最初は case1 でなければなりません。
c# - .NET4の条件付きコンパイル
重複の可能性:
条件付きコンパイルとフレームワークターゲット
.NET 4で機能するコードがいくつかありますが、.NET3.5では機能しません。.NET 3.5では、Windowsへの相互運用呼び出しを使用する必要があります。
どちらの場合も、「ifdef」を使用して別のコードパスを使用したいと思います(最終的には.NET 3.5コードを廃止します)。
コードが.NET4でコンパイルされるタイミングを識別するための事前定義されたディレクティブ値はありますか?
事前定義されたすべてのディレクティブ(、、など)との適切なリンクはありDEBUG
ますTRACE
か?以下のページには、ディレクティブのみが記載されており、標準の事前定義値は記載されていません。
cocoa - GC を無効にしてコンパイルするときにコードを除外する条件ステートメントはありますか?
GC が必須に設定されている場合、構造体に cocoa オブジェクトが必要です。
c++ - #endif GUARD_Hは良い習慣ですか?
このことを考慮:
それよりも:
多くの場合#endif
、「識別子」がコメントアウトされているのを目にしますが、コメントしなくても機能します。
無視された後のすべて#endif
ですか...?
iphone - インターフェイス宣言でコンパイルを調整するときに、IBOutletがInterfaceBuilderによって認識されない
xibファイルの所有者であるヘッダーファイルにこの条件付けコンパイルフラグを追加すると、xibファイルはIBOutletを読み取れず、欠落していると表示されます。そして警告を出します。
実行時には正常に動作します。誰かが同じ問題を経験しましたか?
javascript - Google ClosureCompilerを使用してJavaScriptでInternetExplorerを検出する方法は?
マウスボタンのイベントを処理するJavaScript関数があります。マウスの左ボタンと右ボタンを区別できる必要があります。残念ながら、Internet Explorerは、他のすべてのブラウザーとは異なる値をevent.buttonに使用します。私はそれらを解釈する方法を知っていますが、どの道を進むべきかを知る必要があります。
私は条件付きコンパイルに依存するJavaScriptハックでそれを行いました。こんな感じです:
これは、偽造できないJavaScriptパーサー機能に基づいており、他のブラウザーによって模倣される可能性が低いため、非常に安全な方法だと思います。
現在、JavaScriptファイルをパックするためにGoogleClosureCompilerを使用しています。他のコメントと同じように、条件付きコンパイルのコメントも削除されることがわかりました。そこで、さまざまなハックを試しました。それらの1つはこれです:
残念ながら、クロージャコンパイラは非常に巧妙であり、条件が真になることは決してないことを発見し、そのコードを削除します。また、Microsoftが最終的にその\ vバグを修正し、検出が失敗する可能性があるため、私はそれが好きではありません。
navigator.appNameやその名前のようなものを読むこともできますが、これは簡単に偽造できません。そして、誰かがブラウザIDを変更した場合、他のevent.buttonの動作を実装する可能性は低くなります...
クロージャコンパイラでは、特定のコメントを保持できます。私はこれを試しました:
これは圧縮後に望ましい結果を生成しますが、ソース形式の機能的な条件付きコメントではありません。しかし、デバッグ上の理由から、JavaScriptファイルが圧縮と非圧縮の両方で機能する必要があります。
圧縮されたJSファイルを手動で変更せずにこれを機能させる希望はありますか?
参考までに、元の形式の完全な関数を次に示します。
c - ANSI-C で複数のコードベースをサポートする
関連するAnsi-Cコード ベースを使用して、プロジェクトに取り組んでいます。(これを「メイン」コードベースと呼びましょう)。
私は今、典型的な問題 (後述) に直面しています。オブジェクト指向言語が手元にあれば、非常に簡単に解決できると思います。
問題は次のとおりです。複数のコードベースを開始する必要があります。つまり、並列コードベースのサポートを開始する必要があります (将来的にはさらに増える可能性があります)。すべての新しい (つまり、並列の) コードベースの初期コードベースは、最初は古い (つまり「メイン」) コードベースと同じになります。
「C」言語について話しているので、コードに「#ifdef」ステートメントを追加し、それらの「ifdef」ブロック内にブランチ固有のコードを記述することをこれまで考えてきました。
問題が明確になったことを願って (十分に!)、この問題を Ansi C でエレガントに処理するのに役立つ巧妙なパターンについての考えを聞きたいと思います。
乾杯
c# - 条件付きコンパイル用の Windows フォームでデザイナーが生成したコードで #if ディレクティブを使用する
背景:
Windows サービスと、システム設定の構成とサービスとの通信に使用されるインターフェイスを含む C# Windows フォーム アプリケーションがあります。
望ましい結果:
ソリューションの 2 つのバージョンを構築したいと考えています。Windows サービスに関連するすべてのコードとフォーム要素を含むクライアントバージョンと、すべてを含むサーバーバージョンです。
フォームにはタブ付きコントロールが含まれており、1 つのタブには、ソケットを使用して Windows サービスとのインターフェイスに使用される要素が含まれています。私が実際に達成しようとしているのは、完全なビルドではサービス関連の要素を含むタブがコンパイルされ、条件付きビルドでは同じタブが除外されることだけです。
問題:
この段階で、Windows サービス関連のコードに #if ディレクティブを使用しました。例えば:
上記の例では、「SERVERBUILD」は、構成マネージャーを介して選択できるビルド構成に対応しています (標準の「リリース」ビルド オプションとは対照的です)。
私が抱えている問題は、この #if ディレクティブをラップする必要があったコードの一部が、WinForm.Designer.cs ファイルの「Windows フォーム デザイナーによって生成されたコード」というタイトルの領域にあることです。
発生しているように見えるのは、フォーム プロパティの一部を変更すると、このコード領域全体が削除されて再生成され、追加した #if セクションが削除されたように見えることです。
- 私はこれを正しい方法で行っていますか?
- WinForm.Designer.cs コードで行った変更が失われる状況を回避する方法はありますか?
条件付きコンパイルなどの経験のある方からのアドバイスをいただければ幸いです。