1read 100read
2012年6月プログラム11: C言語なら俺に聞け(入門編)Part 103 (335) TOP カテ一覧 スレ一覧 2ch元 削除依頼
CVS導入スレ〜 Rev.3 (836)
ハンガリアン記法 [part1] (225)
【3DS】プチコンを語るスレ【DSi】 (606)
☆Raspberry Pi☆でプログラム1 (848)
BASICの宿題はお前にまかせた (550)
日本語プログラミング言語『なでしこ』スレ5 (794)

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元 削除依頼
Jython、Groovy、JRuby - どれが一番効率的? (254)
英語は、訳さずに読もう with 英英辞典 (236)
プログラミング言語、いくつ使える? (327)
【C++】高速化手法【SSE】 (806)
【Lisp】プログラミング言語 Clojure #2【JVM】 (482)
【コメント】doxygen【コンソメ】 (492)
--log9.info------------------
明日のよいち! 11本目 (696)
学園ヘヴン BOY'S LOVE HYPER!4 (235)
あたしンち その32 (224)
空中ブランコ part6 (372)
べるぜバブ 15 (218)
B型H系 H友18人目 (846)
エレメントハンター 原子番号18[Ar/アルゴン] (875)
ヤッターマン Part41だコロン (346)
PERSONA ペルソナ -trinity soul- P56 (869)
ARIA 総合スレッド Navigation.210 (461)
プリティーリズム・オーロラドリーム 25 (671)
妖狐×僕SS(いぬぼくシークレットサービス) 犬21匹 (208)
TVアニメ版AIR -The 106th. summer- (494)
魔人探偵脳噛ネウロ 魔界22ッ能力 (736)
ぼくらの 88 (640)
パパのいうことを聞きなさい! 38日目 (219)
--log55.com------------------
ベンチプレスMAX100kgを目指すスレ77
【ケトルベル#40】
【三流芸人】コロナ小嵐【正直知らんわ】
カメ13
50歳以上の筋トレ【身体に優しく】8
【高鷲】 超kooolな奥美濃を語る171本目【白鳥】
日帰り】軽井沢プリンスホテルスキー場3【激混み
【新幹線】GALA湯沢 part33【直結】