VCとBCの違い
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG結構細かいところで 違いありません?
情報を共有しましょう
00021
NGNGVisual C++ から C++Builder への移行のポイント
http://www.borland.co.jp/cppbuilder/papers/vctocb/index.html
を紹介しておきます
00031
NGNGfor(int i;i<10;i++){・・・}
を2つ書いても BC++なら問題ありません。
でもVC++はエラーになります。
{ for(int i;i<10;i++){・・・} }
とさらに全体を括弧で囲む必要があるようです
0004デフォルトの名無しさん
NGNG知ったかぶりもいいところまで逝ってます。
00051
NGNGvoid *next;
int size ;
short data[];
} buffer;
こんなふうに、サイズゼロの配列を構造体内で指定するのは BC++では普通に
使っていました。 でも VC++では警告の対象です。
0007デフォルトの名無しさん
NGNG00091
NGNGstatic const int FSIZE=10;
みたいな 定数での初期化を クラス内に置くのが BC++では問題なく出来たのに
VC++では出来ないようだという事です。
これはどう対処してよいのか判りません。 仕方なくクラス外においていますが・・・
0010デフォルトの名無しさん
NGNGなんとも言えん。
0011デフォルトの名無しさん
NGNGホントにエラーになる?
00121
NGNGconst int クラス名::FSIZE=10;
とクラスの外でやればOKだというのが今判りました。
00131
NGNGあ、遅くなりました。よろしくお願いします
>>11
え? もう一度試してみます。 BCC32で動いてたルーチンを
そのままコピペしたらこれで引っかかったので間違いないと思うのですが・・・
0014デフォルトの名無しさん
NGNGなんとなくVCが古い規格にしか対応していないようにも見える。
0015デフォルトの名無しさん
NGNGVC++はforの中で宣言した変数のスコープが
for文のブロックの中だけじゃなくて、
そのあとずっと続くので、
2回書くと同じ変数が2回宣言されてる!
というエラーになるのです。
0016>15
NGNG最近直ったとぷらうが-が言ってたような。
001715
NGNG扱われるのです。だから、for文を{}でくくってやれば
スコープがその中だけになるのです。
だからまぁ、2回iを使うときは2回目は宣言をしないで使う、と。
0018デフォルトの名無しさん
NGNGやっぱりそういうことだったか・・・。
スコープの特性を使うのも言いが、
面倒や分かりづらくなるなら、
やりやすい様にやった方がええで。
変数名を変えるとかね。普通はそうだと思う。
0019デフォルトの名無しさん
NGNG全く別物でしょー
0020デフォルトの名無しさん
NGNGforの{}の中(BCの動作)になるのが、今のC++の仕様。
forの外側(VCの動作)になるのは、昔のC++の仕様(たしか、ARM第1版ぐらい)。
サイズ0の構造体は処理系依存だったと思う。
>>5の例は、dataを既にalloc済みの可変長メモリとして扱うのは
わかるけど、これが、一般に、structの途中に出てきた場合、
次のメンバとオフセットアドレスを同じにすべきか否かの
判断が処理系依存になる。んじゃないかな(弱い)。
クラス内での定数は、宣言はできても初期化(定義)は別のところで
(VCの動作)ってのが普通(gccも)。
理由は、リンカが困るから。
何回もコンパイルされるヘッダ内にFSIZEの定義があると、
リンクするときに、FSIZEの定義が複数のobj(UNIXなら.o)ファイル
にあるので困る。
Borlandのコンパイラ/リンカは伝統的に優れているので、これを解決
できるけど、他のコンパイラ(VC、gcc、codeworrior、その他)が
できるとは限らない。ので、このような仕様になったのではないか。
と思う。
あと、定数が欲しいのなら、static const intだと、メモリ中に確保
されてしまい(されないと、&演算子でアドレスがとれないから)、
数バイトとはいえ無駄になるので、変数の型等の折り合いがつくのなら
enum { FSIZE=10 };
が定石だと思う。
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGC++Builderの場合、無理にコードエクスプローラからメソッドの新規作成とか
しなくても直接書いたり、直接修正しても特に変にならなかったのに・・・
0023デフォルトの名無しさん
NGNG//{{ と //}} の間をいじらなければなりません。
イベントハンドラ以外のメソッドは全て直接編集してますが、
変になったことはありません。
0024デフォルトの名無しさん
NGNGお主の作ったバグをVCのせいにするのはどうかと思うが
0025デフォルトの名無しさん
NGNGその後いろいろ仕様が策定されたんだけど、Microsoftとしては今更変更するわけに
いかなくなってしまったんだよ。
だから、VisualC++の初期状態では、ANSI互換でない部分もある。
設定で互換にできるものも多いけど、そうなるとMFCを捨てる必要が出てくるかもしれない。
ところでC++にはANSIという標準があるわけで、
VCとBC(BCB?)を直接比較するよりも、
お互いがどれだけANSI準拠・非準拠なのを調べたほうが建設的だと思う。
0026デフォルトの名無しさん
NGNG>お互いがどれだけANSI準拠・非準拠なのを調べたほうが建設的だと思う
そのほうが意味ないと思うが
VCとBCBの最大の違いはアカデミックパックの値段の違いだろう
たかすぎるぞBCB
0027デフォルトの名無しさん
NGNGM$は開発ツールで儲ける必要ないだろ。公正取引委員会US版が
黙認すれば、studioの無料配布。で、ボーランドは潰れるだろう(w
ブラウザ戦争も今は昔となりました。 価格競争は厳しいねぇ。
002826
NGNG思うんだがVCのアカデミックパックはべらぼーに安い
BCBはそれよりも高い
普通の金のない学生はどうしてもVCを買う
若者に見向きされないBCBは消え去るのみ
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGenterprise版が3万円台中盤だったと思う。
馬鹿らしくてVC単品とかstanderd版とか買う気起きなかったよ。
今は就職しちゃったのでアカデミックは買えないが、
.NETはいくらするんだろう……
0031デフォルトの名無しさん
NGNGが定義されているが VCには定義されていない
共用する場合は自前で定義しておく事
■ このスレッドは過去ログ倉庫に格納されています