• ベストアンサー

Solarisのc言語アプリでグローバル変数の初期化は必要か?

一般にc言語でグローバル変数を初期化すると自動的に初期化してくれるものと思っていましたが、Solarisでは明示的に初期化しなければならない、と噂で聞いたことがあります。本当のところはどうなんでしょうか。ご存知の方がいらっしゃったら、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.3

少なくとも、solarisの(セルフ開発用の)コンパイラはANSI Cしか存在しないです。  無意味な初期化はバグのもとですし、バイナリファイルも無意味にサイズが膨らみます。ありえない状況に対応するより、もっと優先的に気を使うことはプログラミングの上でたくさんあります。 私は、C言語とは20数年つきあってきていますが、グローバル変数を初期化しない(BSSに置かない)Cコンパイラは見たことも聞いたこともありません。 スタートアップルーチンを自作する組み込みCでは、あえてゼロクリアしないように作ることは出来ますが、Cコンパイラ付属の標準スタートアップルーチンにはちゃんとゼロクリアが入っています。 常識ハズレな変なCコンパイラが群雄割拠していたのはANSI以前、15~20年まえの話ですから、その当時の「生活の知恵」はいい加減忘れたほうが吉です。

takoyaki100
質問者

お礼

再び、ありがとうございます。 No.1のご回答の根拠がよくわかりました。

その他の回答 (2)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

全てのC言語で自動的に初期化してくれるとは限りません。 OSや Cコンパイラの実装(メーカー・バージョン)によって 異なる場合が有ります。 #C言語の場合、異なる環境への移植も行われる事も多い #ので、明示的に初期化しておく方が吉。

takoyaki100
質問者

お礼

ご回答ありがとうございます。 >全てのC言語で自動的に初期化してくれるとは限りません。 ではSolarisはどうでしょう?というのが質問なのですが・・・。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

C言語ではグローバル変数は宣言時に初期化をしなければ、0x00で初期化されます。これは言語規格で決まっていることなので、Solarisでも何でも同じです。

takoyaki100
質問者

お礼

ありがとうございます。噂はガセだったのですね。