タグ付けされた質問 「c-preprocessor」

CおよびC ++言語プログラムをコンパイルする前に適用されるテキストマクロプロセッサ。このタグは、Objective-CまたはC#の#ディレクティブなど、同じ機能から派生した、または同じ機能を持つ他のコンパイラ/言語に関する質問にも使用できます。

19
#ifdefと#if-コードの特定のセクションのコンパイルを有効/無効にする方法として、どちらが優れている/より安全ですか?
これはスタイルの問題かもしれませんが、私たちの開発チームには少し分裂があるので、他の誰かがこの問題について何か考えを持っているのではないかと思いました... 基本的に、通常の開発中にオフにするデバッグ印刷ステートメントがいくつかあります。個人的に私は以下を行うことを好みます: //---- SomeSourceFile.cpp ---- #define DEBUG_ENABLED (0) ... SomeFunction() { int someVariable = 5; #if(DEBUG_ENABLED) printf("Debugging: someVariable == %d", someVariable); #endif } しかし、チームの中には次のものを好む人もいます: // #define DEBUG_ENABLED ... SomeFunction() { int someVariable = 5; #ifdef DEBUG_ENABLED printf("Debugging: someVariable == %d", someVariable); #endif } ...これらの方法のどれがあなたにとってより良く聞こえますか、そしてなぜですか?私は、何かが常に定義されており、他の定義を破壊する危険がないため、最初の方が安全だと感じています。

3
clangを検出するためにどの事前定義マクロを使用できますか?
ソースコードのコンパイルに使用されたコンパイラを検出しようとしています。MSVCまたはGCCをチェックするための定義済みマクロを簡単に見つけることができますが(たとえば、http://predef.sourceforge.net/を参照)、clangをチェックするためのマクロを見つけることができません。 __CLANG__私のコードを現在コンパイルしているものを知るためにclangがマクロを定義しているかどうか誰かが知っていますか?


10
C / C ++行番号
デバッグのために、C / C ++コンパイラで行番号を取得できますか?(特定のコンパイラの標準的な方法または特定の方法) 例えば if(!Logical) printf("Not logical value at line number %d \n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation)

6
gccは前処理後にCコードを出力できますか?
C以外の多くの言語をサポートするために多くの前処理ディレクティブが含まれていると思われるオープンソースライブラリを使用しています。ライブラリが何をしているかを調査できるように、前処理後にコンパイルしているCコードを確認したいと思います。 、私が書いたものに似ています。 gcc(またはLinuxで一般的に利用可能なその他のツール)はこのライブラリを読み取ることができますが、前処理が何にでも変換され、人間が読むこともできるCコードを出力できますか?

7
C / C ++マクロのカンマ
このようなマクロがあるとしましょう #define FOO(type,name) type name どのように使用できますか FOO(int, int_var); しかし、必ずしもそれほど単純ではありません。 FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2 もちろん、次のことができます。 typedef std::map<int, int> map_int_int_t; FOO(map_int_int_t, map_var); // OK 人間工学的ではありません。プラスタイプの非互換性に対処する必要があります。これをマクロで解決する方法はありますか?
103 c++  c  macros  c-preprocessor 

8
Xcodeでプリプロセッサシンボルを定義する方法
Xcodeプロジェクトでプロパティを設定して、条件付きコンパイルのシンボルを設定することは可能ですか? 私の目的は、インポート/インクルードを使用せずに、すべてのファイルで使用できるシンボルを作成して、いくつかのプロジェクトで一連の共通クラスが特別な動作を持つようにすることです。次のようですが、自分のシンボルを使用します。 #if TARGET_IPHONE_SIMULATOR ... #endif

11
Cでのマクロと関数
マクロを使用する方が関数を使用するよりも優れている例やケースを見てきました。 関数と比較したマクロの欠点を例を挙げて誰かが私に説明できますか?

4
#ifdefおよび#ifndefの役割
#define one 0 #ifdef one printf("one is defined "); #ifndef one printf("one is not defined "); この中での役割は何である#ifdefと#ifndef、出力は何ですか?

8
#definesのインデント
そんなこと知ってる #defineの、などが正常にインデントされることはありません。どうして? 私は現在、#defines、#ifdefs、#elses、#endifsなどの恐ろしい混合があるいくつかのコードで作業しています。これらすべては、通常のCコードとよく混ざっています。#definesをインデントしないと、読みにくくなります。そして、インデントされたコードとインデントされていない#definesの混在は悪夢です。 #definesをインデントしないことの利点は何ですか?インデントすると悪い人になりますか?これはもっといいですか? #ifdef SDCC #if DEBUGGING == 1 #if defined (pic18f2480) #define FLASH_MEMORY_END 0x3DC0 #elif defined (pic18f2580) #define FLASH_MEMORY_END 0x7DC0 #else #error "Can't set up flash memory end!" #endif #else #if defined (pic18f2480) #define FLASH_MEMORY_END 0x4000 #elif defined (pic18f2580) #define FLASH_MEMORY_END 0x8000 #else #error "Can't set up flash …

12
C ++プリプロセッサ__VA_ARGS__引数の数
ネットで答えが見つからなかった簡単な質問。可変個引数マクロで、引数の数を見つける方法は?解決策があれば、ブーストプリプロセッサーで大丈夫です。 それが違いを生む場合、可変数のマクロ引数を変換して、プリプロセッサのシーケンス、リスト、または配列をブーストして、さらに再処理します。


4
マクロを定義するプラグマ
プラグマステートメントを他のステートメントと一緒にマクロに埋め込む方法はありますか? 私は次のようなことを達成しようとしています: #define DEFINE_DELETE_OBJECT(type) \ void delete_ ## type_(int handle); \ void delete_ ## type(int handle); \ #pragma weak delete_ ## type_ = delete_ ## type ブーストソリューション(ウェーブ用に保存)があれば問題ありません。

14
Xcode 4(および依存関係)のコンパイル、ビルド、またはアーカイブの問題
この質問は、過去数週間にわたって進化し、より一般的な問題をカバーしています xcode4 (そして古いプロジェクトからのアップグレードプロジェクト xcodes)。 ただし、問題の多くは、同じ手順に従うことで解決できます。 次のいずれかの問題がある場合は、承認された回答の方法を試してください。 Xcode 4がアプリのアーカイブに失敗する Xcode 4が使用できないアーカイブを作成する Xcode 4は.ipaを作成しません Xcode 4は、プリプロセッサエラーのためにコンパイルに失敗します Xcode 4はヘッダーを見つけることができません Xcode 4のコードコンプリートが機能しない プロジェクトの依存関係はコンパイルされません 依存関係を追加すると、上記の問題が発生します 元の質問 タイトル:Xcode 4の「字句またはプリプロセッサの問題ファイルが見つかりません」 Xcode 4にプロジェクトがあり、正常にビルドしてデバイスとシミュレーターで実行しますが、静的ライブラリに関連付けられたヘッダーファイルを検索すると、アーカイブしようとするとエラーが発生します。 In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15: In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23: In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11: In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10: /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file …

7
まだ定義されていない場合にのみマクロを定義するのはなぜですか?
Cコードベース全体で、すべてのマクロが次のように定義されているのがわかります。 #ifndef BEEPTRIM_PITCH_RATE_DEGPS #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #endif #ifndef BEEPTRIM_ROLL_RATE_DEGPS #define BEEPTRIM_ROLL_RATE_DEGPS 0.2f #endif #ifndef FORCETRIMRELEASE_HOLD_TIME_MS #define FORCETRIMRELEASE_HOLD_TIME_MS 1000.0f #endif #ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS #define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS 50.0f #endif マクロを定義するだけでなく、これらの定義チェックを行う理由は何ですか? #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #define BEEPTRIM_ROLL_RATE_DEGPS 0.2f #define FORCETRIMRELEASE_HOLD_TIME_MS 1000.0f #define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS 50.0f 私はこの慣例がウェブのどこにも説明されていないようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.