Visual Studio やめました
久々に Visual Studio でプログラム書こうとしたら、cのソースファイル全く開けなくなってた。
まぁ、兼ねてより Visual Studio には不満があったし、離れるにはちょうどいいのかな、と前向きに考えることにした。
1つソースファイル作るごとに、自動で関連ファイル作りすぎだしね。
ほんとぶくぶく太ってく・・・。
というわけで、重たい腰を上げて、MinGWを導入。
しかしここで、現在使用中のノートPCが64bit版であるがゆえに、パスをうまく通せない事態が発生。(これは、たまたま同じように困ってる人がいて、64bit版が原因では?と指摘しているのを見つけたので、気づくことができた)
で、MinGWの64bit版をインストールしなおし。
まあ、気づいてみればどうということはないが、それまであっちこっち調べまくる羽目に(泣)
次に、おすすめのエディタをいろいろ調べて、最終的にサクラエディタとAtomまで絞った。
サクラエディタの導入は順調にいった。
Atomの方は、動かそうとしたら、早速文字化け発生。
この文字化けに随分悩まされた。
gpp-compilerというパッケージを入れて、これで動かせれば、一番ストレスフリーにC言語の学習ができるだろうと思ったんだけど、そこからの格闘が長かった。
だって、UTF-8になおしても、文字化け治らないんだもの!(むしろ悪化)しかも、他ですでに書いてたやつはSJIS?とかいうやつで、Atomにないし、Shift-JISにしても文字化けするし!
まあ、おバカなのは自分なんだけど、とにかく発狂。
文字コードは、ホントわからんわ。
今日は1日中、cプログラミングの環境整備で時間を吸い取られた・・・。
上で述べたこと以外にも、めちゃめちゃトラブル起きてたんで、もう、へとへと・・・。
その分、勉強にはなったかな(白目)
<追記 2017/08/27>
Atom、gpp-compilerと文字化け問題は、gcc が原因だと判明。
実際、Atom関係なしに、UTF-8で書かれたものをgccでコンパイルすると同じ文字化けが起きる。
gcc "ファイル名" --input-charset=utf-8 --exec-charset=cp932
とかやれば、文字化け回避ができることも分かったけど、さて、Atomのgpp-compiler使うときはどうすれば良いのやら・・・。
まぁ、Atom上でShift-JISで書いて、Atom上でコンパイルする分には何も問題ないから、Shift-JIS安定かなぁ?
でも、起動するたびにUTF-8をShift-JISに直すのは面倒だし、将来的にhtmlとか扱うとしたらUTF-8安定みたいだから、どうしたものか・・・。
gifアニメが作れるようになりました
ここ最近、C言語を使ってgnuplotを扱う手法を勉強してきたが、ついにgifアニメを作れるようになった!!それがこれ↓
これを作るために組んだプログラムが下のやつ(なるべく使い勝手が良いように、頑張って綺麗にした)↓
割と簡潔に作れたと思ってるけど、/* 動点をプロット */ の行は改善の余地がある気がしてる・・・。
これはgnuplotの仕様について、まだまだ勉強不足なのが原因。
互換性を切る_popenも良くないし、関数の命名も良くないかな。
あと、反省しなきゃいけないのは、数値計算の技術が身についてないこと。
相変わらず、後輩の数値計算プログラムを使わせてもらっている情けない先輩です・・・orz
なんか、データの表現方法ばっかり磨いてる感じだな。
数値計算の結果を実行時にgnuplotに渡す
数値計算の結果をデータファイルにして、gnuplotでグラフにする。
このときに、地味に面倒なのが、データファイルのいるディレクトリをコピーして、それをgnuplotに渡す作業。
このイライラを解消するために悪戦苦闘(と言っても、popen使えば良いだけなので、単に自分が情弱なだけorz)。
んで、「ついでに、pngファイルも自動で作らせてしまえ」と思い、さらに時間を浪費(主に打ち間違いが原因で無駄な時間を過ごす)。
この作業をプログラムで組めないかとあれこれ調べ、関数を作るまで至った。
それがこれ↓
pngファイルの名前を作るのに、無駄にプログラムが長くなってる印象。
(※2017/4/23追記:for文にすれば6行を3行に減らせる)
この名前の付け方を少し説明すると、数値計算のデータファイル名を、例えば"test.dat"としたときに、pngファイル名を"test.png"にしたかった。
だから、"test"の部分だけ抜き出すために、配列spng[]を用意して、そこに"."が現れるまでコピー。
で、最後にナル文字"\0"を追加。
ちなみに、自分はwindowsでやってるので、_popenだけど、Linuxとかだとpopenだったはずなので、そこは変更しないといけない。
ヘッダファイル作って、互換性保てるようにしたいなぁ・・・
あと、どういうグラフを書かせたいかによって、いじらないといけないので、これは試用という感じだな。
ポインタの分からないところ 追記
友人より、「ポインタの宣言
T *ptr;
があるときに、次の2式
ptr = ptr + 1;
ptr = (T *)( (int)ptr + sizeof(T) );
が同じになるよ」とアドバイスをもらったので、とりあえず確認するためのファイルを作ってみた。
それがこんな感じ。
もともとほしい結果は、
#define DEBUG 0
とした時のもので、アドバイスを反映させてみたのが、画像にあるとおりの
#define DEBUG 1
としてるやつ。
確かに、同じ結果になる!
なるほど。
ポインタをインクリメントするときは、ポインタに格納した番地をType型のサイズ分1増加する、ということを裏でやってるってわけか。
早とちりしてなければ、これで良さげ。
ポインタのわからないところ
配列 a[5] と、その配列の先頭 a[0] へのポインタ ptr があるとする。
このときに、*ptr は a[0] を指し、インクリメントをすると a[1] を指すのだが、これは何をインクリメントしているのだろうか。
つまり、「*ptr が a[0] を指し、*(ptr + 1) が a[1] を指す」というときの、+1がどこに足されているのかが、よくわかっていない。
調べてみると、うちのPCでは「配列 a の番地が 6 ずつ飛んでいる」わけだけど、これと上のことが、つじつまが合わない気がする。
a[0] を指すポインタには、a[0] の番地が格納されいてるはずで、a[1] の番地を指してほしければ、+6しなければいけないはずでは?と思うんだけど、よくわからない。
+1 を +6 に置き換えてるってことでいいのか?う~ん・・・。
コマンドライン引数(その2、Visual Studio からコマンドラインへ)
「新・明解C言語 実践編(柴田望洋著)」を Visual Studio で勉強していると、コマンドラインのところで、いちいち戸惑っていた。
これは中級編を勉強していた時もそうだ。
前回は、
1.エクスプローラーを開く( [Windows キー] + [E] )
2.実行したい exe ファイルがいるフォルダを開く(ここが地味に面倒)
2.exe ファイルのプロパティを開く( [Alt] + [Enter] )
3.フォルダの場所をコピー(ここはマウスを使うのでストレスたまる)
4.コマンドプロンプトを起動( [Windows キー] + [X] +[C] )
5.「cd フォルダの場所」を入力
と、この手順でコマンドラインを実行する手筈を整えていた。
だけど、これだとだいぶ面倒なので、上の操作をやらず、さぼって先へ進んでた。
ただ、実践編に入っても出てきて、やはり「さぼってちゃ理解が進まない」という結論に至った。
それで今回、上の手順がもう少し楽になることが分かったので、忘れないように残すことにした。
その手順は、
1.ソリューションエクスプローラへ移動( [ctrl] + [tab] +矢印キー)
2.右クリックで「ソリューションをエクスプローラーで開く」を選択
( [プロパティーキー] + [X] )
3.目当ての exe ファイルのいるフォルダへ移動(Debug のところ、移動は楽)
4.アドレスバーに移動( [Alt] + [D] )
5.「cmd」と入力して [Enter] を押す
これで、目当ての exe ファイルをコマンドプロンプトで実行する手筈が整う。
今回、いろいろ調べたおかげで、2点楽になった。
1.目当ての exe ファイルのいるフォルダへ移動(上記手順1、2、3)
2.コマンドプロンプトで目当てのフォルダへ移動(上記手順4、5)
特に、2番目の方は gnuplot 使うときも重宝しそう。