• 締切済み

Cコンパイラの仕組を教えてください

selenityの回答

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

ソースコードが同じでもコンパイルオプションが 異なれば当然オブジェクトファイルのサイズも 変わります。 たとえば、「-O2」をつけるかどうかでもファイル サイズは変わりますし、「-g」がつけばファイル サイズが大きくなります。 また、最終的な実行ファイルもリンクするライブラリに よってファイルサイズが変わります。

marorin
質問者

補足

ご回答ありがとうございます 質問が中途半端だったので申し訳ありませんが、 コンパイルするmakefileは同じものをつかっているので、オプション等の条件は毎回同じです。 例えば続けて数回同じものをコンパイルした際、サイズが変わってしまいます。 どうしてなんですか?最適化とか関係有るのでしょうか? わかれば教えてください。(。-人-。) スイマセン サイズ例・1回目:807312バイト ・2回目:807308バイト      ・3回目:807304バイト ・4回目:807304バイト・・・・・

関連するQ&A

  • Cコンパイラ(gcc)について

    はじめまして。 C言語のコンパイラについてお尋ねしても宜しいでしょうか。 以下のファイルが存在します。 ・test.c(C言語のソースファイル) ・test.exe(上記ソースをコンパイルしたもの。Windows環境で現在稼動してます) test.cの中身を一部変更し、コンパイルする必要があるのですが、 (恥ずかしながら、コンパイルした人間はもう居ないので) 何のコンパイラを使ったか、判りません。 コンパイルするときに使用したであろうコマンドがあります。 gcc test.c -WALL -03 -o test.exe 察するに、gccというコンパイラを使用したと思い MiniGW (http://yanchde.gozaru.jp/mingw/wingw_start.html) を使用してコンパイルをしてみました。 コンパイルは通るのですが、出来上がるexeファイルのサイズが 非常に小さいです。 (オリジナルのtest.exeは500KB以上ありますが、今回コンパイルで出来たものは40kbほどです) この場合、、オリジナルのtest.exeと今回コンパイルしたexeは 異なる挙動をする可能性はありますでしょうか。。 初歩的な質問で恐縮ですが、どうかご教授頂けると、幸いです。

  • WindowsMobile上で使えるCコンパイラ

    EMONEをWindowsMobile5で使用しています。 この上で動く無償のCコンパイラはないでしょうか。 あくまで他の環境でクロスコンパルするわけではなく、WindowsMobile上でソースコードを作成してコンパイルもしたいのです。 どなたかお知恵をお貸しくださると嬉しいです。

  • C言語の実行モジュール、コンパイル

    2点程、教えて頂きたい事があります。 よろしくお願いします。 (1)Solaris9でC言語でコンパイルされた実行モジュールを、そのままSolaris10にコピーし実行した場合、実行できるのでしょうか? (2)Solaris10で、makefile等を利用しC言語のコンパイルをしようと思うのですが、Solaris10がインストールされた段階で既にコンパイルする環境は整っているのでしょうか?。それともCD等からコンパイル環境をインストールしないといけないのでしょうか?(Solarisメディアが無い場合にコンパイル可能でしょうか?)

  • C言語のバージョン違いのコンパイルについて

    C言語で Solaris9のmakefile、ソースをそのまま利用し Solaris10上でコンパイル可能でしょうか? コンパイルした所、 -------------------------- aaa.mk:構文エラー 行 10: '(' unexpected -------------------------- というエラーが出ましたが、 Solaris10向けにmakefileを見直さないと行けないのでしょうか?

  • コンパイラによってエラーが出たり出なかったり

    構造体をポインタでつなぐリスト構造を使ったソースを書いて、Borland C++ Compiler 5.5 でコンパイルしたものを実行するとエラーで止まってしまいました。 コンパイル時には何も警告が出ませんでした。 しかし、ソースを何度見てもバグらしいコードが見つからなかったので、試しに Microsoft .NET Framework SDK でコンパイルしてみたところ、こちらも警告も出ずにコンパイルが通って、実行してみたらこんどは正常に動作しました。 コンパイラによって、実行時にエラーが出たり出なかったりするということは初めてなのでその原因を知りたくて質問しました。 どういった場合にこのようなことが起こるのでしょうか。 Borland C++ で出たエラーは、おそらくセグメントエラーだと思います。 今のところ正常に動いているのですが、なにかデンジャラスなコードを書いてしまった気がして気持ち悪いです。

  • 楽なコンパイラを探しています

    こんにちは。 プログラムに関して、初歩的な質問をさせて頂きます。 現在、C言語でゲームの開発をしようと励んでおります。 その第一歩としてBorland C++ Compilerをインストールしたのですが、 毎回コマンドプロンプトからコンパイルするのが面倒です。 visual C++のような開発環境で開発を進めるのが良いと読んだのですが、 初心者に優しいオススメの開発環境はありませんか?

  • gccコンパイラー

    今、gccでコンパイルするc言語のコンパイラーを探しています。 フリーでダウンロードできるいいコンパイラーはないでしょうか。 お勧めなどがありましたら教えてほしいです。 あと、C言語ではgccやbcc等のコンパイラーで プログラムソースの書き方容が変わったりするものなのでしょうか? 一応、ボーランド?のコンパイラーは持ってます。 ただ、今度OJTでUNIX環境のc言語開発の現場に行く事になり gccでコンパイルするもので勉強しとくようにいわれています。 宜しくお願いします。

  • JAVAでC/C++の条件コンパイルのようなことはできないでしょうか?

    JAVAでC/C++の条件コンパイルのようなことはできないでしょうか? 実行時に判断するのじゃなくて、 コンパイル時に判断するやり方ないですか? 開発ツール等の環境設定でやるとかじゃなくて・・。 C/C++の条件コンパイルのように、 ソースコーディングすることで、行うやり方。 (たとえば) もし、JDK1.4よりもバージョンがひくければ、 JDK1.3以前でも、存在するクラスを使って メイクする。 その代わりすごいおそーいけどね・・・。 もし、JDK1.4以上であれば とても、パフォーマンスのよいクラスを使った コードをメイクする。 その代わりこれは1.4以上でないと コンパイルできないけどね。 みたいな感じで、 実行時じゃなくて、 コンパイル時にソースコード で条件分岐させてしまうやりかたないですかぁ。 (ないだろうなぁ。) args[0]で起動時の引数で 実行時判断させようとしても、 そもそも、1.4からでてきたクラスとかだと 1.3ではコンパイルすらできない あと、 できれば、したい実現したい機能だけど、 それをするには1.4から登場した クラスを使わなければできないので、 1.3ではあきらめてもらい(そういう仕様にしてもらって) しないようにしようと思ったとする。 そして、 その処理が入ってない1.3版と、 その処理が入ってると1.4版とで、 その差分のせいで、 ソースのバージョンを2種類設ける ということを絶対にやりたくない時とか。 どうするんだろう・・。

    • ベストアンサー
    • Java
  • fortranコンパイラのエラーを英語にしたい

    以下の環境でf90とf77を使っていますが、コンパイル時のエラーが日本語で出てきます。これを英語表示にできないでしょうか。 ・Solaris9 ・コンパイラはForte Developer update1のf90とf77を使用

  • コンパイラの違いについて

    こんばんはです。 実は、ビジュアルスタジオで組んだCソースをBolrand C++コンパイラで組んでるPCで実行すると、違った結果が出てきてこまってます。 visualstudioでもBolrandでも、ソースのコンパイルはエラーなしでとおります。 しかし、実行すると、結果が違うのです。これって・・・? 結果と言うのはstrcmpでかえってくる数字なのですが、studioでエグゼつくって実行すると、0も1もー1も返ってきて判断分岐できるのですが、Bolrandの方でエグゼつくって実行すると、0しか返ってきません。なので、分岐は0の時だけの対応しかできないのです。 もっとくわしくいいますと、studioの方もBolrandの方もコンパイルはプロントでおこなっており、studioはcl test.c Bolrandはbcc32 test.c と言う具合に行ってます。 もしかして、古さの違いとかってあるのです?? 昔は構造体のコピーってa = bってできなかったではないですか? 今はa = bできますよね。そういう感じなのでしょうか?? ご存知の方いらっしゃいましたらアドバイスいただきたいです。 よろしくおねがいいたします。