掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
年齢 (ID:52991)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> って書くと、突っ込む人が現れるのね・・^^; > 年齢算出ロジックは確かにYuOさんの示したサンプルの方が > スマートで賢いですね。 2000年2月29日生まれの人の年齢を2001年2月28日にToshiさんのプログラムで算出すると1歳になってしまいます。 つまり,間違いが存在します。 > const に関しては、int getAge(const char *) にしちゃうと、結局 > 上位側で使い方によってキャストしてやる必要性が出てくるし、 なんでですか? char *はキャスト無しでconst char *に変換することが出来ます。 #変換(Conversion)とキャスト(Cast)は別物。 > strcpy()系の関数に渡す時に、いずれにせよどっかしらでキャスト > してやらないといけない訳だから、いいんじゃないかと。 constに関する勉強不足です。 T *をconst T *にする変換は自動で行われます。キャストする必要はありません。 このことは,JIS X 3010-1993の6.2.2.3や, ISO/IEC 9899:1999の6.3.2.3の第2パラグラフ, ISO/IEC 14882:1998の4.4に記述されていることです。 > 逆に、int getAge(char *) がいけないとなると、 int getAge(void *) > なんかとんでもないって事になるのでしょう。 > 私は滅多に void * は使いませんが、どうしても汎用性を求める時は > 使っちゃいます。 本来const char *が欲しいところにvoid *を使うのは問題外です。 void *ってのは「記憶域の塊」を受け取るためのものですから。 > YuOさんも、処理系依存で汎用性が無い!って事で突っ込まれてるのでしょう > から、だったらなぜに const で突っ込むかちょっと不思議。 constは書いたとおり,文字列リテラルを渡せなくなるためです。 例えば,C++だと,例えば getAge(flag ? "2000/02/28" : "2001/02/28") という部分式はコンパイル時にエラーになります。 ちなみに, void main (void) も処理系に依存する書き方です。 #ここの過去ログに書いたことがあるから省略。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.