トップページ⇒tech
1001コメント330KB

スレを勃てるまでもないC/C++の質問はここで 4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/09/17(水) 15:41:48
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0022デフォルトの名無しさん2008/10/01(水) 20:36:02
すみません
ビルドできないんですがどうすればいいのでしょうか?
応答なしになってしまいます・・・
0023デフォルトの名無しさん2008/10/01(水) 21:00:18
パソコンを買い換えるのが、一番確実な解決法じゃないかな
0024デフォルトの名無しさん2008/10/01(水) 21:18:32
char*をwchar_t*にしたいんだが、mbstowcs()つかても変換後の日本語部分がデバッガで見ても正しくないんだが、これはどういうことなんだろうか。
それか別の変換方法ってある?
元々はVC9でfstreamのパスに日本語があると開けないやつの対策用に変換がしたいわけで・・・
0025デフォルトの名無しさん2008/10/01(水) 22:28:05
>>24
setlocaleしないとまともに動かないぞ。
0026242008/10/01(水) 22:39:41
なるほどそれってmbstowcs()の第4引数を使っても結果はsetlocaleと同等?
0027デフォルトの名無しさん2008/10/03(金) 12:32:57
例えば、クラスAに要素a、bがあるとして派生クラスBの配列要素c[i][j]の各要素ににそれぞれ違うクラスAの要素a、bを入れるようなことはできますか?
例の補足としては、c[0][0]にはa=1、b=2 c[0][1]にはa=5、b=3が入っているとしたら c[0][3]=c[0][0]+c[0][1]の計算した場合 c[0][3]はa=6、b=5になるようなことです
0028デフォルトの名無しさん2008/10/03(金) 12:36:22
頭痛くなってきた・・・
0029デフォルトの名無しさん2008/10/03(金) 23:34:08
行列計算をしたいってことか?
根本的にやり方を変えないと出来ないんじゃないか?
0030デフォルトの名無しさん2008/10/03(金) 23:40:21
つか行列ならclass Bを配列にするんじゃなくてclass Bの中にclass Aの配列を取り込むべきなんじゃないかね
外部からの入力をメンバ関数で受け取って同じ関数内で再計算までやってしまえばいいんじゃないかね

もう解決してそうな気もするけどな・・・
0031デフォルトの名無しさん2008/10/04(土) 01:12:09
[質問]インスタンスを配列とした場合、コンストラクタへ引数を与える方法がわからない。

class Huga
{
public:
Huga( int i = 0 ){ printf("%d\n", i); }
~Huga(){}
};

int _tmain(int argc, _TCHAR* argv[])
{

//Huga *huga = new Huga(5); みたいな感じにしたい
Huga *huga = new Huga[10]; // ここでコンストラクタへ引数を渡したい。
delete[] huga;
return 0;
}

なにかよい知恵があればお授けください。
0032デフォルトの名無しさん2008/10/04(土) 01:16:18
>>31
仕様上無理です。
後からsetter()でもループして回しましょう。
0033312008/10/04(土) 01:20:42
>>32
さっそくのレスありがとうございます。
了解しました。
おとなしく、他の方法を考えます。
0034デフォルトの名無しさん2008/10/04(土) 20:27:50
答えは5のようですが、なぜそうなるのかわかりません。
どなたか流れを教えてください。よろしくお願いします。

#include
int sub(int *x, int *y) {
(*x)++;
(*y)++;
return *x + *y;
}
main() {
int a = 0, b = 0;
b = sub(&a, &a);
printf(“%d %d\n”, a, b);
}

(1) 0 2
(2) 0 3
(3) 1 3
(4) 2 3
(5) 2 4
0035デフォルトの名無しさん2008/10/04(土) 21:02:23
>>34
これでOK?
int sub(int 0, int 0) {
0++; => 1
1++; => 2
return 2+2; => 4
}
0036デフォルトの名無しさん2008/10/04(土) 21:46:29
>>35
ご回答ありがとうございます。

1++; => 2       ←なぜここで1++になるのですか?*y=0ではないのですか?
return 2+2; => 4    ←これも、なぜ*x=2になるのですか?1ではないのですか?

よくわかりません。お手数ですが、お教え願います。
0037デフォルトの名無しさん2008/10/04(土) 21:53:07
>>35
長くてごめん。
>b = sub(&a, &a);
となってるからとしか言えないんだけど。
重要なのは0という数値じゃなくて0が入ったaのアドレスが渡されてるってこと。
xもyも指してる実体は同じaだから、xへの操作はyへの操作と同じだし同様にyへの操作もxへの操作となる。
だから実際は以下と同じようになってるってわけ。

int sub(int *x) {
(*x)++;
(*x)++;
return *x + *x;
}
0038デフォルトの名無しさん2008/10/04(土) 22:24:01
>>37
理解できました。ありがとうございました。
0039デフォルトの名無しさん2008/10/05(日) 03:03:40
Cのプリプロセッサで
#if sizeof(time_t) == 8
 /* time_t が 64 bit のときの処理 */
#else
 /* time_t が 32 bit のときの処理 */
#endif
みたいな書き方ってできなかったっけ?
0040デフォルトの名無しさん2008/10/05(日) 09:41:19
実務で、構造体、共用体はどう使われているのですか
0041デフォルトの名無しさん2008/10/05(日) 21:06:33
>>40

自分の場合、、、。
構造体を使わなかった場合は、
関数への引数が多くなってしまったり、
関数の戻り値を1つの型ですませることができなくなったりして
不便です。
なので、関数の引数や戻り値で大活躍です。
その他、いろいろ使っています。

共用体は自分の場合はあまり使わないです。
BYTE(unsigned char)型みたいに1byte単位での
入出力が必要な場合に、ある程度決まった型に変換が必要な
場合とかには使う場合があります。

と実務経験があまりない自分が言ってみるテスト。
0042デフォルトの名無しさん2008/10/05(日) 21:36:12
>>39
うんできない
0043デフォルトの名無しさん2008/10/06(月) 09:36:06
>>42
じゃあ>>39みたいなことしたい場合は、autoconfとかを使って、
コンパイル前にあらかじめsizeof(time_t) を調べておく必要があるってことですね。
うーん、今作ってるのは小さいプログラムだからあんまり大げさなことはしたくないなあ。
なんかいい方法があれば教えてください。
0044デフォルトの名無しさん2008/10/06(月) 10:27:02
>>43
プリプロセッサとsizeofとどっちの処理が先か考えりゃわかるべ。
0045デフォルトの名無しさん2008/10/06(月) 10:54:53
>>43
time_tが64bitの環境はまだ少ないんだし、その環境向けのifdef (OSと
かCPUとか)で分ければいいでない?
0046デフォルトの名無しさん2008/10/06(月) 11:06:21
if (sizeof(time_t) == 8) {
} else {
}
じゃだめなのか?

#include <limits.h>
#if SIZE_MAX == 4294967295
#else
#endif
とか
0047デフォルトの名無しさん2008/10/06(月) 11:11:47
そこでtmpですね
0048デフォルトの名無しさん2008/10/12(日) 14:55:45
あるローカル関数A内で
グローバルのポインタ変数にmallocし、領域を確保。
その後、他のローカル関数B内で、関数A内で確保した領域を使うことって
出来ましたっけ?
004948 補足説明2008/10/12(日) 15:14:03
上でやりたいのは、こういう事なんですが

#include <stdio.h>
#include <stdlib.h>

char *g_pcX;

int sub001(char *pcX)
{
pcX = (char*)malloc(256);
for(int i=0; i<256; i++)
{
pcX[i] = i;
}
return 0;
}


void main()
{
sub001(g_pcX);

for(int i=0; i<256; i++)
{
printf("%d ", g_pcX[i]);
}
}
0050デフォルトの名無しさん2008/10/12(日) 17:41:40
>>49
・そのサンプルではコンパイルできません。
・グローバル変数であるメリットが全くありません。
・そもそも関数内で確保した場所を誰にも伝えていないのに誰かが使えるわけがありません。
・ポインタと関数の引き数について勉強しなおすべきです。

>>48
できます。しかし、そうすべきではありません。
0051C言語始めました2008/10/12(日) 18:51:19
zero( // ???? //)
{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=0.;
}
}
}

main(){
int n=4;
vector< vector<double> > a( n , n );
zero(// ????? //);
}


????
↑の部分はどのように宣言したらいいのでしょうか?
0052デフォルトの名無しさん2008/10/12(日) 19:09:05
>>51
向こうで教わったでしょ。
0053C言語始めました2008/10/12(日) 19:12:59
void zero(int n, vector< vector<double> > & a)
{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=0.;
}
}
}

void main(){
int n=4;
vector< vector<double> > a( n , n );
zero(n, vector< vector<double> > & a);
}

さっぱりピーマンです…
0054デフォルトの名無しさん2008/10/12(日) 19:27:30
いかん、間抜けだったのか。

>>53
次のどれかを選択しろ。
・STLの勉強をする。
・C初心者スレ辺りでやりたいことから提示して初歩から教わる。
・PCを窓から投げ捨てる。
0055C言語始めました2008/10/12(日) 19:35:24
すいません。

火曜日になれば教えてもらえるけど早く使い方知りたかったんで。

基礎とかは二の次で使えたらいいのでどうか教えてください。
0056デフォルトの名無しさん2008/10/12(日) 20:58:43
これで判らなければ、火曜まで待て。
--
#include <vector>
void zero(std::vector<std::vector<double> > & a){for (unsigned i = 0; i < a.size(); ++i) for (unsigned j = 0; j < a.at(i).size(); ++j) a.at(i).at(j) = 0;}
int main(){const unsigned n = 4;std::vector<std::vector<double> > a(n, n);zero(a);return 0;}
0057C言語始めました2008/10/12(日) 21:30:04
<<56
ありがとうございます。
がんばって噛み砕きます。
0058デフォルトの名無しさん2008/10/12(日) 23:07:57
>>50
一応コンパイルは通りそうだが?
0059デフォルトの名無しさん2008/10/12(日) 23:30:21
>>58
あー確かにコンパイルは通るね。ダメダメなことに変わりはないけど。
0060デフォルトの名無しさん2008/10/13(月) 00:02:27
>>50みたいなやつはほっといていい
0061デフォルトの名無しさん2008/10/13(月) 22:44:34
VC++2005 EE使用
fatal error C1083: include ファイルを開けません。'iostream.h': No such file or directory
というエラーが出ます。
VC++2005EEをインストールしただけじゃだめなのでしょうか?

ソースは↓です。
#include <iostream.h>

int main()
{
cout << "テスト" ;
return 0;
}
0062デフォルトの名無しさん2008/10/13(月) 22:53:03
>>61
君は浦島太郎だ。今のC++に<iostream.h>は無くなった。

#include <iostream>

int main()
{
std::cout << "テスト" ;
return 0;
}
0063デフォルトの名無しさん2008/10/13(月) 23:20:34
>>62
正常に実行できました。
ありがとうございます。
参考にしていたサイトが古かったので、浦島太郎でした。
0064デフォルトの名無しさん2008/10/14(火) 07:52:07
[質問]ファイルを開けない
[環境]VC++2005

TCHARで開くファイル名を指定して TEXT("\\Data\\foo.jpg") と
しているが、CreateFileでファイルを開くことができない。

以下、プロジェクトをhogeとしている場合のフォルダ構成。
hoge.sln
hoge.ncb
hoge.suo
+[debug]
+[hoge]----+[Data]---foo.jpg
+[Source]---main.cpp
その他ソースコード

※プロジェクトのプロパティ>C/C++>追加のインクルードディレクトリ
で、SourceフォルダとDataフォルダを追加している。
Dataフォルダの追加を行っているが、これはコンパイルするときに
読み込むもののみに有効?
※foo.jpgを[hoge]フォルダ直下においた場合は読み込める。
0065642008/10/14(火) 07:58:48
>>64です。
すんません、フォルダ構成記述ミスりました。

<最上位階層>
hoge.sln
hoge.ncb
hoge.suo
+[debug]
+[hoge]

<hoge階層>
+[Source]
+[Data]
hoge.rc
hoge.vcproj
hoge.ico

<Data階層>
foo.jpg //こいつを読み込みたい

<Source階層>
main.cppなどなどその他ソースコード

0066デフォルトの名無しさん2008/10/14(火) 09:25:21
ネットワークプログラムって一体どんなことに使うんですか?
本を読んでもUNIXの鯖がどーたら
で全然意味がわかりません。

鯖を共有メモリにするってことですか?
0067デフォルトの名無しさん2008/10/14(火) 09:53:36
>>66
釣りだろ!?
釣りだと言ってくれッ…!
0068デフォルトの名無しさん2008/10/14(火) 10:41:33
>>66
ネットワークプログラムなしにネットワークを使えると思っているのですか?
あなたか書き込んでいるここはいったい何だと思って・・・
0069デフォルトの名無しさん2008/10/14(火) 15:29:42
ここというか、書き込んでるプログラムは一体何か、というところだな。
0070デフォルトの名無しさん2008/10/14(火) 22:58:00
成績をつけるプログラムを教えてほしいです。

80点以上100点以内 A
65点以上80点未満  B
50点以上65点未満  C
0点以上50点未満   D

それ以外の整数に対しては「ありえない」と出す

0071デフォルトの名無しさん2008/10/14(火) 23:13:51
>>70
C/C++の宿題を片付けます 116代目
http://pc11.2ch.net/test/read.cgi/tech/1222813731/l50
0072デフォルトの名無しさん2008/10/21(火) 09:35:45
関数かconstで宣言されていると
内容も変更しないという意味だったっけ?

たとえば
void Map_Class::second(std::map<std::string, int>& m) const {
のようなメンバ関数があったとすると
このメンバ関数の中では値を変更しちゃいけないんだっけ?
0073デフォルトの名無しさん2008/10/21(火) 11:33:31
>>72
いいえ、メンバ関数内でメンバ変数を変更できないだけです。
その例ではmを変更できてしまえます。
0074デフォルトの名無しさん2008/10/21(火) 14:23:21
>>73
では、何のための const なのでしょう?
0075デフォルトの名無しさん2008/10/21(火) 14:33:49
>>74
Map_Class自体がconstの場合のため。

std::map<std::string, int> m;
const Map_Class map_class;
map_class.second(m);

secondがconstでなければ呼べない。
map_classはconstのため変更不可だが、mはconstではないので変更可。
0076デフォルトの名無しさん2008/10/21(火) 14:33:55
>>74
だから、メンバー変数を変更しないという意味でconstでしょ。
0077デフォルトの名無しさん2008/10/22(水) 21:04:59
プログラムのデータ構造、つまり構造体をバリバリ使いまくるか
オブジェクト指向で汎用性を高くもたせるか迷ってます

構造体バリバリで書くと後のソースいじるときに大量のソースになり
保守するのが難しくなりやすいのと

オブジェクト指向で書くと汎用性を維持するためのコードで複雑になりやすく
これまた保守が難しくなりやすいかと考えています

どちらの手法で組んでいくか、また、別の手法があるかアドバイスいただけませんか?
0078デフォルトの名無しさん2008/10/22(水) 21:09:15
それは、どっちでも極端過ぎるとだめだよ、ほどほどにバランスをとりなさいという教訓。
0079デフォルトの名無しさん2008/10/23(木) 07:52:12
>>73
mapを変更したくないなら、
void Map_Class::second(const std::map<std::string, int>& m) const {
のようにmをconst参照にすればよい
すると、second内ではmのconstメンバー関数しか呼び出せなくなる。
0080デフォルトの名無しさん2008/10/23(木) 07:52:50
アンカー間違えた
>>73 → >>74
0081デフォルトの名無しさん2008/10/23(木) 13:51:51
簡単なゲームを作っているのですが、今まで使っていたアイコンは32×32だったので、それを16×16のサイズにしようと思い、そのサイズの画像を取り込んだら、32×32のサイズに拡大されて表示されてしまうのですがどうしたらよいのでしょう?
アイコンファイルってサイズ指定するとこないですよね?
Visual C++です。
0082デフォルトの名無しさん2008/10/23(木) 13:53:21
今はどうやってるの?
LoadImageならサイズも指定できるよ。
0083デフォルトの名無しさん2008/10/23(木) 16:34:30
最近、C++を使うことになったのですが、
下記のクラスの定義で、<RTC::TimedLong>の部分の意味が分かりません。
(山カッコの使い方が分からないです…)
よろしくお願いします。

class Multiply
  : public RTC::OnWriteConvert<RTC::TimedLong>
{
   :
   :
};
0084デフォルトの名無しさん2008/10/23(木) 16:47:00
クラステンプレート
0085デフォルトの名無しさん2008/10/23(木) 16:55:20
>>84
理解できました。
有難うございます。
0086デフォルトの名無しさん2008/10/23(木) 17:07:02
は、はやいな
0087デフォルトの名無しさん2008/10/23(木) 18:51:43
>>82
HICON ico;
ico = AfxGetApp()->LoadIcon(IDI_ICON1);

って感じで読み込んでます。
0088デフォルトの名無しさん2008/10/23(木) 18:53:45
とてつもなく漠然とした質問で申し訳ないのですが,
例えば,

class Hoge
{
public:
int compute( int x, int y );
}

というクラスがあったとしたら,
xとyは,メンバ変数とするべきか否か,
その判別の基準って何かありますか?
0089デフォルトの名無しさん2008/10/23(木) 18:56:56
>>87
MFCなのね。つい最近似たような事例を書いた気がするが・・・

HICON ico;
ico = (HICON)::LoadImage(AfxGetInstanceHandle(), _T("test.bmp"), MAKEINTRESOURCE(IDI_ICON1), 16, 16, LR_LOADFROMFILE );

こんなんでどう?
つか、元のアイコンは16x16なの?
VSで編集時にイメージメニューから複数のサイズ、色数のアイコンが追加できるけど、それでやってる?
0090892008/10/23(木) 18:57:32
test.bmpは消してくれ、残ってた
0091892008/10/23(木) 18:58:21
あと最後のパラメタもLR_DEFAULTCOLORだな、複数試してたからつい・・・
0092デフォルトの名無しさん2008/10/23(木) 22:01:38
VC++ 6.0 で下記ソースのコンパイルがエラーとなります。
解決方法は見つけたのですが、
なぜ怒られるのか、わかりません。
理由が分かる方教えてください。

メンバ変数としてクラスを宣言して、
そのクラス名と同じ名前の関数を定義すると怒られます・・・。
----------------------
class Hoge {
};

class Niko {
public:
  Niko();
  ~Niko(); 
  void Hoge();
  Hoge hoge;  // NG
};

↓↓↓↓↓

class Niko {
public:
  Niko();
  ~Niko();
  Hoge hoge;  // 何故か入れ替えるとOK
  void Hoge(); // もしくは ::Hoge hoge; とすることでもOK
           // または Hoge2()など、別名にすることでもOK
};
Hoge()はNikoのメンバ関数のつもりですが、
Hogeクラスのコンストラクタとして解釈されている???
0093デフォルトの名無しさん2008/10/23(木) 22:24:15
>>92
上では、Niko内でHogeという名前を使うと、
最も内側にあるvoid Hoge();に解決され、それは形名でないのでエラー。

もっとも、そういう風にメンバの順番を替えるだけでエラーになったりならなかったりしては
混乱間違いなしということで、下のコードも本来はエラーになる。
(Hoge hoge;で外側のHogeを使っておきながら、後からメンバ名にHogeを持ち込んだという罪状)

::Hoge hoge;と外側の名前を使うことを明示するか、Hoge2などと別の名前にするのが正しい。
その場合hogeとHoge()のどっちを先に書いてもいい。
0094922008/10/23(木) 23:35:14
>>93
なるほど・・・名前解決ができないのですね。
以下のメンバの再定義によるエラーと同じと解釈しました。
---------------
class Fuga {
public:
 int ABC;
 void ABC(); // エラー
};
---------------
ちなみにおっしゃるとおり、gccでコンパイルしたら、入れ替え技も怒られました。
(グローバルスコープおよび、別名にするのはOKでした。)

コンパイラの警告文が違ったので、嵌ってしまいました・・・。
ありがとうございます。
0095デフォルトの名無しさん2008/10/25(土) 12:42:40
起動するたびにランダムな数字をえたいのですが
ちょっと忘れてしまったので聞きたいのです

srand( ??? );

の ??? の部分って時間を指定するハズだったのですが
何の関数でしたっけ?
0096デフォルトの名無しさん2008/10/25(土) 12:45:02
time
0097デフォルトの名無しさん2008/10/25(土) 12:46:03
srand((unsigned)time(NULL));
0098952008/10/25(土) 12:47:17
解決しました
ありがとうございました
0099デフォルトの名無しさん2008/10/25(土) 19:05:20
連立方程式アルゴリズムの質問です
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/GaussJ.htm
と書いてありますが手元の資料では三角行列を作ってから後退代入で求めると書いてあります
サイトのほうが考えやすいんですがなぜこのようにやるのかおしえてください
やはり速度でしょうか?お願いします
0100デフォルトの名無しさん2008/10/25(土) 19:40:10
C/C++ DirectX で小規模なゲームを作ろうかと思っています
そこで関数や変数の命名規則を決めたいのですが、
実務経験がないため、まったく分かりません
参考になるようなサイトでもないでしょうか?
0101デフォルトの名無しさん2008/10/25(土) 21:24:45
01234を
00000
00001
...
44443
44444
って表示するプログラム書いたんだけど、
そもそもSTLにある?
あと、これ何て言う並び方だっけ?
0102デフォルトの名無しさん2008/10/25(土) 21:28:45
cc でスタティックライブラリをビルドしたいんですが、

cc -c -I../header ../src/hoge1.c
cc -c -I../header ../src/hoge2.c
cc -c -I../header ../src/hoge3.c
ar -r lib.a hoge1.o hoge2.o hoge3.o
ranlib lib.a

と同等のことを Makefile ではどうやってかけば良いのでしょう?
0103デフォルトの名無しさん2008/10/25(土) 21:31:37
>>100
何故先人の知恵を利用しないのか。
http://www.google.co.jp/search?q=%96%BD%96%BC%8BK%91%A5
0104デフォルトの名無しさん2008/10/25(土) 21:32:37
>>101
アルゴリズムによる
0105デフォルトの名無しさん2008/10/25(土) 21:41:52
#include <stdio.h>

void main()
{
for( int i=0; i<10; i++ )
printf( "%d\n", i );
for( int i=0; i<10; i++ )
printf( "%d\n", i );
}

これって VC++6 だとコンパイルエラーなんだけど
最新のはOKなのですか?
0106デフォルトの名無しさん2008/10/25(土) 22:04:41
>>105
OKだよ。
そしてVC6のおまじない。
#define for if (0) ; else for
0107デフォルトの名無しさん2008/10/25(土) 22:09:21
>>101
重複順列だな。
探したことあるけど、STLにはないから自分で作るしかない。
重複しない順列なら next_permutation があるんだけど。
01081012008/10/25(土) 22:48:09
>> 107

thx !
0109デフォルトの名無しさん2008/10/26(日) 00:37:12
>106
それって何してるの?
0110デフォルトの名無しさん2008/10/26(日) 00:41:09
forをif (0) ; else forに置換
0111デフォルトの名無しさん2008/10/26(日) 00:42:09
>>109
>>105のようなコードがVC6でも通るようになる。
原理はifの真側とelse側でそれぞれスコープが作られることの利用。
もちろん規格準拠な処理系では無害。
0112デフォルトの名無しさん2008/10/26(日) 01:17:18
char *s;
s = fgets(linebuffer, BUFFERSIZE, inputfile);
if (s == NULL) {
break;
}

こんな記述があったのですが、コレって大丈夫なんですか?
fgets()って、文字列の先頭ポインタを返すので、sには入ると思うのですが、
fgets()が取り出した文字列自体はどこにあるのですかね??
0113デフォルトの名無しさん2008/10/26(日) 01:27:28
つman fgets
> gets() and fgets() return s on success, and NULL on error or when end of file occurs while no characters have been read.
標準ライブラリの関数はとりあえずmanを嫁。

linebufferのアドレスを先頭アドレスとしたBUFFERSIZE分の長さの配列があると仮定して書き込む。
んで、returnで成功したかどうか判別している。
0114デフォルトの名無しさん2008/10/26(日) 11:46:42
#include <stdio.h>

int i;
void main()
{
int j;
printf( "%d\n", i );
printf( "%d\n", j );
}

この結果が
0
-85899346
になるのですが
グローバル変数 int i は初期化しなくても 0 になるということは
保証されているのでしょうか?
0115デフォルトの名無しさん2008/10/26(日) 12:20:25
>>114
ええ、保証されます。
0116デフォルトの名無しさん2008/10/26(日) 14:26:35
>>115
ありがとうございます
0117デフォルトの名無しさん2008/10/26(日) 14:29:16
>>113
ありがとうございます!
0118デフォルトの名無しさん2008/10/26(日) 17:36:11
>>120
ありがとうございます
0119デフォルトの名無しさん2008/10/26(日) 17:48:56
>>119
ありがとうございます
0120デフォルトの名無しさん2008/10/26(日) 19:02:49
>>118
いえいえ、どういたしまして。
0121デフォルトの名無しさん2008/10/26(日) 19:55:47
>111
なるほど、スコープを作ってやるワケか。
そしてVC6ってforの初期化部でスコープ作らないのか…ガクブル
0122デフォルトの名無しさん2008/10/26(日) 20:27:54
forのスコープが有効になったのは後になってからだからな
2003でもデフォルトは同じ。オプションでかえられるけど。
■ このスレッドは過去ログ倉庫に格納されています