ぺんぎんノート

momoiro_tjのノート (旧:システムオペレータの週末)

知っておくべきgccオプション

三連休で何かしないとな、とおもいgccのmanページを読んでいた。結局1日では時間が足りず中途半端な感じになってしまった。1日無駄にしたなーなんて思う。なので、とりあえず分かったことだけでもまとめとこうと思う。

今日gccのmanページを読もうと思った理由は、なんとなくgcc極めたいなーと思ったからだ。とりあえず先頭から読み始めたが、正直これ通常の開発とかで使うのだろうか・・・と思ったころにはもう夕方だった。ふとページの先頭に戻ってみたらSYNOSPSISを改めてみてみると、これだけ知ってれば十分じゃないか?と気づいたわけだ。

なので結論はタイトルの通りだと思った。

しかし、コンパイラのオプションってほんとに多い。Visual Studioを初めて触ったとき、デフォルトでいろんなオプションが設定されていて意味が分からなかった。Visual Studioコンパイルオプションは正直いまでも詳しくはわからない。半面、gccコマンドラインからソースファイルさえ指定すればそれらしくできるからとてもシンプルに見える。実際は内部でいろんなパラメータが設定されているんだろうが・・・・。

知っておくべきgccオプション

以下はman gccで表示したmanページのSYNOPSISに書かれているgccの例。gccのオプションはもっとたくさんあるがこれだけ知っていればいいのでは、というのが今日の結論だ。それぞれのオプションがどういう意味なのか簡単に残しておくことにする。

   gcc [-c|-S|-E] [-std=standard]
       [-g] [-pg] [-Olevel]
       [-Wwarn...] [-Wpedantic]
       [-Idir...] [-Ldir...]
       [-Dmacro[=defn]...] [-Umacro]
       [-foption...] [-mmachine-option...]
       [-o outfile] [@file] infile...

[ -c | -S | -E ]オプション

コンパイルの実行を制御するオプション。-cプリプロセス、コンパイルアセンブルをするがリンクはスルーする。-Sプリプロセス、コンパイルを行うがアセンブル、リンクをスルーする。-Eプリプロセスはするがコンパイルアセンブル、リンクをスルーする。

-cはオブジェクトファイルを出力し、-Sアセンブラコードを出力し、-Eプリプロセス済みのソースコードを出力する。

まとめると以下の表になる。-Eのみ、出力がファイルではなく標準出力になることに注意する。

オプション プリプロセス コンパイル アセンブル リンク 出力形式
-c × file.o(オブジェクトファイル)
-S × × file.s(アセンブラファイル)
-E × × × (プリプロセスを行ったコードを標準出力へ出力)

[ -std=standard ]オプション

C99など、C言語で準拠する規格を指定する。プロジェクトで準拠する規格があれば指定する必要がありそう。なお、C/C++のみに適用可能なオプション。

[ -g ]オプション

デバッグ情報を出力する。GDBを使う場合にこのデバッグ情報を使用する。

[ -pg ]オプション

gprofでプログラムを解析する際に使用するプロフィール情報を出力する。

[ -Olevel ]オプション

-O1-O3などでコンパイルで最適化するレベルを指定する。内部で自動的に各レベルごとに決められた最適化オプション(Optimize Options)を指定してくれているらしい。

[ -Wwarn... ]オプション

表示する警告の設定。-Wallなどがよく使われているイメージ。

[ -Wpedantic ]オプション

拡張機能に対して警告を表示する設定。

[ -Idir... ]オプション

dirに指定したディレクトリをヘッダファイルなどの検索対象に追加する。

[ -Ldir... ]オプション

dirに指定したディレクトリを、リンクしたいライブラリの検索対象に追加する。

[ -Dmacro[=defn]... ]オプション

#defineコマンドラインで設定する。

[ -Umacro ]オプション

定義済みのマクロをキャンセルする。ソースコード中のマクロまたは、このオプションの前に-Dで定義したマクロのキャンセルができる。

[ -foption... ]オプション

指定するとoptionを有効にする。いろんなオプションがある。

[ -mmachine-option... ]オプション

ハードウェア固有のオプションを有効にする。

[ -o outfile ]オプション

出力ファイル名を指定する。指定しないとa.outなどになる。

[ @file ]

コマンドラインオプションをファイルから読み取る場合に、コマンドラインオプションが記述されたファイルを指定する。

infile...

入力ファイルを指定する。必須。


このベースさえ覚えておけば、あとはmanなりhelpなりを都度参照すれば何とかなりそう。特に-foptionとか-mmachine-optionはハードやソフトに何らかの制約がある場合に指定すると思うので、その都度調べて使うような使い方になりそう。

あとはどれだけ便利に使いたいか、というくらいじゃないだろうか。掘り下げていくといくらでも掘り下げられそうだ。

南国っぽい言葉の頭に「エゾ」ってつけると一気に南国感が消える

エゾマリンバ

蝦夷海人(えぞうみんちゅ)

マリンバって南の島の金属の雪平鍋みたいな楽器のことだと思ってたけど、それはスチールパンっていう楽器だった。(マリンバは木琴)

ブログ名変更しました

とつぜんですが、ブログ名を変更しました。

旧:システムオペレータの週末

新:ぺんぎんノート

理由は、しばらく更新していない間にシステムオペレータを卒業したからです。
現状では仕事としては、ソフトエンジニア?っぽい仕事に携わっています。

以前のブログ名ではシステムオペレータという仕事に寄りすぎていたので、仕事に依存しないものにしたつもりです。

改めまして、よろしくお願いします。

Code::Blocksのデフォルトテンプレート一覧

C++IDEってVisual Studio以外にもあるらしい。全然知らなかった。

手始めにCode::Blocksをダウンロードしてみた。
画面はVisualStudioとほぼ同じ感じで良さそうだ。

デフォルトで作れるプロジェクトがわからないものばっかりだったので調べてみた。

f:id:momoiro_tj:20171221115414j:plain
Code::Blocks プロジェクト作成画面

続きを読む

ネットの海でただ酔うことはもうやめようと思う

ショウペンハウアーの『読書について』を読んでいる。読書とは何か、について深く考察されていておもしろかった。

ちなみにまだ3分の1しか読んでないが、ざっと、気になったところをピックアップしてみた。こうすると、読書なんて関係ないただの自己啓発本みたいだ。 続きが気になるが、やる気と記憶が残っている間にブログにあげておこうと思う。尚、以降の引用はすべて光文社古典新訳文庫の翻訳を引用する。

書き出しから、衝撃だった。

どんなにたくさんあっても整理されていない蔵書より、ほどよい冊数で、きちんと整理されている蔵書のほうが、ずっと役に立つ。同じことが知識についてもいえる。 以下に大量にかき集めても、自分の頭で考えずに鵜呑みにした知識より、量はずっと少なくとも、じっくり考え抜いた知識のほうが、はるかに価値がある。

要するに言いたいことは、某Chikirinと同じだ。ちなみに、光文社古典新訳文庫のこの個所のタイトルは、まさしく『自分の頭で考える』だ。 この後、自分の頭でよく考える人間思索家と、博覧強記の愛読家を比較し、どちらが良いかを論じている。

読書と同じように、単なる経験も思索の代わりにはなれない。単なる経験と思索との関係は、食べることと、消化・吸収との関係にひとしい。

この個所もよかった。学生、社会人問わず、「何事も経験だ」などとよく言うが、経験もただ何も考えずに経験するだけでは何の意味もない。 「何事も経験だ」といわれるたびモヤモヤしていたが、そういうことだったのかもしれない、と思った。

考えがいま頭の中にあるということは、恋人が目の前にいるようなものだ。

ざっくりまとめると、メモをとれよ、すぐにいなくなってしまうぞ、ということだと思っている。 仕事でメモを取っていないわけではないが、社会人になってもっと早い段階でこの文章に出会っていたかった。

読書しながらメモをとる、というのは個人的にとても難しく感じる。 ジョン・フォン・ノイマン図書館で借りてきた本に多くのメモを残したという話があるが、本は汚したくないなあ・・・。

本を読むこと、考えること

ざっと読んだだけで、西洋の古典も哲学なんかも素人だ。だが、彼の言うように、思索をしてみようと思う。

彼が言いたかったことは何か。読書はインプットである。アウトプットを多くしていないと意味がないよ、そう言いたかったのだと個人的に解釈している。 彼の言うアウトプットは思索という言葉で統一されている。頭の中で考えるだけではなく、紙にメモをとったり、文章として残したりすることも思索に含まれるのだろう。 前で引用しているが、経験と思索の関係は食べることと、消化・吸収することの関係に等しいと言っている。 単純に、本を読むことは知識を吸収すること、のように感じるが、思索をしなければ自分自身に吸収されないようだ。

本を読んだだけでは、結局何のことが書いてあったのかわからなかったり、読んだけど身についていないと感じたり、ということは往々にしてある。 自分の言葉におこしたり、実際に書いてあったことをやって習慣にしたり、思索をしなければ、自分の体の一部にはできないだろう。
(実際にやってみる(=経験する)だけでは、思索の代わりにはなれないとある。なので、実際にやってみるのであれば、習慣化するところまでしないとだめだと思う。)

そういうわけで重圧を与え続けると、バネの弾力がなくなるように、多読に走ると、精神のしなやかさが奪われる。

彼はこうも言っている。多読(=インプット)ばかりしていると、他人の考えに呑まれてしまい、考えることやひらめきができなくなっていく。 本をたくさん読むことは、いいこと、偉いこと、と親は昔からこどもにすりこませる。だがそれを鵜呑みにしてしまうと、考えられない人間になってしまう。

自分自身、これが当てはまるように思う。本にそう書いてあったから○○をする、ゲームをしていても先に進めなくなったら攻略本を読む、のように。 昔から本や、他人の意見に流され、自分の意見なんてほんの一握りしかなかったのかもしれない。

暗記

この本を読んで思ったことのひとつが、暗記は大切だということ。

学生(大学)時代は、忘れてしまっても本やネットに書いてあるから、あらゆることを覚える必要はない、と考え、暗記はしてこなかった。 というか、暗記は苦手だ。その言い訳にしていたのだと思う。

それがなぜ大事だと感じているのかというと、暗記は自分の頭で考えて、物事を自分の頭に叩き込むことだから。 化学の周期表を「すいへーりーべー・・・」と覚えるのは、与えられた覚え方をそのまま実践しているので何とも言えない。 自分の創意工夫で、これはこう、あれはそう、と覚えていく過程が思索になるのではないか。

特に数学では、暗記は必須能力の一つだと思う。たとえば、三角関数は、関数の性質、倍角・半角の公式、微積分など、覚えることがひたすら多い。 これを暗記せずに問題を解こうと思っても、難しい。自分に染み込んでいないと、三角関数の問題を解く発想は生まれてこないだろう。

どうやって覚えるか、自分の知識との関連性はあるか、など暗記の方法やヒントを考えることは有効なアウトプットのひとつだと思う。

ネットサーフィンについて

当たり前のように誰でも持っているスマートフォン。電車に乗れば、9割近くの人がスマホでネットやゲームに明け暮れている。 ネットサーフィンとでいうと、ニュースを見たり、まとめサイトを見たり、ブログを読んだり。

ネットは、どれをとっても読書・経験と同じだ。つまり、思索にはならない。 ネットは文章を読むことに他ならない。ゲームも、よっぽど考えてやらない限り、ただの経験というだけになってしまうだろう。

それこそ、ブログを書いたりtwitterに意見を投稿したりすることは思索になりえると思う。 (twitterに日常の愚痴や写真をあげるだけなのは違う) ただ、そんなことをしているのは、ネット上の何パーセントだろうか。

ほとんどの人は、ただネット上の文章を読んでただ時間を潰しているだけだろう。 いろんな人の意見を読むことは重要だと考えていたが、考えてアウトプットしないと何の意味もない。 しかも、彼が言うには読むことばかりしていると考えることが苦手になっていくそう。なので、今後はネットを控えようと思う。

WindowsでVimが勝手に作成する4つのファイルを作成されないようにするには。

先日、Vagrantを始めた記事をあげました。

momoiro-tj.hateblo.jp

その際、合わせてWindows版のVimをインストールしていました。 ちなみに、KaoriYa版のVimではなく、Vim公式のものです。

Windows版のVimって勝手にディレクトリにバックアップファイルやらスワップファイルやらを作っちゃうんですよ。しかも4つも。

今回の記事はそのファイルは何なのか、どうすれば出なくなるのか、についての記事になります。

続きを読む

Vagrant始めました。

Vagrant使ってますか?←一回使ってみたかった。

私は今まで手動で仮想マシンの設定するのが楽しかったので、Vagrantなんて邪道!なんて考えている節もありました。 しかし、最近ちょっとめんどくさくなってきたので、重い腰を上げてVagrantをインストールして使い始めてみました。

使ってみて「仮想マシンってこんな使い方あるのか!」と感じました!

今回は公式のVagrant by HashiCorpのドキュメント、Installing Vagrantと、Getting Startedを参考にしてVagrantを試してみたのでその記録になります。

続きを読む