Arduino環境ではツールチェーンの上に一枚かぶさっているプリプロセッサ的なものが皆よきように計らってくれるのでお楽。しかし、たまにコンパイラオプションを操作しようと思うと隠されている分メンドイです。まあその前に、メンドクセーものどもが画面に映らないように制御もされとるので、それを外して現実を見るところからっすけど。
“オプション沼(27) Arduino IDE 2.x、コンパイラオプションの在処” の続きを読む
オプション沼(26) gcc、Wunused一族、一筋縄ではいかない奴?
今回gccのオプションで練習してみるのは未使用の「何か」を見つけて警告を発する -Wunusedオプション「一族」です。一族になるのは、見つける対象の「何か」に応じて多数の単独オプションが存在するからです。しかしよくよく調べてみると「代表」の筈の-Wunusedだけでは見つからない「何か」もあり。一筋縄ではいきまへん。
オプション沼(25) gcc、Wmultistatement-macros、うかつな奴?
前回はmultichar定数への警告でした。今回はmultiつながり?で multistatementマクロに対する警告の発出です。C++ならテンプレートというものがあるのでそれに任すのも手なのでしょうが、Cのマクロには多くを期待しない方が良いように思ってます(個人の感想です。)たまに人様の超絶マクロに感動しますが。
オプション沼(24) gcc、multichar定数、noなのnoじゃないの?
gccのオプション、「no-ナンチャラ」で指定なし、noなしの「ナンチャラ」で指定あり、という両方があるものが多数ありますな。今回のWno-multichar(あるいはWmultichar)もそのようなオプションの一つです。だいたいmulticharacter constantなんて使ったことねーずら。何それ。
オプション沼(23) gcc、dangling-pointerの見つけ方、伝統的な方?
gccのオプション、バージョンアップとともに増え続けてるみたいデス。旧版コンパイラを後生大事に使用中。最新版なら存在するハズのオプションが不在なこともままあり。今回はdangling-pointerを警告するオプションでそれに遭遇しました。ま、古い版のコンパイラでも検出する手段はあり~の、ただし「ステージ」が違うっと。
オプション沼(22) gcc、Wnull-dereference、最適化しないと効かない3
オプション沼(21) gcc、-Wuninitialized、最適化のときだけ働く、その2
前回は最適化オプションの有無で挙動が異なるWarray-boundsオプションでした。同様に最適化オプションの有無が挙動に影響する警告オプションは他にもありました。今回のWuinitializedオプションもその一つです。未初期化の変数を使用しちゃったときに警告してくれるもの。Wallしていても最適化してなければザル。
オプション沼(20) gcc、-Warray-bounds、最適化のときは世話焼きになる
警告オプションの重箱の隅をつつくようなことをしていると、「これ駄目でしょ」的なコードを書くことになります。しかし何の警告も出ずにコンパイル出来、ましてや実行もできてしまうと。どう見たってエラーなんだけれども。今回のWarray-boundsオプションは、最適化するとビシビシ指摘してくれるのに、最適化しないとザル?
オプション沼(19) gcc、weak symbolの真偽、続-Waddressオプション
組み込みで weak symbol を目にするのは割り込み関係かもしれません。ビルド時にエラーにならないように「とりあえず」weakな奴を並べておいて、後でユーザが実体関数を書いたらそっち、みたいな。前回Waddress オプション使ったときにweak symbolについてチラッと書いてあったです。今回はその確認っと。
“オプション沼(19) gcc、weak symbolの真偽、続-Waddressオプション” の続きを読む
オプション沼(18) gccの-Waddressオプション、警告オプションその1
「とりあえず」警告は全部載せの -Wall オプション使っておけと言われます。しかし、ここはあえてバラバラに警告オプションをひとつひとつ丁寧に?味わっていきたいと思います。それにしても-Wallに含まれる警告オプションだけでいくつあるんだ?それに警告の裏側には新たな世界が広がってるみたいな兆候も。大丈夫か。
“オプション沼(18) gccの-Waddressオプション、警告オプションその1” の続きを読む
オプション沼(17) どしたら差が出る? gccの-fno-builtinオプション
元より野次馬、このところgccのオプションの「なんだかわからん」「不穏な雰囲気がする」やつらをめぐっております。今回は -fno-builtinオプションとな。コンパイラ素人の勝手な理解では、gccが「内蔵する」ビルドイン関数を使わないでくれとリクエストするためのオプション、である筈。しかしこの使い方が分からないデス。
“オプション沼(17) どしたら差が出る? gccの-fno-builtinオプション” の続きを読む
オプション沼(16) ANSI-C(ISO-C)の闇? -ansiと-pedantic
元より野次馬、不穏な気配のたなびくところにひかれます。前回が「小さい闇」なら、今回のは「おおきい闇」でしょうか。以前から2つのオプションに関する説明の書きぶりの「不貞腐れた感じ」が気になっていたのです。ウルセー奴らがいるから、あるいは、あんたの思っているのとは違うぜ的な。元より素人、ちょっとのぞき見してみるだけ。 “オプション沼(16) ANSI-C(ISO-C)の闇? -ansiと-pedantic” の続きを読む
オプション沼(15) インクルードガードの闇?-Wno-import、#importは非推奨
遥か太古の時代、C言語をかじり始めた最初からインクルードガード書いてきました。メンドクセーけど真面目にCプログラム書くときは必須。しかし書かずに済ませる方法があったです、#import。元はといえばObjective-Cの機能みたいですが、gccならフツーのCでも使えていた。知ってた?でも今はその立ち位置微妙。
“オプション沼(15) インクルードガードの闇?-Wno-import、#importは非推奨” の続きを読む
オプション沼(14) 最適化で以下省略なコード書いてみました。gcc -O3オプション
別シリーズのRust記事にて時間計測しようとしたらばコンパイラの最適化のために計測対象が「消えてた」件これあり、ありがち?今回こちらでは消えて(飛ばされてしまう)c言語コードをあえて作成しgccの最適化オプションの「威力」を痛感してみたいと思います。最適化は奥深いのでまたやるつもりですが。 “オプション沼(14) 最適化で以下省略なコード書いてみました。gcc -O3オプション” の続きを読む