プリプロセッサでの文字列連結

#ダブルクォートで囲む
##トークンを連結する
#define COMMAND(NAME)  { #NAME, NAME ## _command }

struct command commands[] =
{
    COMMAND (quit),
    COMMAND (help),
};
こう書くと...,こうなる
struct command commands[] =
{
    { "quit", quit_command },
    { "help", help_command },
};

ソースファイル定義順

C

;;ヘッダーファイル記述順序
;;
;; 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: セクションという順にすべきです。セクションが空の場合には省略します。

各セクション内では通常、次の順序で宣言するべきです。
  1. typedef と enum
  2. 定数(static const データメンバ)
  3. コンストラクタ
  4. デストラクタ
  5. メソッド。スタティックメソッドも含む
  6. データメンバ(static const データメンバを除く)
  7. フレンド宣言は必ず private セクションにあるべきです。また DISALLOW_COPY_AND_ASSIGN マクロは private: セクションの最後に入れるべきです。したがってこれがクラス定義の最後になります。コピーコンストラクタを参照してください。

.cc ファイルにおけるメソッドの定義は、できるだけ宣言の順序と同じにするべきです。

大きなメソッド定義をインライン化してクラス定義に入れてはいけません。インラインで定義してよいのは、簡単もしくはパフォーマンスに影響を及ぼすような、非常に簡潔なメソッドだけです。詳しくはインライン関数を参照してください。

ポインタ

char *array[10];     //char へのポインタの配列
char (*array10)[10]; //char[10] へのポインタ
typedef char Array[10],(*pArray)[10]; //char[10] 型の定義

Hexspeak

ヘッダーファイルポリシー

defines.h各種定義
intern.h複数ファイルから利用される関数,変数

エンディアン変換

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.

0
Posted by watch for this 2013年12月19日(木) 22:35:49 返信

??壔???????障???????腦???吟???潟?<?潟?????紊援ぜ?????障???????? ?????若????ŝ?若??????若???若????? http://www.fetang.com/

0
Posted by ?????若????ŝ?若??????若???若???? 2013年08月03日(土) 20:18:19 返信

??壔???????障???????腦???吟???潟?<?潟?????紊援ぜ?????障???????? ?????若????ŝ?若??????若???若????? http://www.fetang.com/

0
Posted by ?????若????ŝ?若??????若???若???? 2013年08月03日(土) 06:53:44 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます