C言語の温故知新


C言語note
-v0.1 2020.8.12 Sherlock init
  • マクロ
  • ##前後をつなぐ記号#記号を文字列化する
    マクロパラメータかマクロの展開ルールかは、マクロが単純なマクロであれば中のマクロを展開し、外のマクロを順次展開することです.
    マクロの実装が##または#を使用するマクロである場合、##または#のルールを直接使用します.
    例えば、以下のtest case 4から「19」への出力を行うには、case 5のような書き方を中間回転させる必要がある.
    #include 
    
    #define TEST(a, b) a##b
    #define STR(a) #a 
    #define A 1000
    #define ADD(a, b) ((a) + (b))
    #define _TEST(a, b) TEST(a, b)
    
    #define _STR(a) STR(a)
    
    int main()
    {
      printf("test 1: %d
    ", TEST(1, 5)); printf("test 2: %s
    ", STR(just_test)); printf("test 3: %d
    ", ADD(A, A)); /* test case 4 */ printf("test 4: %s
    ", STR(TEST(1, 9))); /* test case 5 */ printf("test 5: %s
    ", _STR(TEST(1, 9))); return 0; } : xxx@kllp05:~/tests/c_note$ ./a.out test 1: 15 test 2: just_test test 3: 2000 test 4: TEST(1, 9) test 5: 19

    https://www.cnblogs.com/alantu2018/p/8465911.html
  • 自動データ型変換
  • 各種カットオフデータ
    floatタイプは比較的等しくなく、等しくない
    sizeof()はunsigned intを返します
    符号数と符号数なしの演算、割り当て:https://akaedu.github.io/book/ch15s03.html
    符号付き右シフト、符号付きビット右シフト
  • サイズ端およびビットドメイン
  • http://mjfrazer.org/mjfrazer/bitfields/
    この例では、コードを書く場合、特に下位ハードウェアレジスタの動作に関する駆動コードについて、ビットドメインをできるだけ使用しない理由を説明します.なぜなら,サイズ端の異なるシステムではビットドメインの表現方法が異なるからである.
  • フォーマット印刷
  • printf%n:出力された文字数(次の行の出力をユーザーが位置合わせするのに役立ちます)
    #include 
    
    int main()
    {
    	int num;
    
    	printf("123456:%n
    ", &num); printf("%*c %d
    ", num, ' ', 123); printf("%*c %d
    ", num, ' ', 456); return 0; } : xxx@kllp05:~/tests/c_note$ ./a.out 123456: 123 456
  • ロングジャンプ
  • setjmp, longjmp: https://www.cnblogs.com/hazir/p/c_setjmp_longjmp.html
  • 可変パラメータ関数
  • https://www.cnblogs.com/cpoint/p/3368993.html
  • realloc

  • https://www.cnblogs.com/zhaoyl/p/3954232.html
  • 2 D配列とポインタ
  • constポインタ
  • const char ** p; char * const * p; char ** const p; それぞれ*p、*p、pは定数です.
  • doubleタイプのストレージフォーマット