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

#ダブルクォートで囲む
##トークンを連結する
#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はできるだけ記述しない。

ポインタ

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))) 

コメントをかく


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

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

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