問題タブ [compiler-directives]

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.

0 投票する
4 に答える
364 参照

c# - C# でプリコンパイラ ディレクティブを取り除く

私が望んでいるほどレガシーではないコードを維持するように依頼されましたが、それはコンパイラ指令であふれていて、ほとんど判読できず、ほとんど同じように維持しやすくなっています。適例:

usingディレクティブはさらにきれいです:

やってみようと思っConditionalAttributeたのですが、この状況ではうまくいきません

このコンパイラ ディレクティブの悪夢から抜け出す方法はありますか?

コードは に対してコンパイルされ.NET 3.5ます。

更新:
Oded は、BeforeAddメソッドの周りのコンパイラ ディレクティブを削除してオーバーロードすることを提案すると答えました。残念ながら、どちらのメソッドもAbstractBusiness最終的に含まれるアセンブリに応じて 2 つの異なる実装を提供するクラスをオーバーライドすることになっているため、これは機能しません。

また

このコードは、会社が過去に作成した一連のライブラリから依存関係を取得し、それ以来「アップグレード」しています。現在、名前空間が衝突し、実装が異なるライブラリ セットの 4 つの異なるバージョンがあります。すべては、(非常に) 古いバージョンを使用するアプリケーションとの「後方互換性」の名のもとに行われています。


結論

一般的なアプローチ( KISSなど)として最も理にかなっているため、@Odedの回答を選択することになりました。ただし、この場合は使用できませんでした。ここに表示されているのは氷山の一角にすぎません。お金を払ってくれるなら、このコードにキスしたくありません。

0 投票する
1 に答える
130 参照

c# - #defines を .h ファイルから C# アプリケーションに移植するためのベスト プラクティスは何ですか?

アプリケーションを C++ から C# に変換しています。C++ アプリケーションには、500 を超える #define ディレクティブを含む定義ファイル .h があります。このデータを Definition.cs ファイルで表現したいと思います。これを行う最善の方法は何ですか?

定義の例:

#defines はグループ化されているため、次のようなプロパティの使用を考えさせられます。

回避しようとしているコンストラクターでデフォルト値を設定する必要がありますが、読み取り専用にする必要があります。

ありがとう。

0 投票する
2 に答える
401 参照

c# - コンパイラ ディレクティブを使用して複数のプラットフォームをサポートする

これは一般的なソフトウェア設計の問題です。

複数のプラットフォームをサポートするには、#if コンパイラ ディレクティブを使用することをお勧めします。たとえば、次の 3 つのファイルがあります。

IScreen.cs

ScreenWin.cs

ScreenMac.cs

これについて素晴らしいと思われるのは、BDD を使用して次のようなものを作成できることです。

また、コンパイラ ディレクティブに基づいて正しい画面が使用されます。

これにより、抽象ファクトリを使用するよりもパフォーマンスが向上するようです。

いくつかの欠点は何ですか?

0 投票する
2 に答える
402 参照

c - コンパイラ ディレクティブ マクロを使用して itoa の代替が存在しますか

文字列化コンパイラ ディレクティブを使用して整数変数を文字列化する方法があるのではないかと考えていました。私は使用してみました:

そのため、stringize マクロ (#1) に別のレベルを追加すると、最初に置換が行われ、次にコード (#2) に配置されます。同様に、コンパイル時に変数を値に置き換えることができます。if var = value; と言う意味です。それでは、 some_macro(var) --> それを「値」に文字列化できる方法はありますか?

0 投票する
3 に答える
897 参照

c++ - コピーの省略を確実にすることは可能ですか?

コピーの省略は優れた最適化手法であり、場合によっては、コピーの省略に依存する方が、参照を「手動で」渡すよりも実際に高速になることがあります。

したがって、最大のパフォーマンスを得るために、コードパスに対してコンパイラによってコピーの省略が実行されるという事実に依存する重要なコードパスを特定したと仮定します。

しかし今、あなたはコンパイラの最適化に依存しています。

コピーの省略が実際に実行され、コピーの省略が実行できない場合にコンパイラ(または別のツール)に警告/エラーを生成させる(コンパイラ固有の、明らかに)方法はありますか?

__forceinline(このようにマークされた関数がコンパイラーによってインライン化されていない場合に警告を生成するよりも、Visual C ++にリモートで類似したものを考えています。)

0 投票する
3 に答える
755 参照

c# - コンパイラディレクティブ-提案-デバッグモードでのみコードを実行する

アプリケーションがデバッグモードで実行されている場合にのみメッセージをログに記録する必要があります。私は2つの方法を見つけました:

最初:ロギングが必要な場合は、どこにでも3行を書き込む必要があります。ただし、Loggerステートメントはコンパイル時にのみ無効になります。これはまさに私が必要としていることです。Logger.Logはまったく実行されません。

2番目:とてもきれい。ロギングが必要な場合は、1行のコードのみ。Logger.Logステートメントが実行されているかどうかはわかりません。コンパイル時にのみ関数呼び出しが削除される場合(最初のアプローチと同じですが、コード行がグレー表示されていないことを確認してください)、これを使用します。

パフォーマンスの違いが気になります。

0 投票する
2 に答える
1726 参照

debugging - -compile を使用して Erlang モジュールで debug_info を要求する

debug_infoコンパイル コマンドに引数を追加せずに、Erlang コンパイラが特定のモジュールをコンパイルするたびにデバッグ情報を生成するように強制したいと考えています。追加してみました

モジュールファイルに追加しましたが、実行c(my_module)にはビームファイルにデバッグ情報が含まれていませんでした。

これを行う方法はありますか、またはモジュール ソース ファイル自体からデバッグ情報を追加できませんか?

0 投票する
1 に答える
245 参照

linux - Delphi Prism のオペレーティング システム ディレクティブ

同じプロジェクト ファイルからコンパイルされた Windows および Linux 環境で最終的に実行されるプログラムを作成しているので、オペレーティング システムのディレクティブがどれだけうまく機能するかをテストして確認したいと思いました。ということで、サンプルコードを書いてみました。コードが予期せず実行されるように見えるか、それとも単なる私の想像です。

コードは次のとおりです。

ここで、Windows でこのメソッドを実行すると、「This is .NET Framework. ホライ!!!」Windowsで実行されていることを期待していました。Linux 上で Mono を実行すると、同じメッセージが表示されたメッセージ ボックスがポップアップ表示されました。「This is Linux. Horay!!!」という Linux メッセージが表示されることを期待していました。このコードが正しく機能している場合、Linux、Mac、または Windows でのみサポートされているさまざまなメソッドを実行する必要がある場合に、プログラムが実行されているプラ​​ットフォームを確認するにはどうすればよいでしょうか。

0 投票する
2 に答える
366 参照

c# - CPUアーキテクチャに基づいて実行時に条件付きコードを持つことはできますか?

私は.Net4.5を使用しています(プレビュー... 4はこの質問の目的には問題ありません)。私は糸脱毛の仕事をしています。

私の調査によると、x86 CPUには強力なメモリモデルがあり、書き込みが並べ替えられないことを意味します。これにより、ロックを安全に解放できます。これは、メモリモデルが弱いItaniumCPUには当てはまりません。

揮発性、メモリバリア、および実行の並べ替えの原則を理解しています。

理想的には、CPUがItaniumの場合はキーポイントにメモリバリアを挿入しますが、x86の場合は挿入しません。JITが処理するランタイムコンパイラ指令のように、これを動的に行うことは可能ですか?

そうでない場合は、2つのプラットフォーム用に別々のビルドが必要になることに気付きました。その場合、2セットのC#ファイルを使用せずに、ターゲットを変更するだけでこれを行うための最も洗練された方法は何ですか?

0 投票する
2 に答える
928 参照

objective-c - iOSアプリケーションの作成中に標準にコメントしますか?

G'Dayプログラマー、私はJavaのバックグラウンドを持っていますが、C++ObjectiveCの学習を始めたばかりです。サードパーティのObjectiveCコードでさまざまなコーディングスタイルがたくさんあるので心配でした。しかし、私は親切にもジレンマに悩まされています。

私のジレンマは、iOSアプリケーションのコーディング中に#pragmaタグを使用するかどうかです。それは良い習慣だと思いますか?または、これらのディレクティブドロップダウンリンクを使用するのはプログラマー自身の選択ですか?

あなたの専門知識と業界経験が役立ちます、

ありがとう


  • 私がインターネットで検索したコンテンツは、主に#pragmaが何をするかを示唆していました。しかし、それが良い習慣であると考えられるかどうかについての多くの情報を見つけることができませんでした。