Edited at

C言語とC#のおまじない卒業に向けて

おまじないを卒業しよう。

ということで、ごった煮な内容でお届けしたいと思います。

詳しい説明はリンク先頼みな内容になる予定。。。

Cを混ぜたのは早くも失敗した感がしている。

気が向いたら追記していきます。


なぜ「おまじない」のままではダメなのか

プログラミングの業界で「おまじない」というと、「よく分からないけど」とりあえず書いてみたといったニュアンスだと思います。

1文字間違えただけで致命的なバグになったりする世界で、「よく分からないけどみんな書いてるから」で書くのは恐ろしいことではないでしょうか?

基本を理解していないと、どこかでハマることになります。という事で、分からないままにするのはよろしくないと思うわけです。


Cにおける#include

実際はなにをやっているのか?

⇒ 参照先ファイル(通常はヘッダファイル)の内容をただ単純にコピーして展開するもの。#defineもただ置き換えるだけなので、そういうものだと思っておけばよいかと。

・参考サイト: https://monozukuri-c.com/langc-include/


C#におけるusing System;とか

名前空間を省略して書けるようにするもの。

例えばusing System;って書いておけば、System.IntPtrIntPtrと書いてもコンパイラが探して補完くれる。

・参考サイト: https://ufcpp.net/study/csharp/sp_namespace.html

・C#本家(英語): https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-directive

なお、上記は「usingディレクティブ」といい、

using(型名 変数名=xxx){処理}は「usingステートメント」といい、別モノです。


C#における[STAThread]属性

スレッドの管理がイケてないCOM機能や、間接的にそのCOM使っている.Netのクラスを使うときは[STAThread]つけてね

という感じ。

つけ忘れてハマるよりは、つけておくほうが無難。

(Single-Thread ApartmentとMulti-Thread Apartmentの概念が理解できておらず、おまじないレベルから脱却できてない・・・)

参考サイト: https://dobon.net/vb/dotnet/form/stathread.html


メイン関数

C,C#とも、コンパイラに、最初に開始する処理がどこにあるかを判断させるために、あらかじめ決められた関数名(メソッド名)を使っている。dll作るときは別の手段を取る。