- 1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ]
- このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。 質問する前には最低限検索を。 エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。 C FAQ 日本語訳 www.kouno.jp/home/c_faq/ Cプログラマ必読 ・プログラミング言語C(通称 K&R) www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244 他の過去ログはここに nssearch.hp.infoseek.co.jp/clang/ 前スレ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 pc10.2ch.net/test/read.cgi/tech/1159613789/ GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は 専門の別スレッド↓があるのでそこへさようなら。 【初心者歓迎】C/C++室 Ver.34【環境依存OK】 pc10.2ch.net/test/read.cgi/tech/1169039760/ C/C++の宿題を片付けます 82代目 pc10.2ch.net/test/read.cgi/tech/1169575464/
- 237 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 07:58:04 ]
- >>233
qsortはクイックソートではない 内部でどういうアルゴリズムで実装されててもいいことになっている そういうわけで、a==bに対して非0を返すと、ソートが終わらなくなる可能性がある。
- 238 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:12:54 ]
- >>236-237 >>235
- 239 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:42:20 ]
- >>235
ああ、なるほど。流れはわかった。 が、intを返すのってそんなにまずい設計か? ちょっとその辺の説明が欲しい。 むしろループの中で何度も呼ばれる関数なわけで、 intを返すのは性能の観点から当然の選択だと思うけどな。
- 240 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:46:49 ]
- >>239
>>221 がまずいって言い出したから、みんなで何がまずいんだよって叩いてる流れ
- 241 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:54:11 ]
- 三値を返すのが不味いんだろ。型が問題なわけじゃない。
- 242 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 09:29:51 ]
- ネーミングから誰でも一度はする誤解だよな>qsortはクイックソート
- 243 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 10:31:22 ]
- 要は、整数の比較関数を減算で行なうサンプルが問題なんだろ。
- 244 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:23:16 ]
- 値の差が INT_MAX を超えるとアウトだからね…
- 245 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:57:11 ]
- まぁ必ずしも必要とは限らないのに、比較が2回必要な3値の関数を
求める仕様は糞と言ってもよいだろうな。
- 246 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 13:03:14 ]
- 必要なソートアルゴリズムもあるから、そうなってるんだろ
- 247 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 13:12:03 ]
- >>237
×qsortはクイックソートではない ○qsortはクイックソートとは限らない
- 248 名前:デフォルトの名無しさん [2007/03/13(火) 15:20:00 ]
- strcatを使用しないでchar型配列(str1とstr2)を連結したいのですが、
文字列str1の最後の'\0'に文字列str2の0からを一つずつ代入していけばいいのは 分かるのですが、やり方がわかりません。 どうすればできますか?
- 249 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 15:22:36 ]
- マルチすんなアホ
- 250 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:15:26 ]
- >>242
というかクイックソートを念頭に置いて名付けたんだろ。 単にこのスレ的にそう決めつけるのは誤ってるってだけで >>244 実際の差を返す必要はないでしょ? 必要なのは符号だけで
- 251 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:17:15 ]
- >>250
おまえは何もわかってないな
- 252 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:22:59 ]
- >>250 後段
いちいち言われんと解らんのか。 >>213
- 253 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:42:38 ]
- なんで>>250の後段が>>213に関連してくるのかわからん。
誰か解説してくれ。
- 254 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:52:19 ]
- >>213の意味がわからんて事?
- 255 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 22:22:01 ]
- >>250 の意味が分かってもらえてないって事だろ。
- 256 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:21:36 ]
- >>213
なんでオーバーフロー起こすか解説きぼん
- 257 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:25:00 ]
- 問:負の数が弐の補数の処理系において、
*a=0, *b=INT_MINの場合、どうなるか?
- 258 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:35:24 ]
- >>246
>>236を読め。2値さえ貰えれば十分のはずだから。
- 259 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:29:02 ]
- ダメだこりゃ。
- 260 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:32:05 ]
- >>213なんて分かりきった上で、全然別の次元の話をしているだけなのだが?
- 261 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:41:12 ]
- INT_MINの符号反転はINT_MINのままだから
int a = 0; int b = INT_MIN;のとき >>210だと cmp(&a, &b) < 0となってしまうのでダメってことか で>>220だと cmp(&a, &b) > 0となり正しいと。
- 262 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:47:31 ]
- >>250=256=260
だと最高なんだがなーw
- 263 名前:デフォルトの名無しさん [2007/03/14(水) 01:58:02 ]
- 450Kのコードっていったらどれくらいの規模のこと?
45万行ってこと?
- 264 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:01:41 ]
- 450KiBかも知れず。
- 265 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:18:51 ]
- >>262
違うよ。いつまでもそんな下らない話題引っ張られても邪魔だから 引っ込んでろといってる。
- 266 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:21:24 ]
- stdc++のstd::sort()もソートアルゴリズムを指定していない点では同じだが
要求しているのは2値のPredicateだ。 何度も繰り返すが、3値のPredicateは要らないんだよ本来は。 整数のオーバーフローとかいう低レベルの下らない話とは全然別問題。
- 267 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:36:11 ]
- >>266
なんでここで全然関係のないstdc++が出てくるのかわからんがな。 規格においてqsortは安定でないことになっているから、 本来は3値も要らず、2値で十分てことだろ。
- 268 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:46:23 ]
- >>267
実際には順序付け集合に対する2値の述語関数があれば、 3値と同等のことは実現できる。だから、仮に3値が必要な場合であっても 2値の述語関数で十分なの。 >>236を読めよ。
- 269 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:59:52 ]
- 結論:
比較関数をいっぱい呼びたい奴はC++を使っとけ
- 270 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:38:34 ]
- >>268
まったくだ。ifとwhileだけで構造化は実現できるのにforなんて無駄きわまりないな。 breakやcontinueなんてもっての他だ。gotoやlongjmpに至っては(ry
- 271 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:47:10 ]
- >>270
意味不明。馬鹿じゃないの。 構造化のための構文は*ユーザにとって*便利であり *ユーザが*見通しの良いプログラムを書くのに役に立つ。 2値の述語関数で十分なのに3値の述語関数を要求するのは *ユーザにとって*便利でも何でもないし、 それによって効率があがりもしない。 結局3値の比較が*実際に*必要である箇所では、比較が2度必要になるからだ。 しかし、3値の比較を*常に*ユーザ側に求めた場合、実際には必要でない 箇所でも2度の比較を行う羽目になる。 つまり、不便なだけでなく、効率が悪くなるのだ。 それはライブラリ側の怠慢であり手抜きであり仕様の欠陥でしかないよ。
- 272 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:47:59 ]
- >>270
まったくだ。lambdaさえあれば他になにも(ry
- 273 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:56:40 ]
- >>269
アホか。C++のほうがはるかにソートを楽に記述できる。
- 274 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 06:00:15 ]
- 順序集合をソートする場合において、等値かどうかの比較が常に必要とは
限らないんだが、 わざわざそれを常にユーザに強いているのがCのqsort()の仕様。 C++のstd::sort()の場合は、そんな馬鹿なまねはしない。必要な場合は、 そして必要な場合のみに限って、2値のPredicateだけで等値かどうかの 判定をできるからだ。
- 275 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 06:59:21 ]
- そして、2値を返すなら、compの素直な実装方法による
オーバーフローがどうこうという面倒な話も発生しない。
- 276 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 07:34:36 ]
- Perlにはsortのために(としか思えない)わざわざ3値比較のための
演算子なんてものが用意されてるよね。 <=> とか cmp とか。これは笑ってしまう。
- 277 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 08:02:25 ]
- それはここでやる話じゃないだろ。
- 278 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 09:12:15 ]
- ここまで読んだ
とりあえず論点が完全にズレたまま進行してることはわかった
- 279 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 20:42:33 ]
- いつまでソートの話してんだよ。
- 280 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:31:47 ]
- 例えば以下のような構造体をファイルで宣言した時
初期値として、 hoge.bar == NULL と hoge.foo == NULL は保証されているのでしょうか? struct { char *bar; char **foo; } hoge;
- 281 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:33:29 ]
- されるわけないでござる
- 282 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:40:01 ]
- え?その定義ならされるだろ。
まさかあれか、全ビット0がNULLとは限らないというあの流派か。
- 283 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:43:23 ]
- 自動変数でも?
- 284 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:56:14 ]
- 大域変数か静的変数なら初期化される。
ゼロフィルではなく、全てのメンバが0に。
- 285 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:01:03 ]
- ファイルで宣言ってのは、自動変数説を否定している、と俺は見たが。
関数で宣言、なら自動変数かもね。 深読みしすぎといわれればその通り。
- 286 名前:デフォルトの名無しさん [2007/03/14(水) 22:06:00 ]
- C言語初心者です。
「C言語プログラミング能力認定試験」って取るメリットありますか?
- 287 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:09:52 ]
- スレ違いだよ
1級ならまだ許せるけど、履歴書に2級とか書かれたら(´,_ゝ`)プッ
- 288 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:16:35 ]
- 私はまだ何も分からないのですが
プログラミングをするにあたってまず何をそろえて何をすればいいんでしょうか?
- 289 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:19:21 ]
- >>288
MSのサイトからコンパイラをダウソ。
- 290 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:21:24 ]
- まずはパソコンを買うことから始めます。
- 291 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:24:13 ]
- >>288
ボーランドコンパイラかVisual C++ Express。どっちも無料 インストール後、適当にPATH通せ
- 292 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:29:36 ]
- Knoppixをお勧めしてみるテスト
- 293 名前:288 mailto:sage [2007/03/14(水) 22:49:47 ]
- Visual C++ Expressのダウンロード及びセットアップ完了しました。
- 294 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:22:34 ]
- >>280
「ファイルで」というのが「関数の外で」宣言されたという意味なら、される。 この初期化は、配列でも構造体でも、全ての要素について「=0」と書いたかのように行われる。 よって不動小数点数は0.0に、ポインタはヌルポインタに正しく初期化される。 >>293 入門書を買って言語仕様を覚えろ。
- 295 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:27:15 ]
- 関数内でもstatic付けた静的変数ならやっぱり0初期化される
- 296 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:19:35 ]
- >よって不動小数点数は0.0に、ポインタはヌルポインタに正しく初期化される。
大間違い。
- 297 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:39:01 ]
- >>296
俺は294じゃないけど間違いというならその理由を示してよ。 K&R A8.7初期化 より引用 > 明示的に初期化されない静的オブジェクトは、それ(あるいはそのメンバー)に定数 > 0が代入されたかのように初期化される。明示的に初期化されない自動オブジェク > トの初期値は、不定である。
- 298 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:52:49 ]
- >>297
根拠を示さず「大間違い」とだけ言うのは小学生だってできる。 無視してかまわんだろう。
- 299 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:53:35 ]
- >>297
知らんがたぶん、>>282 じゃないのかな
- 300 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:59:15 ]
- >>299
違う。
- 301 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:00:15 ]
- >>299
>>297が示している通り、プログラマーが =0 と書いたのと同じように初期化される。
- 302 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:01:03 ]
- >>299
関係ないでしょ。だって void *p = 0; と書いてあるように初期化されるんでしょ。 これはpには全ビットが0の値が入るのではなくて、 NULLポインタが入るんだよ。
- 303 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:01:37 ]
- 段階を追って詳しい説明になっていくのにワラタw
- 304 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:02:24 ]
- ゼロフィルで済む処理系ならBSSをロードする時に全部ゼロ埋めするだけだが、
それで済まない処理系で規格を満たすためには、初期化専用のコードを コンパイラが吐き出して、スタートアップルーチンで呼ばれるようにする んだろね。 なんかC++みたいだなw
- 305 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:06:45 ]
- 不動じゃなくて浮動だろと言うつっこみだったんだよ!たぶん
- 306 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:07:23 ]
- >>302
それ実は俺もずっと気になってたんだけど ポインタに0代入したらそれはNULLポインタと等価なの? というか全ビット0がNULLとは限らない処理系ってあるの?
- 307 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:09:10 ]
- >306
CFAQには、そういう処理系も実在すると書いてあったよ
- 308 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:11:14 ]
- というか
ヌルポインタの内部表現が未既定なのも ポインタがくるべき場所に整数定数0を書いたらヌルポインタに変換されるのも 規格がそう定めているからであって、そのような処理系が実在するからではない
- 309 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:15:45 ]
- >>306
> ポインタに0代入したらそれはNULLポインタと等価なの? Yes. ポインタの文脈では0はいつでもnull pointer constantとして扱われる。
- 310 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:16:21 ]
- ポインタに「値が0の整数定数式」を代入したり、(暗黙にでも)比較したりしたときは、
コンパイラが整数定数0を正しいヌルポインタの値に変換する。 値が0である整数変数を代入する場合はこれにあてはまらない。 あくまで定数だけである。
- 311 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:25:21 ]
- >>305
なっとく。
- 312 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:27:00 ]
- >>280が変数宣言を書けば、こんなにモメなかったろうにw
ぶっちゃけauto変数以外はリンカーがプログラムに引っ付けて実行形式で出力する。 実行するとローダーがフォーマットに従い元通りに展開してくれる auto変数で使うスタック領域もローダーがフォーマットに従いサイズ分用意してくれるが、 0クリアする決まりが無いので未初期化として扱うのが決まりになってる。 ROMで実行されるプログラムでない限りは、こんな覚え方でいいような気がする。
- 313 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:29:48 ]
- NULLの定義が
#define NULL 0 #define NULL ((void*)0) 以外の処理系って見たことある? 俺は無いけど。
- 314 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:32:02 ]
- >>312
BSS(未初期化のstatic変数を格納する領域)も実行形式に 埋め込む処理系は少ないのでは。 スペースの無駄だからね。
- 315 名前:306 mailto:sage [2007/03/15(木) 01:37:05 ]
- 物凄い参考になった。皆thx
- 316 名前:313 mailto:sage [2007/03/15(木) 01:39:15 ]
- ちなみに俺はC++の癖でCでもNULLと書かずに0と書いてしまう。
- 317 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 02:15:30 ]
- >>313
最近のgccとかは __null とかになってなかった?
- 318 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:16:08 ]
- そうだと困るハードがあるからNULLが0x00000000とは定めてないわけだよねぇ?
- 319 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:17:01 ]
- >>316
構わないと思う。
- 320 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:27:38 ]
- >>318
ハードにかかわらず、NULLを整数値として評価した場合は 0 として評価されるって規格で定められてたと思うけど。
- 321 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:43:29 ]
- >>320
あ、いやNULLの番地がって意味で
- 322 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 05:00:16 ]
- NULLを使わず0で初期化してる人がいるようだけど
俺したこと無い。 例えば int *foo = 0; とか typedef struct{ int a; char *p; }hoge; hoge *ho = 0; とかしちゃったりするの?
- 323 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 05:01:38 ]
- >>322 もちろん。
- 324 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 05:06:01 ]
- 標準ライブラリに含まれてる型名って、ファイルスコープの名前だから
関数ローカルや構造体メンバでその名前使っても問題ないよね? jmp_buf とか va_list とか、マイナーなやつをうっかり使ってしまうことが 無いとは言えないんで、エディタのキーワードハイライトに全部 突っ込んでおこうかと思ったんだけど、よくよく考えたら ファイルスコープでやらかさなけりゃ全然問題ないんじゃないかと。
- 325 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 08:35:49 ]
- >>313
DOSでラージメモリモデルの環境では0Lになっていると思う。 少なくともLSI C-86のヘッダではそうだった。
- 326 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 08:38:48 ]
- >>324
いや、それらはグローバルなので問題ありまくり。 衝突を避けたければ、ユーザコードの名前に特定のPrefixを付けるといった 規約を考えたほうがよい。
- 327 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 09:54:39 ]
- >>326
jmp_buf なんて何の規則も無い名前との衝突を避けようと思ったら、 関数ローカルや構造体メンバに int a; とすら書けないと思うんだが、 正気か?
- 328 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:22:35 ]
- >>327
は? 構造体タグ名、変数名、メンバー名は別の名前空間に属するから、 そのような例で同一の名前を用いても問題が生じるわけがないよ。
- 329 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:22:58 ]
- >321
単に「NULL」という言葉を「ヌルポインタ」という意味で使うと誤解を招きかねないのでやめたほうがいい マクロNULLとヌルポインタは別のものであるから、区別できるように書くべき
- 330 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:27:24 ]
- >>328
元の質問 >324 がそう言って「問題ないよね?」って聞いたのに対して >326 が「問題ありまくり」と返しているんだが。
- 331 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:30:11 ]
- >>330
同一の名前空間で同じ名前を重複させたら当然問題あるでしょ。 あなたがC言語の仕様に対する無知によって、的外れな例を挙げただけ。
- 332 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:40:58 ]
- >>331
構造体メンバは問題が生じるわけないってことか? なら残りはローカル変数ってことでいいかい? ファイルスコープの typedef である jmp_buf の名前空間は ローカル変数といっしょで変数名だよね? でもローカル変数ならスコープが重なるだけなんで、ライブラリの jmp_buf を使うつもりじゃなくてうっかり(知らずに)ローカル変数名として 使っただけなら問題ないんじゃないの? どうせ内側で宣言されたローカル変数しか参照しないんだから。
- 333 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:43:47 ]
- >>332
ヒント: 他人にものを聞く態度 >>336を読まなかったのかい? jmp_bufは「ファイルスコープ」の名前ではありません。
- 334 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:52:50 ]
- typedef名と変数名の名前空間も別物です。
だから、 typedef int i; i i; のようなコードも合法。良いスタイルではないけどね。
- 335 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:11:43 ]
- >>333
「ファイルスコープ」じゃなくて「グローバルスコープ」って言いたいの? ISO C99 の最新ドラフトを見てしゃべってるんだが、規格には 「グローバル」なんてスコープは無いよ。 6.2.1 で列挙されてるのは "file scope", "block scope", "function prototype scope" の3種類だけ。 "global scope" で 検索してもひとつもヒットしない。なので >326 の言ってる 「グローバル」ってのはファイルスコープのことだと思った。
- 336 名前:333 mailto:sage [2007/03/15(木) 11:14:40 ]
- >>335
あーごめん。嘘ついたかも。 リンケージまで考えるとファイルスコープって一般にstaticなオブジェクトのこと を指すと思うんだけど、今は名前の話だったな。ごっちゃになってたわ。
- 337 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:16:45 ]
- 「C99 の最新ドラフト」はおかしいな。
>>334 で、同じく ISO C の最新ドラフトから、 6.2.3 に列挙されてる 名前空間は、ラベル名、タグ名、メンバ名、その他の4つ。 変数名も typedef 名も最後のその他で同じ名前空間です。 どんなコンパイラがそのコードを受け付けてくれるの? 手元の gcc ではやっぱりエラーになるよ。 :2: error: 'i' redeclared as different kind of symbol :1: error: previous declaration of 'i' was here
|

|