1read 100read
2012年6月プログラム11: C言語なら俺に聞け(入門編)Part 103 (335)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
理系しねよ (201)
文字コードの種類は何故複数あるのでしょうか? (339)
HelloWorld集めようぜ (209)
MSX-BASICの奥義を伝授するスレ (762)
マならMicrosoft嫌いだよな? (727)
VB6でLinuxを作る方法を教えてください!! (203)
C言語なら俺に聞け(入門編)Part 103
1 :12/06/30 〜 最終レス :12/07/05 C言語の入門者向け解説スレッドです。 ★前スレ C言語なら俺に聞け(入門編)Part 102 http://toro.2ch.net/test/read.cgi/tech/1338365782/ ★過去スレ http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 158代目 http://toro.2ch.net/test/read.cgi/tech/1339338438/ ★C++言語については避けてください。C++対応明記スレへどうぞ。 ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。 # サイズが大きい場合はアップローダ等を利用してください。 http://codepad.org/ http://ideone.com/ ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
2 : 俺はゴミカスだ よく覚えておけ
3 : はい
4 : 2 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん なんだいきなり
5 : externを書かない場合があるのをいい加減なと言っていた人が前スレでいたが、 externについては省略が許容されてるので、書こうが書くまいが何も変わらない。
6 : extern = public
7 : >struct A {int a}; > >main() >{ >struct A __i686; >__i686.a = 686; >} 普通にエラーだろ。
8 : ふにゃ〜
9 : 4byte int型に値を入れて、char型のポインタを使って1byteずつ参照したときに 範囲外を参照したときに長いバイト列が表示されるのはなぜでしょうか 初期化されていようが無かろうが、指定アドレスから1byte長の値を読み込むものだと思うのです。 int x = 300; (0x12c、 バイナリ 2C 01 00 00) char* p = (char*)&x; printf("%#x",*(p+4)); 出力 0xffffffcc
10 : >>9 unsigned char にしようぜ
11 : printf(…,p[4]&0xff); と書くべき棚
12 : >>9 void main(){ printf("%d" , sizeof(char*) ); } 初心者はいい加減にしろ
13 : #include <stdlib.h> int main(int argc, char *argv) { printf("uy is stupid.\n"); return(0); }
14 : >>12 ゴミカスは引っ込んでろ
15 : wchar_tのデータを改行で分割して1行ずつ処理していきたいのですが、 使用関数はwcsncmpでしょうか?
16 : 窓屋さん、お呼びだ
17 : >>10 >>11 すみません、たしかに上手くいったんですけど何がいけなかったんでしょう?
18 : >>7 アンスコで始まる識別子はシステムに予約されてる。 ユーザーコードでは使用してはならない。
19 : >>9 確保したバッファの外側を参照した時点で、どう動作しても仕方ないってのはある。 >printf("%#x",*(p+4)); はpをunsigned char*で宣言した上で↓が良いでしょう。 printf("%#hhx",*(p+4));
20 : >9,17 可変引数に対する暗黙の型変換が原因。 貴方はcharを渡しているつもりだろうが、コンパイラが最終的に 'int' に変換している。 ※例えば printf( "%x", (char)*(p+4) ); と書いたら、一旦charに変換された後intに変換される。
21 : もうちょっと補足しておく。リファレンスで printf を調べると基本的には↓のようになっているはず。 int printf ( const char * format, ... ); ご覧の通り第二引数以降は型が不明である。 これを踏まえて以下を考えていただければ、Cについての造詣が深まると思う。 ・引数に渡した値は、printfの内部にはどんな型として渡るのか? ・printf内部ではどうやって型を判断しているのか?
22 : >>20 char って、これが unsigned か signed かは実装依存だってことも、んー、陥穽ばかり‥‥‥。
23 : ありがとうございました 奥が深いです
24 : >>7 ,18 単にセミコロンが足りないってだけなんだが。
25 : >struct A {int a}; >struct A {int a;};
26 : 1バイトの-1を 4バイトに拡張したら どうなるかって話だろ。 -1 = FFh これを4バイトにしたら 000000FFh(255) ではなく FFFFFFFFh(-1) になる。 符号無しなら FFh = 255 だから そのまま 000000FFh となる。
27 : 円周率って世界中のPCを一斉に動かして分担処理させて解けば 何桁くらいまで求まりますか? 正しプログラミング言語はC言語とします。 コンピュータの数は1億台くらいとします。
28 : >>27 円周率の計算って並列化しやすい部類なんでしょうか?マチンの公式とかあんまりそんな感じがしないのですが。
29 : >>28 足し算でしょ? 並列化は簡単では? それぞれのコンピュータである項について足し算
30 : アンスコ=アンダースコート
31 : インスコ = インストール
32 : ブルスク ブルースクリーン ブルマ スクール水着
33 : 最近のPCはブルスクでねーな
34 : >27 何この小学生低学年レベルの質問。
35 : >最近のPCはブルスクでねーな マザボの初期不良でOSインストールで何度か。
36 : >>27 お前には円周率=3で充分
37 : sin(x)の区間の傾きをネズミ算ネットワークで細分化していけばいいんじゃないかな PI=(hの総和)*2/R
38 : >>37 いみふ
39 : >>27 3.1
40 : ねずみ算の結果、円周率は無限大に
41 : >>5 http://toro.2ch.net/test/read.cgi/tech/1338365782/983 MASMなんて誰もつかわないんだろうな‥‥‥
42 : あれはリンカがDEC FORTRAN互換の頃からある機能。
43 : MASMなんて使ってのは20年以上前だな。
44 : Qは老害だな
45 : へえ
46 : ただの知ったかぶりだろ
47 : >>27 厨房らしい質問だな
48 : π/4 = Σ( (-1)^n/(2*n+1) ) n=0〜∞ 円周率を求めるにはこの式を使えば並列計算に向けになる
49 : >>48 収束が遅い
50 : >>49 マジかよと思ってやってみたら n=1000000 までループ回しても小数点以下5桁までしか確定しない とんでもない収束の遅さだったwww
51 : 構造体でメンバに構造体のサイズを要求するようなAPIがありますが APIは何のために、どのように使うのでしょうか? typedef struct 構造体タグ { unsigned int サイズ; int ホゲ; } 構造体名; 構造体名 フー構造体; フー構造体.サイズ = sizeof(構造体名); みたいなことです。
52 : >>51 バージョン違いへの対応
53 : 比嘉ちゃんかわええ
54 : そうそうバージョンが上がって構造体の要素が増えたりした時用
55 : 構造体の内部構造はコンパイラが違っても同じになるのか?
56 : mallocで取ったのにかぶせるとき。
57 : >>46 http://toki.2ch.net/test/read.cgi/i4004/1295492625/324
58 : いまさらそんな本が必要だってことが知ったかぶりの証拠だって自分で認めてるの?
59 : >>58 それは「知ったかぶり」の定義を間違えているのでは?
60 : 知ってるか試すべき
61 : 最近知ったことをリアルタイムで知ってたかのように振舞うのも知ったかぶりだよ
62 : >>61 かりにその定義が妥当だとしてリアルタイムで知っている/知らないをどのように検証するの?
63 : くだらない
64 : ほんっと、くだらないね。
65 : >>5 ヘッダファイルで宣言するような場合だと、 関数の場合はextern無しで良くて、 オブジェクトの場合はextern無いと規格上は2重定義になって 未定義になるんじゃなかったっけ? どうだったかな。 突っ込みよろしく。
66 : >>65 >オブジェクトの場合はextern無いと規格上は2重定義になって 初期化を伴わなければ二重定義にならない。 つ tentative definition つ http://pc12.2ch.net/test/read.cgi/tech/1201153965/139
67 : C++だと関数でもextern必要だから書く癖つけた方がいいと思う。
68 : >>66 JIS X3010 6.9.2 外部オブジェクト定義 > 翻訳単位が、ある識別しに対する仮定義を一つ以上含み、 > かつその識別子に対する外部定義を含まない場合、 > その翻訳単位に、翻訳単位の終わりの時点での合成型、 > 及び0に等しい初期化子をもった識別子のファイル有効範囲の > 宣言が有る場合と同じ規則で動作する。 で、翻訳単位の最後に0初期化の初期化子を持った定義がある挙動をする、 と解釈した。 で、翻訳単位が複数に渡る分割コンパイルの場合、 それぞれの翻訳単位の最後に同じ定義が存在することになるので、 リンク時に2重定義になるのではないか、と解釈した。
69 : >>68 「その翻訳単位ごとに」 >翻訳単位の最後に0初期化の初期化子を持った定義がある挙動をする、 のではなくて、すべての翻訳単位がリンクした後に >翻訳単位の最後に0初期化の初期化子を持った定義がある挙動をする、 と解釈するのが妥当では?
70 : 解釈しなきゃあいけないような定義ってクソだろ 捨てろよ
71 : >>68 JIS ppppppppppppppppppppppppp
72 : >>70 意味は解釈するものである。
73 : #include <stdio.h> int main() { long long int a = (long long int)1 << 63; printf( "%lld", a ); return 0; } これを実行すると-9223372036854775808と表示されるはずですが、うちのgccでは0になります。何かオプションが必要なんでしょうか?
74 : >>73 %I64d
75 : >>69 いいえ そんな解釈してるのはお前だけ。
76 : >>73 うちのgccなら -9223372036854775808
77 : >>74 感謝 printfを調べればよかったんだな
78 : うちの man printf ではわからん
79 : >>69 それはない。 リンクしてしまった時点でそれは翻訳単位とは呼ばれないから。 それぞれの翻訳単位を翻訳する過程で仮定義の解決が行われる、 としか取れない。 気持ち悪い例を出せばあるバージョンのgccでは、 複数ファイルに同じグローバル変数の定義(仮定義じゃなく)があった場合 警告も出さすに1つのグローバル変数としてリンクした。 しかしpedantic-errorを指定するとエラーになった覚えがある。 なので例えばgccに限定すれば関係は無いのかも知れないが、 規格の上ではexternを付けて宣言し、定義は明示的に プログラム無いで1ヶ所に限定すべきだと思う。 「externなんて要らない」というのは環境に依存する話で 一般論としては言いし過ぎだろ。 もしくは規格に「同じ定義があった場合は1つにまとめる」というのがあって 俺が読み飛ばしちゃってるかのどっちか。
80 : 64って数字を入れるのは気持ち悪いよな
81 : >>79 単に一時的なバグだったんじゃねーの? > あるgcc
82 : >>79 > 規格の上ではexternを付けて宣言し、定義は明示的に > プログラム無いで1ヶ所に限定すべきだと思う。 「すべきと思う」ってどういう意味? 「規格上決まってる」のか「あなたがそうしたい」だけなのか? 規格でどう規定されてるかじゃなくて、あなたの文の意図を聞いてるんだけど。
83 : >>79 確かにこの点についての典拠はいろいろみているのですが、肯定否定とも今ひとつ決定打はないみたいです。 翻訳単位別に同じ名前の外部変数がダブって生成されるというのは不自然なのですが‥‥‥そんなコンパイラを禁止する規定はなさそう。 リンク時に外部識別子はなにはともあれひとつにまとまるのが嬉しいんですけれども、ああ困った困った。 >「externなんて要らない」というのは環境に依存する話で一般論としては言い過ぎだろ。 まあそうなんですけれども、先にあげた masm のこともあるし、宣言extern/定義public を使い分けるというのは、少なくとも c がアセンブラの慣わしから切り離されるのは、んー、そんな時代なのかな? また忘れたころに「extern は要らない子」と主張して肯定ないし否定の決定打を待つことにしましょうか。 自分で探せって?まあそうですけど。
84 : >>79 >複数ファイルに同じグローバル変数の定義(仮定義じゃなく)があった場合警告も出さすに1つのグローバル変数としてリンクした。 別々に初期化を明示していながらまとまるのは、確かにこれは気持ち悪い。
85 : やっと独習C読み終えた記念 1日で多いときに20ページくらいしか進まなかったから3週間くらいかかったー
86 : 初心者で勉強するだけならそんなもんでいいんじゃね
87 : T *ary[] (Tはtypedefされた)という仮引数を持つ関数があるのですが、これにconstをつけて ・配列の各要素として格納されているアドレスを変更したり配列の要素を並べ替えてはならない ・個々の要素であるアドレスが指す先のデータは変更してよい(むしろ変更したい) …つまり「配列が変更不可能なのであって、その中の要素が指す先は変更可能である」ということはできますでしょうか? 安直に const T *ary[] とすると「「const T *」の配列」と解釈されてしまうのか 関数内で T *item = ary[i]; としたときに「異なるconst修飾子です」と警告されてしまいます。 環境はVC2008です。
88 : T *item = (T *)ary[i];
89 : T * const ary[];じゃないの?とかいまさら。
90 : >>89 ありがとうございます、それみたいです! ちゃんと T *item = ary[i] では警告が出ず、ary[0] を変更しようとすると怒られました const がポインタ宣言の*と配列名の間に付けられるなんて想いもしませんでした…
91 : >>85 おめでとう、次は?
92 : 基本書一通り読み終えたら、後は自分でいろいろ書いてコンパイルしまくるだけだな
93 : やってみないと実感湧かないもんねえ
94 : 亀レスになったが。 Annex J (informative) Portability issues 5. Common Extentions J 5.11 に、複数の定義がある場合の動作は未定義ですとある。 未定義というのはエラーじゃないけど強適合するプログラムではやっちゃいけないということ。 J 5に書いてあるということは、広く使われている拡張があるということ。 例えば複数の定義に矛盾がなければ一つにまとめるなど。
95 : ぶひひ
96 : >>91 本来ならばもっとCについて学ぶべきなんだろうけどさっきからjavaに手を出している javaが終わったらc++、そも後にpythonかrubyやる予定 本当はObjective-CやりたかったんだけどMac持ってないから買うまでの間に一通りやっとこうと思って
97 : AppleのObjective-C処理系はちょっと前までgcc、最近はclang。 だからcygwinやLinux上でもObjective-Cの勉強はできる。 APIもcocotron.org使えば、初級まではなんとかなる。
98 : >>96 やり方が違っているような気がするが、がんばってくれ
99 : 本読むだけでできるようになる人もいなくはないんだろうが まずありえない
100read 1read 1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
VB.NETのとんでもない欠陥に気づいた (293)
【Lisp】プログラミング言語 Clojure #2【JVM】 (482)
VisualBasic6.0 対 VisualBasic .NET 2003 (458)
Boost総合スレ part9 (966)
BASICの宿題はお前にまかせた (550)
Java⇔RDBのMapping-Frameworkを語るスレ Vol.5 (933)
--log9.info------------------
【ジャッカス】jackass11 (853)
【AXN】CSI:NY Part9 (455)
〜 シャーロック・ホームズの冒険 Adv.19 〜 (527)
【テレ東系列】CSIシリーズpart35【地上波限定】 (431)
★★60~80年代の外国ドラマを語ろう★★ (353)
字幕と吹き替え2 (772)
【Dlife】Law & Order:クリミナル・インテント 1 (677)
【BS朝日】HEROES ファイナル・シーズン (424)
【国内未放送】スターゲイト・ユニバース【Part2】 (690)
【再放送キボン】フルハウス part 22 (658)
【DVD】プリティ・リトル・ライアーズ【ネタバレ】 (367)
【Wonder】素晴らしき日々5【Years】 (290)
【地上波】フラッシュフォワード2【テレ朝】 (327)
【FOX JAPAN】BONES〜ボーンズ〜22【ネタバレ禁止】 (778)
【韓流α】テロワール (411)
奥さまは魔女 part4 (218)
--log55.com------------------
レッドバロンの評判 【 問 題 点 】part61
大型バイクに乗り出すのが非常に面倒くさいPart104
【ちば】千葉ライダースレ 214【チバ】
【台風】静岡ツーリングスレ97【襲来!!】
秋めく親切な奴が何でも質問に答えるスレ☆Part462
オフロードバイク 96台目
【ホンダ】 PCX 147台目 【HONDA】
50歳以上のライダー79