>>701 つ シーケンスポイント
規格持っているならそこを読んで。
ないならググッて。
せっかく2.95を超える世界制覇バージョンとなることが約束された3.0がリリースされたのに
他に言うことはないのか?
ないな。
707 :
名無しさん@お腹いっぱい。:2008/08/11(月) 17:54:18
「シーケンスポイントに関する規約」に適合していないプログラムは
実行結果が保証されないことが分かった。
さて、そうなると、規約を破っているソースコードに対しては、
それを警告してくれるコンパイラの機能が望まれる。
GCCではそのあたりがどうなっているのだろうか?
もうこの板のスレ2年過ぎたら強制dat落ちにしようぜ・・・
5年先まで見通してスレ立てればいいだけの話
投票所を作って、反対意見が出ないようなら削除依頼とかな
依頼してもなかなか削除されねーけど
714 :
名無しさん@お腹いっぱい。:2008/08/16(土) 04:42:49
このしらいさんという方も勘違いしてますね。
718 :
名無しさん@お腹いっぱい。:2008/10/05(日) 05:53:48 BE:1345128858-2BP(0)
OpenBSDは未だに、2.95ですね。
719 :
名無しさん@お腹いっぱい。:2009/01/11(日) 15:34:03
gccで関数プロトタイプ宣言を自動的に生成する機能があると聞いたのですが、
ぐぐってみてもそのような機能は見つかりませんでした。
もし本当にそういう機能があれば、どなたか教えていただけないでしょうか。
またgccに限らず、*.cから*.hを自動的に生成するツールについておすすめのものがあれば教えてください。
GCC3スレにようこそw
ttp://www.kouno.jp/home/c_faq/c11.html#31 > 関数プロトタイプの自動生成ソフトはいくつか存在する。多くはlint に手を
> 入れたものになっている。CPROTOというプログラムが1992年3 月に
> comp.sources.miscにポストされた。他にもcextractというツー ルが存在する。
> コンパイラのベンダーの多くは単純なユーティリティー を用意している。
> 質問18.16も参照のこと。(古いコード用にプロトタ イプを生成するときは"狭い"
> 引数に注意すること。質問11.3も参照の こと。)
gccにそういう機能ってあったかなぁ
721 :
名無しさん@お腹いっぱい。:2011/06/11(土) 00:12:40.83
class A { public: A(){} };
class B : public A
{
B() {A::A();}
};
↑こういうコードで、g++-4.1.2だとエラーなし、
g++-4.6.0だと cannot call constructor 'B::A' directly
というエラーが出ます。どう修正するのが適切ですか?
>>721 class A { public: A(){} };
class B : public A
{
B() {}
};
で、暗黙的にAのコンストラクタが呼ばれる。
もしくは、渡す引数があれば、
class A { public: A(int arg){} };
class B : public A
{
B() : A(123) {}
};
とする。
>>722 ありがとうございます。それでやってみます。
ところで、逆に Bをコンストラクトする時に、
暗黙にAのコンストラクタを呼ばないようにするにはどうしたらいいですか?
>>723 理屈上おかしいし、それは多分できない。
実装上は、Aに何もしないコンストラクタを用意すれば、呼ばれてないのと同じことにはなるかもしれない。
>>724 できないんですね。わかりました
ところで、最初の
>>721 の質問のように
わざわざ継承元のコンストラクタを呼んでるようなコードが
複数のソフトで見つかるんですが
これ、何か意味があったのではないのでしょうか?
それとも、こういう誤解が広範囲に広まっていたのでしょうか?
>>725 実はC++に詳しくないので、そういう書き方があったのは初めて知った。
今の言語規格にはないやり方で、わざわざ利用しているとしたら、理由はわからない。
ただ、今の言語規格ではAのコンストラクタは必ずBのコンストラクタに先立って実行されるので、
継承元のコンストラクタを呼んでるようなコードが、Bのクラスの一番初めの実行文でない場合、
処理の実行に影響がないかどうかは気をつけないといけないと思う。
>>725 コンストラクタを呼んでるつもりで、実は一時オブジェクトを作って捨ててるだけ、ってのはたまに見る。
公開されてるソフトにそんなの入ってるとは思わないけどな。
ソフト名を晒してくれると面白いかもしれない。
初期化子は結構早い段階で規格に入っているしなあ。
"annotated"の頃には入っていたんじゃない?
>>727 kdeaddons-3.5.10の中の kate/tabbarextension/plugin_katetabbarextension.h
というファイルでそういう箇所があります。(本家で公開されてるソースです)
gccのバージョンを上げるとエラーになるため、問題が発覚します。
730 :
名無しさん@お腹いっぱい。:2012/09/14(金) 21:23:43.48
GNU asで、
mov (%ebx), %eax ← ディスプレイスメント(オフセット)なし
mov 0x12(%ebx), %eax ← 8bitディスプレイスメント
mov 0x12345678(%ebx), %eax ← 32bitディスプレイスメント
のようなアドレッシングモードがあって、
ディスプレイスメントのサイズの違う各命令のどれを使うかは
アセンブル時に実際の値で判断して自動決定されますが、
敢えてディスプレイスメントのサイズを明示指定するにはどう書けばいいんでしょう?
たとえば、強制的に32bitディスプレイスメントの命令を使いたいのですが、
mov 0x00000000(%ebx), %eax とか書いても
mov (%ebx), %eax でアセンブルされてしまいます。(dispなし)
mov 0x00000012(%ebx), %eax とか書いても
mov 0x12(%ebx), %eax でアセンブルされてしまいます。(dispは8bit)
(わかってるとは思いますが、オペランドのデータサイズのことではありません)
命令コードを直接.byteで書け、はナシでお願いします。
わかる方いますか?
731 :
730:2012/09/15(土) 10:44:48.95
自己解決しました
回答できなかった者の逆に教える義理はないよ
日本語で。
元々疑問にも思ってなかったことの回答聞かされても誰も興味ねーだろ
736 :
名無しさん@お腹いっぱい。:2012/09/15(土) 22:13:01.41
このスレなんですか
今月はじめ、職場に新しい組み込みマシン(ファンレスの結構省電力構成)が入りました。
多分私が開発全般をまかされそうな雰囲気です。業務的にとある構造分析や
シミュレーションなど行う必要があり、プログラムにアセンブラを使用するのは
聞いていたのですが、添付のサンプルソースコードからチラッと見えたのは
LD A,(HL)という命令でした。
「うへぇ~、よりによってZ80かよ」
アドレッシングモード皆無、リロケート不可、使いにくいインデックスレジスタ、
今時の関数引数のスタック渡しに対応できるのか不安はつきませんし、
今の若者はこんなCPU使わないので人材も少なくソフト開発も大変です。
おそらく導入に際して、大学など教育機関で最初にZ80に触れて刷りこまれた人間が
強気の知ったかぶりをして発言権を得て「俺流」をつらぬき紛れ込ませたのでしょう。
昔、当時、8bitCPUでi8080上位互換でi8085よりも多くのツギハギ命令を追加拡張した
Z80は大学など教育機関に浸透していて、日本のCPU界に多くのバカが輩出しました。
これから私は、おそらくそういうバカが、ADD A,(HL)はできるのにADD B,(HL)は
できないのかとか、相対アドレスのCALL命令はないのとか、
スタックフレームポインタとして使いたいのにLD HL,SPっていう命令ないじゃんとか、
アセンブラ通気取りの偏ったどうでもいい我侭を言い出し(だからZ80使うんじゃねーよ)
それと戦わなければならないのでしょう。そして時代によって決着している、
過去30余年のCPU界隈のくだらないそれらの議論が再現され、それに巻き込まれるの
でしょう。もう今からうんざりです。
だからお願いです。教育現場ではi386でもi568でもi686でも
x86_64でもなんでもいいですが現行のCPUにしてください。
教育機関で懐古趣味のバカを量産されると現場が非常に苦労するのです。
>>737 ネタニマジレスするとLD HL,SPは LD HL,0 / ADD HL,SP で桶。
スタックフレームならオフセット加算は必須なので、
オフセットを先にHLにロードしておいてからSPを加算する。
例えば関数の第1引数ならreturn addressの2byteの次だから、
LD HL,2 / ADD HL,SP ってやって、以降(HL)で値を取ってくる。
ほむほむ
祝・GCC 3.0リリース
祝・GCC 3.0リリース
今のバージョンは?
あ
ぬるぽ
かっ!
祝
ぬるぽ
祝・GCC 3.0リリース
751 :
名無しさん@そうだ選挙に行こう:2014/12/13(土) 21:22:45.35
質問です。
gccって、同じ文字列をまとめて最適化してくれますよね、
ソース中に複数 "hogehoge" と "hogehoge" のように同じ文字列があった場合。
ソースファイルが1個の時はこれでいいんですが、
ソースが file1.c と file2.c に分かれてる時、
file1.c に "hogehoge" があって、file2.c にも同じ "hogehoge" があっても
コンパイル(リンク)したときにまとめてくれません。(同じ文字列2回埋め込まれる)
これをひとつにまとめるオプションか何かありますか?
まとめられるだろw
-flto
?