問題タブ [macros]

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 投票する
18 に答える
39228 参照

c - C マクロは何に役立ちますか?

私は C を少し書いたことがあり、C が何をしているのかを理解するのに十分なほど十分に読むことができます。マクロが何であるかを覚えておき、読みながら頭の中で代用する必要があります。私が出会った直感的で分かりやすいものは、いつも小さな小さな機能のようなものでした.

プリプロセッサでデバッグまたはクロスプラットフォーム ビルド用にさまざまなビルド タイプを定義する必要があることは理解できますが、任意の置換を定義する機能は、すでに難しい言語をさらに理解しにくくするためにのみ役立つようです。

C にこのような複雑なプリプロセッサが導入されたのはなぜですか? そして、単純な if #debug スタイルの条件付きコンパイル以外の目的でまだ使用されているように見える理由を理解できる使用例はありますか?

編集:

いくつかの回答を読んでも、まだわかりません。最も一般的な答えは、コードをインライン化することです。inline キーワードがそれを行わない場合は、それを行わない正当な理由があるか、実装を修正する必要があります。「このコードを実際にインライン化する」ことを意味するまったく異なるメカニズムが必要な理由がわかりません(インライン化の前に書かれたコードは別として)。また、「関数に入れるにはばかげている場合」という考えも理解できません。確かに、入力を受け取って出力を生成するコードは、関数に入れるのが最適です。私は C 言語のマイクロ最適化に慣れていないので、理解できないかもしれませんが、プリプロセッサは、いくつかの単純な問題に対する複雑な解決策のように感じます。

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

vb.net - Visual Studio 2003、マクロ、Process.Attach が常に機能しない

私は Visual Studio 2003 を使用しており、次のようなマクロがあります。

初めてマクロを使用すると、正常に動作します。その後、プロセスから切り離した後でも、.Attach()は何もしていないようです。

マクロをステップ実行すると同じことが起こります...proc.Attach()正しいプロセスで呼び出されますが、何も起こりません。

1 つの注意: [プロセス] ウィンドウでプロセスを表示すると、プロセスの [タイプ] 列に次のように表示されます。".NET, Win32".

何が起こっているのか分かりますか?

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

macros - Emacs Lisp マクロでインタラクティブ関数を作成できますか?

「ヘルパー関数」を作成するために emacs lisp でマクロを作成しようとしています。</p>

最終的に、私のヘルパー関数は、ここにあるものよりも便利になります。同じことを達成するためのより良い/より直感的な方法があるかもしれないことを認識しています(投稿してください)が、私の基本的な質問は、なぜこれが機能しないのか/何が間違っているのかということです:

macroexpand の出力を取得してそれを評価すると、マクロで取得するつもりだった対話型関数を取得できますが、マクロが実行されて評価されているように見えても、M-x text-niorを呼び出すことはできませんtext-swallow

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

visual-studio - String.Formatと同様に貼り付けるVisualStudioマクロ

たとえば、「<strong> {0}</strong>」のような文字列を切り取ってコピーできるようにしたいと思います。

次に、「Hello、World」などのコードを選択してから、「<strong> Hello、World</strong>」という結果になるマクロを呼び出します。

どうすればこれを行うことができますか?

更新:なぜこれをしたいのですか?

マクロまたはショートカットを作成して、<strong>タグなどの特定のものを選択範囲に追加することができます。ただし、その場であらゆる種類の「サラウンドウィズ」ペースト動作を作成するという私の考え。

かなり頻繁に、フィールドまたはプロパティのリストに貼り付けます。だからどこかから私は得る

例として、私はそれらを次のように設定したいことを知っています

私の魔法のマクロでは、次を選択し、CTRL+Cを押してクリップボードに入れることができます。

それから私がしなければならないのは、行ごとに行き、私の魔法のペーストを適用することです。

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

c++ - C++ でのマクロ展開

パラメータが行の先頭にあるマクロ (またはこれに対する回避策) を定義するにはどうすればよいですか?

これにより、コンパイラの警告が表示されます (GCC 3.2.3): " '##' cannot appear at either end of a macro Expansion"

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

powershell - $macro 置換 - ExpandString の制限事項

この議論に基づいてマクロ置換を実装しようとしています。基本的には機能しますが、ExpandString にはいくつかの制限があるようです。

main.ps1:

in.config (OK):

in.config (エラー: 「文字列トークンの処理中に行末が見つかりました。」):

in.config (エラー: 「文字列の末尾に ' がありません。」):

ドキュメントには次のように記載されています。

戻り値: すべての変数と式の置換が行われた展開された文字列。

「式置換」とは何ですか (これは私の場合かもしれません)?

回避策はありますか?

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

c - C スタイル: マクロまたはプリプロセッサ?

文字列を一連のパターンと照合するためのライブラリを作成しました。これで、レキシカル スキャナーを C プログラムに簡単に埋め込むことができるようになりました。

レキシカルスキャナーを作成するために利用できる確立されたツールがたくさんあることを私は知っています(頭に浮かぶ最初の2つに名前を付けると、lexとre2c)。レクサーの例は、一般的な問題の具体的なケースにすぎません。

考えられる解決策は 2 つあります。

  1. 埋め込まれた字句解析器を含むソース ファイルをプレーンな C ファイルに変換するプリプロセッサを作成し、場合によっては、コンパイルで使用される他のファイルのセットに変換します。
  2. より読みやすい形式でレクサーを表す一連の C マクロを作成します。

私はすでに両方を行っていますが、質問は次のとおりです。

  • 読みやすさ。レクサーのロジックは明確で理解しやすいものにする必要があります
  • 保守性。バグを見つけて修正するのは悪夢ではありません。
  • ビルド プロセスの干渉。プリプロセッサは、ビルド プロセスで追加の手順を必要とし、プリプロセッサはパス内に存在する必要があります。

言い換えれば、2 つのアプローチのいずれかを使用するソフトウェアを保守または作成する必要がある場合、失望が少ないのはどちらでしょうか?

例として、次の問題のレクサーを次に示します。

  • すべての数値を合計します (1.3E-4.2 のような指数を含む 10 進数形式にすることができます)
  • スキップ文字列 (二重引用符と一重引用符)
  • スキップ リスト (LISP リストと同様: (3 4 (0 1)() 3) )
  • 単語 end (大文字と小文字は区別されません) に遭遇するか、バッファの最後で停止します

2つのスタイルで。


現在の実装に興味がある方は、コードはhttp://sites.google.com/site/clibutlにあります。

0 投票する
10 に答える
146999 参照

c# - プリプロセッサでのC#マクロ定義

C#は、プリプロセッサステートメントを使用してCプログラミング言語で行われるようにマクロを定義できますか?次のような特定の繰り返しステートメントの通常の入力を簡略化したいと思います。