IOSベースのマクロ定義

2033 ワード

マクロ定義#define:Cと同じ定義と使用
/:改行#:パラメータを1つの文字列にシーケンス化する文字列オペレータコネクタ、隣接する2つのタグ(Token)を1つに接続する場合に使用します.スペースまたは他の操作に基づいて区切り記号[+,-,*,/,],]など)を使用して、接続を強制します.(前の文字列との間のスペースを外してから接続します).@#:文字化オペレータは、パラメータが入力されたマクロ定義でのみ使用できます.マクロ定義体パラメータ名に配置する必要があります.入力された単一文字パラメータ名を文字に変換して、一対の単一引用符で囲みます.可変パラメータマクロ:#define DBGMSG(format,...)fprintf (stderr, format, __VA_ARGS__) … 変更可能なパラメータテーブルを表します.変更パラメータは最後のパラメータに配置する必要があります.VA_ARGS__:パラメータ識別子.呼び出すと、関数パラメータの最後の変数に代わります.pragma:説明コンパイラ情報_Pragma:pragmaと同じですが、機能はもっと強いです.warning:コンパイル警告情報表示#error:コンパイルエラー情報表示#line:当該言語の行番号を示す【可変パラメータマクロはANSI/ISO C++でサポートされていない、iOSでサポートされている】
C言語で定義済みマクロ:_FILE__ :現在のソースコードのファイル名(文字列)_LINE_:現在のソースコードの行番号(整数)_DATE_:前処理を行う日付("Mmmddyyyyyy"形式の文字列)_TIME_:ソースファイルコンパイル時間("hh:mm:ss")_FUNCTION_:同__func_(ただしIDEはサポートしていない)、現在のソースコードの関数名__PRETTY_FUNCTION_:同__FUNITON__であるが、g++ではクラス名、関数名およびその他の関数情報例が入力される.
#ifdef __OBJC__ //              Oc         
#ifdef DEBUG
//debug  ,   NSLog ,              NSLog  
#define NSLog(str, ...)  NSLog(@"%s(%d): " str, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define NSLog(...) {}//    ,   NSLog ,    
#endif
#define BLOCK_EXEC(block, ...) if (block) { block(__VA_ARGS__); };
//   block   ,     block  ,   EXEC_BAD_ACCESS  

マクロ定義(define)と定数(const)の使用:
マクロ定義:#define NAME@「fansion」//前処理のみでテキスト置換を行い、タイプがなく、タイプチェックをしない.マクロを大量に使用するとバイナリファイルが大きくなります
変数:NSString*NAME=@fansion;//一つのメモリスペースを共有して、プロジェクトの中でNで使うならば、Nブロックのメモリスペースも割り当てないで、修正することができて、コンパイルの段階でタイプを検査します
定数:(4つの方法)メモリ領域を共有
ローカル定数:static const NSString*NAME=@「fansion」//staticで修飾すると外部にアクセスできません
グローバル定数:どのフォルダでも外部からアクセスできます.const NSString *NAME = @“fansion”;//*NAMEは変更できません.NAMEはNSString const*NAME=@fansion;/*NAMEは変更できません.NAMEはNSString*const NAME=@fansion;/*NAMEは修正することができて、NAMEはconstの位置が異なってはいけなくて、代表の意義が異なっています;constは右の内容のみを修飾します.すなわち、右の内容は変更できません.
【考えられる*は境界であり、宣言を右から左に読む.例えば:const char*p即ち:p is a pointer to a const char;char*const p即ち:p is a const pointer to a char】
ブログアドレス:IOSベースのマクロ定義