No.4ベストアンサー
- 回答日時:
> こういったノウハウは、実践で身につけるものなのでしょうね。
やる気があれば、全てドキュメント化されていることなので、座学のみで習得する
ことは可能です。
また、実際に複数のコンパイラを使うはめに陥らないと、なかなかやる気にならない
ということも事実です。
> 注意点や「仕様上不変な部分」の見極めに、何か良いアドバイス(書籍とか)等
> ありましたら、後学の為、御教え頂きたく候ふ。
ANSI の規格書が一番です。
規格書に「不定」とか「未定義」とか書いていないところ(*)が「仕様上不変
な部分」です。
(*) 明示的に『実装により定義された(implementation-defined)動作』と記述されているところもある
No.3
- 回答日時:
>これに関しては、コンパイルが両方で通ればOKということでいいのかな。
不十分だと思います。
a-kumasさんが書いている他にも、片方は正常に動くが片方が異常終了するとか,
結果が異なるとか無いとは言えません。
また、構造体のサイズが絡む場合、通信時のデータサイズが変わったりとか,データファイルのサイズが変わったりとかで
問題がでる場合があります。
>コーディングする上では、さほど意識しなくて良いと認識しましたが。
言語の仕様上不変な部分が身についていれば,
注意すべきところはすぐわかってそこは注意する,
そうでないところは特別に意識しないということはありますが、
なんらかの形で意識はしていると思います。
また、意識しないでうまくいった時はいいですが、
問題が出てから苦労すると思いますが。
ありがとうございました。
注意点や「仕様上不変な部分」の見極めに、何か良いアドバイス(書籍とか)等
ありましたら、後学の為、御教え頂きたく候ふ。
No.2
- 回答日時:
> これに関しては、コンパイルが両方で通ればOKということでいいのかな。
そうでもありません。最近の unix (あなたがお使いの Solaris のように) では、
ライブラリは静的にリンクするのではなく、動的にリンクするのがデフォルトに
なっているのが多いです。
例えば、実行時の LD_LIBRARY_PATH が別のところを指していると、きちんと
動かない、ということがありえます。
> コーディングする上では、さほど意識しなくて良いと認識しましたが。
「さほど」の加減が難しいところ。
ANSI と POSIX の範囲だけにとどまっており、ポインタに関する正しい理解が
あるひとであれば、さほど意識しなくても良いと思います。
でも、最近までコンパイラが複数あることを知らなかったのであれば、何が「普通」な
のかが分からない(今まで自分が普通にやってきたことと同じとは限らない)です
から、一概には言えません。
私の経験では、ひとつのコンパイラしか知らない人が作ったプログラムを、他の
OS (もちろん、コンパイラも違う)に持ってゆく場合には、それなりの覚悟をして
かかります。
※ すんなりとはいかないことが多いです
因みに、これが c++ になると、もっと違いが深刻になってきます。
No.1
- 回答日時:
いろいろありますが、思いついたことをその順であげてみます.
1) ライブラリ,インクルートファイルの違い
ANSI規格に沿った部分は同じでしょうが,それ以外の物は同じライブラリ、関数があるとは限りませんし,インクルードファイルも名前や中身が違う可能性があります。
2) 言語の実装依存部分の違い
例えば,intのサイズは決まっていません。
そこまで極端なことは無いかも知れませんが,
その手の違いがある可能性があります。
構造体も定義によってはサイズが違ってくる可能性がありますね。
3) コンパイラ依存部分
#pragma
なんていうのを使っていると,書き換える必要があるでしょう。
また、言語使用を独自に拡張している場合もありますので、
そういう機能を使わないようにする必要があるでしょう。
4) コマンドライン引数の違い
-cなんかは同じでしょうが,細かいところで違っていると思います。
必要に応じて直す必要があるでしょう。
5) 共存問題
両方同時に使う場合は、それぞれの環境がまざらないか注意がいるでしょう。
.objファイルは混同出来ないかもしれません。
LIBという環境変数でライブラリが参照できる必要があるばあい、それが使っているほうのCコンパイラのそれになっている必要はあるでしょう。
まあ、コンパイルしたプログラムの実行速度やサイズが違うこともあるでしょうが、
実行するうえで問題にはならないですよね。
ありがとうございます。
細かいところでは、それぞれ独自のものがあり、注意が必要ですね。
これに関しては、コンパイルが両方で通ればOKということでいいのかな。
コーディングする上では、さほど意識しなくて良いと認識しましたが。
以上、私の認識に勘違い等があったら、御指摘頂きたく。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(メンタルヘルス) これなんとも思わない人いますか? お前!と言われると気分が悪くなります。 仕事内容によりますが男社会 6 2022/09/21 12:56
- 神経の病気 意識不明って眠気を我慢するのと同じく意識障害中はすごくダルく感じでやがてだるすぎてうごがすとだるさの 3 2023/06/05 13:48
- VPN VPN接続サービス利用の匿名性ついて 2 2022/10/24 15:37
- 転職 公務員です。うつ病にて休職中です。復職について迷っています。 5 2023/01/27 21:30
- 教育・学習 アマゾンキッズを利用されている方、実際良かったか聞きたいです。 1 2022/04/22 23:44
- 睡眠障害・不眠症・過眠症 夜中に目が覚めた時に、目は開きますが、身体が全く動かない時があります。少しすると、だんだん動くように 3 2022/07/31 05:48
- 芸術学 「音色」って何て読みますか? 7 2022/11/07 07:01
- 化学 【乙4種危険物取扱者免状保有者に標識について質問です】危険物の標識ですが、下記注意は第2石油類のみで 2 2022/06/01 23:37
- 日本語 普遍・特殊・個別をハガの違いに適用しようとするのは無理筋 139 2022/11/17 19:59
- その他(就職・転職・働き方) 転職や就職について。 ①転職会議などのネットの評判は信用しますか? ②今の通勤時間は、どのくらい? 3 2022/12/27 15:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++ で、「)」が必要 というエ...
-
0除算して、落ちるプログラムと...
-
C++でアボート(Abort)で処理が...
-
visual studio 2005でC言語は学...
-
関数の戻り値による変数の初期化
-
プリコンパイラとは?
-
Eclipseの環境設定について
-
graph.hがincludeできない
-
io.hをincludeするとそのような...
-
初心者はIDE使わないほうが良く...
-
volatile修飾について
-
C言語のmakefileについて
-
Windows環境でgnu系コンパイラ...
-
Cのコンパイラの変数名の処理の...
-
conio.h? curses.h?
-
Visual C++とVisual C++.NETの違い
-
困っています。
-
fortrn77のフリーソフト
-
65536は2の何乗なのでしょうか?
-
Excelで4096点以上のFFTの方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
CPUが16bitでも32bitOSでコンパ...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
コンパイルできない
-
io.hをincludeするとそのような...
-
変数(関数)名の頭に_
-
コンパイラについて
-
fortranでのNaNについて
-
ABAQUS ユーザーサブルーチン...
-
volatile修飾について
-
Visual C++とVisual C++.NETの違い
-
コンパイラの制限 : ヒープの領...
-
Eclipseの環境設定について
-
graph.hがincludeできない
-
Delphiの逆コンパイル
-
sprintfを用いたフォーマット文...
-
プリコンパイラとは?
-
COBOL用のテキストエディタ
-
PICマイコンによる乱数の表示に...
おすすめ情報