最近 C 言語を勉強してますが、 HSP とは色々違っていて新鮮味があって面白いです。ということで、主に HSP と比べての気づいたことメモ。もしかしたら、間違っていることを言っているかもしれません ><
HSPでの関数/命令の引数は変数として扱うことができないのです。(var/arrayを除く)だから変数のように代入なんかも行えて便利だな、と思いました。
これについては、C 言語と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 では、代入は式ではなかったから、計算式中に代入を行ったりするのには慣れてなくて混乱。正直、パッと見たとき何をしているか分かりにくいです。
HSP では、変数以外でメモリを確保できないから(少なくとも標準では) malloc で確保して色んなデータ構造が使えるのは面白い。
線形リストで次や前のポインタを記憶するので思ったけれど、C言語 では変数のアドレスが変わることはないのか( HSP では配列の要素数や文字列サイズの自動拡張があるのでアドレスが変わることががあるのは当たり前のように思っていた)