FC2ブログ

int main(void)とデストラクタ~とexternを知る

C/C++を高濃度に触ることになり困惑中.
そもそもわかんないよね,なんて思ってる部分を再確認.
mainの引数,戻り値は?
https://oshiete.goo.ne.jp/qa/2445252.html
ただの知恵袋.
答えは,
int main(void)
int main(int argc, char *argv[])
で.前者は引数キニシナーイ.後者は,argument countとargument valueの並び.
https://teratail.com/questions/7310
によると,argcで引数の数を示し,argvで引数に書いてあることを読んでるみたい.そう受け取った(仕様読めよ)
class Hoge{
public:
Hoge(){
----;
};
----;
~Hoge();
}
つまり私はclassの勉強不足なんですよ.
疑問に思ったことは,~Hogeってなに,でした.
なんで同じ名前のやつのチルダがあるの.ははは…;

https://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/ctordtor.html
クラスオブジェクトが作られる際,はじめに実行されるのがpublic内にあるHoge().これ,コンストラクタ.
一方で,クラスオブジェクトが捨てられる際に実行されるのが~Hoge().こっちがデストラクタ.
引数は指定できても戻り値はない.あっても困る気がする…
簡単に言えば,コンストラクタは初期化,デストラクタは後始末なのだから,うまく行ったかどうか以外に戻り値に意味はないし.

いや,うまく行ったかどうかって大事だけど…boolとかで大事に扱ってるのを知ってはいるけど…コンパイル時点で問題があるか判別してくれてたりしないかな.class内なのだし.コンパイラでのチェックは容易そう.それを理由として戻り値がない,とかであってほしい.

そんなこんな調べてるうちにこんな記事.
http://d.hatena.ne.jp/u_1roh/20091108/1257673753
引用
むしろ、次のようなコードがC/C++への「入り口」としてふさわしいんじゃないか。

extern "C" {
__declspec(dllexport) int HelloWorld() { return 0; }
}
え?
全くわかりません.

とりあえず一時しのぎとして,extern "C"ぐらいは調べました.
http://d.hatena.ne.jp/debian36/20080227/1204109794
マングリングを防ぐのに使われる,という記事.
なんかちがう.多分焦点のずれた記事を読んでいるのだろう.

ということで,またの機会に.
スポンサーサイト



VS2015からVS2017Communityに変えたときのエラー対処

C++のプログラムを諸事情によりわざわざVS2017に変更.
めんどくさいけれどやらないとことは進まない.そんな,変更作業のメモ.

まずは2017Communityへの変更点.が,MSDNライブラリで公開されてる.
https://msdn.microsoft.com/ja-jp/library/bb531344.aspx
当然公開されているけど,初めてこういうの読んだ.

後に紹介するサイトが私の問題とほぼ近いけど,先にこのライブラリを読んでの注記だけしちゃおう.
数学関数のヘッダmath.hに変更が.

cmathで多くのオーバーロードを定義していたが,以前はmath.hにもオーバーロードの定義があった.
今回の変更で,cmathのみでオーバーロードを定義,math.hでは一切定義しないようになった.

ということで,数学関数の類はいろいろ問題が起きそうなわけですね.
特にfloat, long doubleはmath.hからcmathへの移動が起きています.

さて,現在生じている問題点…
ほぼ似たものがあったので,それを引用.
https://stackoverflow.com/questions/42777424/visual-studio-2017-errors-on-standard-headers

つまりは数学系のincludeで某起きてる.それに引き続いてfloat型の様々な数学関数の定義がごしゃっとしてる.全部cmathの中身でエラーしてて,絶対私のせいじゃない.そんなのはどうでもいいとしてアンサーを見る.
Windows Universal CRT SDK
を個別のコンポーネントとしてインストールすること.
ふむ.エラーが1つだけになった.
インストールしたUCRTは何なのか…いつ私にわかるだろうか.全然読み解けない.
えっと…このサイトは関係あるのかな…
https://docs.microsoft.com/ja-jp/cpp/porting/upgrade-your-code-to-the-universal-crt

最後のエラーはMSB8036.単に説明に
Windows SDK バージョン 8.1 が見つかりませんでした
とあるのでそれを入れてみる.
コンパイルが通りました.

…合計で1GBくらい消費してるんだけど…こんなでいいのかな…
ということで終わりです.

終わらなかった.
プログラムを実行してみると,msvcr120d.dllがないとうるさい.
これはでも検索するとすぐ出て来る.debugバージョンを使ってるのが悪い,だそうです.
とりあえずreleaseバージョンで実行して事なき.当然検索したサイト参照したけどちょっと気分悪いから引用書かない.
今度こそ終わり.

ついでにSDKとAPIの違いをかるく勉強した.
このサイト,面白かったよ.はっちゃけてて.
http://tom-rc.hatenablog.com/entry/2014/12/10/232830

またの機会に.
プロフィール

satsuki

Author:satsuki
記事を消しつつ、ころころ変えながら運用中

最新記事
最新コメント
月別アーカイブ
カテゴリ
訪問者数
検索フォーム
リンク
QRコード
QR