最終更新: yamanobori_old 2016年02月15日(月) 22:39:24履歴
# | ダブルクォートで囲む |
## | トークンを連結する |
#define COMMAND(NAME) { #NAME, NAME ## _command } struct command commands[] = { COMMAND (quit), COMMAND (help), };こう書くと...,こうなる
struct command commands[] = { { "quit", quit_command }, { "help", help_command }, };
;;ヘッダーファイル記述順序
;;
;; 1.ファイルヘッダーコメント
;; 2.システムヘッダーの取り込み
;; 3.ユーザー作成ヘッダーの取り込み
;; 4.#define マクロ
;; 5.#define 関数マクロ
;; 6.typedef 定義 (int や char といった基本形に対する型定義)
;; 7.enum タグ定義 (typedefを同時に行う)
;; 8.struct/unionタグ定義 (typedefを同時に行う)
;; 9.extern 変数宣言
;;10.関数プロトタイプ宣言
;;
;;ソースファイル記述順序
;;
;; 1.ファイルヘッダーコメント
;; 2.システムヘッダーの取り込み
;; 3.ユーザー作成ヘッダーの取り込み
;; 4.自ファイル内#define マクロ
;; 5.自ファイル内#define 関数マクロ
;; 6.自ファイル内typedef 定義 (int や char といった基本形に対する型定義)
;; 7.自ファイル内enum タグ定義 (typedefを同時に行う)
;; 8.自ファイル内struct/unionタグ定義 (typedefを同時に行う)
;; 9.static 変数宣言
;;10.static 関数宣言
;;11.関数定義
;; 2 〜 3は不要なものを取り込まない。
;; 4 〜 8はできるだけ記述しない。
;;
;; 1.ファイルヘッダーコメント
;; 2.システムヘッダーの取り込み
;; 3.ユーザー作成ヘッダーの取り込み
;; 4.#define マクロ
;; 5.#define 関数マクロ
;; 6.typedef 定義 (int や char といった基本形に対する型定義)
;; 7.enum タグ定義 (typedefを同時に行う)
;; 8.struct/unionタグ定義 (typedefを同時に行う)
;; 9.extern 変数宣言
;;10.関数プロトタイプ宣言
;;
;;ソースファイル記述順序
;;
;; 1.ファイルヘッダーコメント
;; 2.システムヘッダーの取り込み
;; 3.ユーザー作成ヘッダーの取り込み
;; 4.自ファイル内#define マクロ
;; 5.自ファイル内#define 関数マクロ
;; 6.自ファイル内typedef 定義 (int や char といった基本形に対する型定義)
;; 7.自ファイル内enum タグ定義 (typedefを同時に行う)
;; 8.自ファイル内struct/unionタグ定義 (typedefを同時に行う)
;; 9.static 変数宣言
;;10.static 関数宣言
;;11.関数定義
;; 2 〜 3は不要なものを取り込まない。
;; 4 〜 8はできるだけ記述しない。
クラスにおける宣言は、以下に定める順序にしてください。public: は private: の前に置く、メソッドはデータメンバ(変数)の前に置くなどです。
クラスの定義は public: セクションから始めて、protected: セクション、private: セクションという順にすべきです。セクションが空の場合には省略します。
各セクション内では通常、次の順序で宣言するべきです。
.cc ファイルにおけるメソッドの定義は、できるだけ宣言の順序と同じにするべきです。
大きなメソッド定義をインライン化してクラス定義に入れてはいけません。インラインで定義してよいのは、簡単もしくはパフォーマンスに影響を及ぼすような、非常に簡潔なメソッドだけです。詳しくはインライン関数を参照してください。
クラスの定義は public: セクションから始めて、protected: セクション、private: セクションという順にすべきです。セクションが空の場合には省略します。
各セクション内では通常、次の順序で宣言するべきです。
- typedef と enum
- 定数(static const データメンバ)
- コンストラクタ
- デストラクタ
- メソッド。スタティックメソッドも含む
- データメンバ(static const データメンバを除く)
- フレンド宣言は必ず private セクションにあるべきです。また DISALLOW_COPY_AND_ASSIGN マクロは private: セクションの最後に入れるべきです。したがってこれがクラス定義の最後になります。コピーコンストラクタを参照してください。
.cc ファイルにおけるメソッドの定義は、できるだけ宣言の順序と同じにするべきです。
大きなメソッド定義をインライン化してクラス定義に入れてはいけません。インラインで定義してよいのは、簡単もしくはパフォーマンスに影響を及ぼすような、非常に簡潔なメソッドだけです。詳しくはインライン関数を参照してください。
char *array[10]; //char へのポインタの配列 char (*array10)[10]; //char[10] へのポインタ typedef char Array[10],(*pArray)[10]; //char[10] 型の定義
linuxカーネルソースの include/linux/byteorder/ 以下にある
/* * casts are necessary for constants, because we never know how for sure * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. */ #define ___constant_swab16(x) ((__u16)( \ (((__u16)(x) & (__u16)0x00ffU) << 8) | \ (((__u16)(x) & (__u16)0xff00U) >> 8))) #define ___constant_swab32(x) ((__u32)( \ (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ (((__u32)(x) & (__u32)0xff000000UL) >> 24))) #define ___constant_swab64(x) ((__u64)( \ (((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ (((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ (((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ (((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ (((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ (((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ (((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ (((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56))) #define ___constant_swahw32(x) ((__u32)( \ (((__u32)(x) & (__u32)0x0000ffffUL) << 16) | \ (((__u32)(x) & (__u32)0xffff0000UL) >> 16))) #define ___constant_swahb32(x) ((__u32)( \ (((__u32)(x) & (__u32)0x00ff00ffUL) << 8) | \ (((__u32)(x) & (__u32)0xff00ff00UL) >> 8)))
このページへのコメント
v0M9bT Very good article.Thanks Again.
??壔???????障???????腦???吟???潟?<?潟?????紊援ぜ?????障???????? ?????若????ŝ?若??????若???若????? http://www.fetang.com/
??壔???????障???????腦???吟???潟?<?潟?????紊援ぜ?????障???????? ?????若????ŝ?若??????若???若????? http://www.fetang.com/