C言語編 目次

 関数設計

 

・関数名の命名規則
・プログラミングに出る!英単語

 ポインタ

 

・データ型とポインタ

 データ型

 

・char *とconst char *は違う
・符号付きと符号なし

 演算子

 

・三項演算子とデータ型の問題

 制御構文

 

・条件式で代入する
・三項演算子を使ったswitch

 構造体

 

・構造体のサイズとアライメント
・構造体メンバのサイズを知る

 配列

 

・配列使用時の注意
・配列の要素数を知る

 メモリ管理

 

・メモリスタック
・動的メモリ確保とメモリリーク

 モジュール設計

 

・モジュール分割
・汎用モジュールとアプリ依存モジュール

 パフォーマンス
  徹底チューニング

 


・どんな処理に時間がかかるのか
・ファイル入出力の効率化
・アルゴリズムを考える1
・アルゴリズムを考える2

 プリプロセッサの便利機能


・2重インクルード防止

 


トップページへ戻る

三項演算子とデータ型の問題

 三項演算子を使うときはデータ型をそろえる必要があります。たとえば次のプログラムはコンパイルエラーになります。

long    lg;
short   st;
char    *cp = NULL;

cp = (char *)(true ? &lg : &st);  // コンパイルエラー

 これは、三項演算子の演算結果として何らかのデータ型の値が返りますが、このデータ型が一意に決まらないといけないからです。(long *とshort *は暗黙的に変換できない)

 この場合は次のように明示的にキャストしてデータ型を合わせれば、エラーを回避することができます。

long    lg;
short   st;
char    *cp = NULL;

cp = (true ? (char *)&lg : (char *)&st);

 また、データ型が暗黙的に変換できる場合はエラーとはならず、暗黙的に変換されます。しかしこれが思わぬ問題を引き起こすこともあるので、三項演算子を使うときはデータ型を合わせるようにしましょう。