C言語
https://ideone.com/hCoUES お試しサイト
【初心者向け】危険なのに避けられない C 言語の心折設計 - ニコニコ動画
NULLの扱い方
【C言語】「NULL」の意味とNULLを用いた「安全なポインタの使い方」 | だえうホームページ
安全にポインタの指す先にアクセスできるのは、「確保したメモリを指している状態」のみ
プログラムで判断できるのは、「NULL を指している状態」か「それ以外」かのみ
「不定アドレスを指している状態」になった瞬間にポインタに NULL を指させる
「解放したアドレスを指している状態」になった瞬間にポインタに NULL を指させる
不定値を指した状態になったらNULLを指させる
int *p = NULL;
と、free 直後に必ずポインタに NULL を代入すること、
解放したメモリを指した状態になったらNULLを指させる
free(p);
p = NULL;
gcc限定
C言語でラムダを実現する - koturnの日記
C言語でクロージャを実装すると | by Ichi Kanaya | Pineapple Blog
https://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html#:~:text=float%20型の精度%EF%BC%88有効,約%207%20桁となる%EF%BC%8E
桁落ちを回避するためには,計算手順を考え直して, 大きさの近い2数の引き算を避けるようにするしかない.
絶対値が大きな値と小さな値とを加えた場合,小さい方の数値がもつ情報が失われる. たとえば, float 型の精度は約6桁であるから,float 型の数値 77777.7 と 1.23456 とを加えると, 結果も6桁であるから, 77778.9 となる.すなわち, 1.23456 がもつ情報のうちの下4桁の情報が失われている.
出力フォーマット指定子
DOS$B%W%m%s%W%H(B
https://gyazo.com/32cf253fd9e2d4aad0eae4de92ba5067
C言語初心者です。今、猫でもわかるC言語という本を片手にC言語の... - Yahoo!知恵袋
yahoo知恵袋ってわりとしっかりした回答を見つけるときがある
「0x0000000A」の「0x」は、
「これは16進数ですよー」と、C言語に教えることを意味します。
たとえば、「123」という数字。
これは10進数ならただの「123」ですが、
もし、これが16進数だったら、
10進数に直したとき、「291」にという数字になってします。
10進数と16進数の区別をハッキリさせるためにC言語の作者は
16進数には「0x」をつけなさい、というルールを作りました。
printf("a = %08X\n~a = %08X\n",a,~a);についててですが、
%c---文字 char
%d---整数 int
%f---実数 float
と、いろいろありましたよね。
そして、
%X---変数の中身を16進数で表示。だけどA~Fは大文字にしてね。
%x---変数の中身を16進数で表示。だけどA~Fは小文字にしてね。
と言う意味です。
「%08X」みたいに「%」と「dとかfとかX」との間に指定されている文字入れると
表示の方法を変えるコトができます。
これはC言語が持ってるprintfのスーパー能力のうちのひとつで、
たとえばこの場合、「08」ですよね?
これは「絶対に8ケタで表示、足りない部分は0で埋めてね」って意味です。
たとえば、
a=255;
16進数に直すと255=0xff
これをそのprintfの能力で表示すると、
000000FFとなります。
もし、aに入ってる数字が16進数でABCDEFとかなら、
00ABCDEF
1234567899桁で8桁オーバーしてますが、この場合、
123456789
と、フツーに表示されます。
http://wisdom.sakura.ne.jp/programming/c/Cdata1.html
https://gyazo.com/c2c92193392c01ef0f95bc82bb6821a9
共用体(union)
https://wwws.kobe-c.ac.jp/deguchi/c/union.html
もう一度基礎からC言語 第33回 データ構造(12)~構造体の利用例と共用体 共用体
ビットフィールド
ビットフィールド | Programming Place Plus C言語編 第56章
割り当てる領域を0bitにすることで、余った領域を使用不能にできる
https://gyazo.com/da2d98b7922e526e152d557094f80a36
ビットフィールドのメンバがメモリの後側から配置されるの、x86がリトルエンディアンだから
共用体もおなじっぽい
バイト列
https://www.kushiro-ct.ac.jp/yanagawa/C-2016/16-0614/index.html
デバッグ方法
【トリッキーなコード】デバッグ用printfマクロ (C言語)
https://gyazo.com/6737542841f723db1dbbc01489c1fe15
ライブラリのリンクを忘れずに - Qiita
PRIdMAX | Programming Place Plus C言語編 標準ライブラリのリファレンス
時間計測
How to get the current time in milliseconds from C in Linux? - Stack Overflow
c - Measure time in Linux - time vs clock vs getrusage vs clock_gettime vs gettimeofday vs timespec_get? - Stack Overflow
時間情報の取得 clock_gettime() - 時間の扱い - 碧色工房
【C言語】時間計測に用いる time 関数と clock 関数の違いは? | だえうホームページ
ベンチマーク - C, C++, Objective-C, Java, Scala, Ruby, Python!
https://www.mk-mode.com/blog/2014/11/21/benchmark-c-cpp-m-java-scala-ruby-python/
Linuxでの実行時間の計測には、clock_gettime(CLOCK_REALTIME, &timespec) を使うといいようだ
code:main.c
struct timespec ts1, ts2;
clock_gettime(CLOCK_REALTIME, &ts1);
// 計測したい処理
clock_gettime(CLOCK_REALTIME, &ts2);
printf("use loop countertime: %10ld.%09ld CLOCK_REALTIME\n", ts2.tv_sec - ts1.tv_sec, ts2.tv_nsec - ts1.tv_nsec);
文字列型(char*)の配列をループさせるやつ
code:hoge.c
// Keywords
static char *kw[] = {"return", "if", "else"};
for (int i = 0; i < sizeof(kw) / sizeof(*kw); i++)
{
printf("%s\n", kwi);
}
c/c++