#author("2024-11-13T15:41:51+09:00","default:okazaki","okazaki") #author("2024-11-13T15:42:00+09:00","default:okazaki","okazaki") #menu(howto/MenuBar) * howto/C言語 [#l28cc607] #contents ** 一行メモ [#d6a23889] - C++, C言語 リファレンス https://ja.cppreference.com/ -- &new{2024-06-25 (火) 13:37:31}; - 不可解な実行時エラーの例 -- &new{2024-11-13 (水) 15:33:49}; C90規格(-std=c90)だと、double myfunc( int i, struct hoge* g ) があるとき、 この関数を前方宣言しないまま使うと、コンパイラは int myfunc(int i, ...) のような int型を返す、可変引数の関数として扱われるようで、警告やエラーは出さない。 C99規格では警告してくれる。 myfunc(int narg, ...)を myfunc( int i, struct hoge* g )と思って作っていると、 myfunc(int i, ...)を myfunc( int i, struct hoge* g )と思って作っていると、 実行結果は実に不可解な結果を与える。 #comment ** int, longなどのサイズ [#r86d491f] | |CENTER:C99言語規格 |CENTER:LP64データモデル |CENTER:LLP64データモデル |h |CENTER: char | 1byte以上、int以下 |CENTER: -- |CENTER: -- | |CENTER: int | 2byte以上 |CENTER: 4byte |CENTER: 4byte | |CENTER: long | 4byte以上、long long以下 |CENTER: 8byte |CENTER: 4byte | |CENTER: long long | 8byte以上 |CENTER: -- |CENTER: -- | |CENTER: ポインタ | -- |CENTER: 8byte |CENTER: 8byte | |CENTER: 実装例 | -- |CENTER: Linuxなど |CENTER: Windowsなど | ref. [1] [[C++言語でのint型とlong型とlong long型の違いについて>https://ja.stackoverflow.com/questions/45529/c%E8%A8%80%E8%AA%9E%E3%81%A7%E3%81%AEint%E5%9E%8B%E3%81%A8long%E5%9E%8B%E3%81%A8long-long%E5%9E%8B%E3%81%AE%E9%81%95%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6]] [2] [[cppreference.com 基本型>https://ja.cppreference.com/w/cpp/language/types]] ** 整数のオーバーフローについて知っておく事柄 [#t12b139b] - INT32-C. 符号付き整数演算がオーバーフローを引き起こさないことを保証する https://www.jpcert.or.jp/sc-rules/c-int32-c.html - INT02-C. 整数変換のルールを理解する https://www.jpcert.or.jp/sc-rules/c-int02-c.html - Better C - Goと整数 #golang https://qiita.com/sonatard/items/464a9d45c689386edfe1 ** 多次元の配列とポインタとメモリ領域 [#veeaa7ed] #ref(多次元配列C言語.jpg,left,100%,nowrap)