C 言語を勉強して色々気づいたこと

最近 C 言語を勉強してますが、 HSP とは色々違っていて新鮮味があって面白いです。ということで、主に HSP と比べての気づいたことメモ。もしかしたら、間違っていることを言っているかもしれません ><

関数の引数は変数と同じように扱えるから、代入が出来るということ

HSPでの関数/命令の引数は変数として扱うことができないのです。(var/arrayを除く)だから変数のように代入なんかも行えて便利だな、と思いました。

配列変数の次元の並びが HSP とは逆?

これについては、C 言語とHSPの多次元配列のメモリ上の並びについてという記事で詳しく調べました。

つい、 HSP のくせが出ちゃう

分のお尻にセミコロンをつけるのを忘れていたりだとか、よくやっちゃうのがif文のカッコの忘れ。これは慣れればなんとかなります。

文字列型の変数というものがない

HSP ではstr型という文字列型がありましたが、 C 言語では文字列型がありません。char型の配列ということになります。これも別に問題はないかな。ちょっと不便だってくらいで。

ダブルクォートで囲む文字列リテラルは、宣言時にしか変数に代入できない

ダブルクォートで囲んだ文字列リテラルが宣言時にしか代入できません。strcpy 関数を使わなければいけません。同様にカンマ区切りで配列変数の要素を一括で指定して代入するのも宣言時だけ。これは HSP の感覚からしたら意外です。

遅延評価

( a || b || c ) のような式で a が true だったら、それ以降( b や c )の演算を行わない、というのに驚き。(&& の演算もしかり)無駄な演算をしないので高速になるな~と思ったけれど、必ず演算されることを期待してその条件式の中で代入を行っていたら痛い目に遭いますね、注意します。

「あれ?これって HSP じゃ行われないよな!?」と不安になったので確かめてみる。

mes 0 && a.5
---------------------------
Error
---------------------------
#Error 7 in line 1 (???)
-->配列の要素が無効です

---------------------------
OK   
---------------------------

HSP じゃ行われないようです。

計算している式の中で代入

HSP では、代入は式ではなかったから、計算式中に代入を行ったりするのには慣れてなくて混乱。正直、パッと見たとき何をしているか分かりにくいです。

mallocでメモリを動的確保

HSP では、変数以外でメモリを確保できないから(少なくとも標準では) malloc で確保して色んなデータ構造が使えるのは面白い。

変数のアドレスの移動について

線形リストで次や前のポインタを記憶するので思ったけれど、C言語 では変数のアドレスが変わることはないのか( HSP では配列の要素数や文字列サイズの自動拡張があるのでアドレスが変わることががあるのは当たり前のように思っていた)

インフォメーション

公開日時
2007年8月6日 午後10時6分7秒
最終更新日時
2007年12月19日 午後10時29分6秒
カテゴリ
C/C++