TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
多言語でforループを列挙していくスレ
BASICの宿題はお前にまかせた
Visual Studio Code / VSCode Part4
VisualBasic6.0 対 VisualBasic .NET 2003
Android Studio Part3
Borland Developer Studio 2006 No.13
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
StackOverflowについて語るスレ
プログラミング未経験→月4万
Androidプログラミング質問スレ revision49

C言語なら俺に聞け 147


1 :2018/08/16 〜 最終レス :2018/09/11
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


C言語なら俺に聞け 146
https://mevius.2ch.sc/test/read.cgi/tech/1525031257/

2 :
>>1
乙なんだな

3 :
>>1
乙ってんね

4 :
前スレ992
https://mevius.2ch.sc/test/read.cgi/tech/1525031257/992

ちょっと何言ってるかわからん
983はナマポと何の関係があるのかと聞いているんだが??

5 :
>>1
おC

6 :
>>1
乙curry

7 :
>>4
ちょっとはググって言え。

使い道のないはずのイテレータをC++ではどう活用してるのか、
何故そんなことになるのか、考えてみろ。

8 :
というかこのスレワッチョイ外されているんだな。
最近この手の荒らし多いな。

俺はワッチョイ無しのスレは気に入らないから、
>>4の疑問について、ワッチョイ無しのスレ(=このスレ)では答えないことにする。
まあもうヒントは十分に与えたし、馬鹿でなければ辿り着けるはずだが。

9 :
イテレータへのこだわりは確かに謎。結局ローレベルな話なんだよね。
foreachという切り口だとイキるのが難しいということか。

10 :
ナマポとプログラム言語の関係性はさっぱりわからない

11 :
アホ? list<T>::iteratorがナマポ撲滅のためとか本気で言ってるのか?

12 :
改めて明解C読んだけどどう考えても入門者向けじゃねえなこれ
これ最初に読んだせいで挫折した人多そう

13 :
その教科書は教師を再生産するための商品
独学でどうにかするアイテムじゃあない

教科書の肝心のところに教師から教えてもらうフェイズがひっそりとしのばせてある
だから教師の関与が深い
補助の人間が必要な物品だよ
教科書を誰が買うかっていうと、先生がより先生っぽい演技・活躍を出来るアイテムを買うだろ
だから教師の再生産をするためのアイテムを教師が生徒に買わせるんだよ

教科書は生徒が買うんじゃなくて先生が買う、
そのフェイズでは教師の介在があってはじめて理解できるようなひっかけがなくちゃあならない、
だから「入門者向けじゃねえ」になる

14 :
C言語の入門書を読み終えて文法をある程度理解したところなんですけどこの次はどうしたらいいんでしょうか・・・

15 :
何かを作って見る
何を作るかは自分で決める
決められないときは、みんなに相談してみる

16 :
>>14
アルゴリズムとデータ構造の本を一冊買って勉強しとけ
もちろんコードを書くんだ
コードを書かないならそんな本は買わなくてよろしい

17 :
>>14
標準ライブラリの関数の仕様を調べつつ、自分で実装してみる

18 :
printf と scanf のフォーマット処理は勘弁してください

19 :
ありがとうございますとりあえずアルゴリズムとやらの本を買います

20 :
これどう?初心者だとちょっと難しいかも知れないが。

[改訂新版]C言語による標準アルゴリズム事典 Software Technology https://www.amazon.co.jp/dp/B07CG4RMT5/ref=cm_sw_r_cp_taa_xEvEBbAEA1JNT

21 :
だめでしょ。
アルゴリズムイントロダクションがいいよ

22 :
事典は事典。最小限の解説読んであぁなるほどねって思える人用。

23 :
詳説 Cポインタ、2013、オライリー・ジャパン

ポインターだけで1冊、本が書けるw

24 :
引数に配列をとるとき
f(int* data)とf(int data[])の両方が有りだということは分かったのですが、基本的に後者の書き方をしてるコードはほとんど無くて大体前者な気がします。
これはなんででしょうか。後者の方がはっきり配列だとわかります。前者は配列を求められているのかただのint型のポインターを求められてるのか判断つかないと思うんです

25 :
ポインターってそんなに難しかったっけ?

26 :
ポインタ本ならこっちの方がいい

新・標準プログラマーズライブラリ
C言語 ポインタ完全制覇 大型本
前橋 和弥 (著) 2017/12/7

27 :
>>24
[ ] は、サイズが変わらない

* は、単なる先頭アドレスで、サイズが変わるかも知れない

28 :
>>24
配列表記はアドレス表記のエイリアスだから区別するという発想がそもそもない
配列アクセスするコードならアドレスと配列のサイズを引数で渡す

29 :
関数の引数としては配列であろうがポインタであろうが、ただのアドレスとしての意味しかない

30 :
>>29
配列でもポインタでも同じってことは分かってるでしょ
それでも元が配列なら配列で受けたほうが分かりやすいのでは?
という疑問だと思う

>>24
ぶっちゃけ、Cに慣れてくるとどっちでもたいして変わらない
配列で受けたいのならそうすればいい。
実際のところ、両方それなりに使われてる。
例えば、main() は int *argv[] にすることが多いんじゃないかな
多分だけど

31 :
>>24
配列っぽい表記に惑わされて、sizeofして長さを求めようとしたというバグを何度か見ました。

32 :
 
f(int data[100]) なんて渡し方だと、どう?

33 :
そんな文法はない。
宣言としては有効かな。でも意味はないだろうね。ただのポインタ。

34 :
>>33
じゃあ、これをポインタ表記に置き換えて見てください、お願い

35 :
>>24
なるほど、じゃあ君は
void swap_int(int lhs[], int rhs[]);
と書いてもらえれば判断つきやすいんだな

36 :
なんというか、Cならではの問題かな。
Javaもちょっと似てるか。

37 :
下のようなコードを書くとコンパイルエラーになるでしょ。
int ary[100];
int val;
val = ary++;
このaryは配列だから、ary自体の値を変化させる操作は出来ない。
それの類推で関数の仮引数はポインタで受けるんじゃないかな。
関数の中でポインタ風に使う変数はポインタの形で宣言。

関数内で値を変化させず [] によるインデクスだけでアクセスするなら
仮引数を配列の形で宣言するのも分かりやすい書き方かも。

後は歴史的な事情。
配列風に書くとインデクス計算に掛け算を使われて遅かった名残り。


>>30 俺はmainの引数は main(int argc, char *argv[]) だな。
保守的だけど、こんな場面で独自色出すことないしね。

38 :
>>24
あんたの感覚は正しいと思う
同じだと言ってる奴もいるけど
foo(int a[]){
a = … /* エラー */
とか微妙に違う
ただそこまで気にする人があまりいないだけ

39 :
関数の引数では配列の要素数は無視されるだけ
変数としての配列とポインタは別物だけど、関数の引数では全く同じもの

40 :
理由は既出だけど、C言語では配列とポインタは明確に違うよ。
相互変換可能なだけ。

41 :
ぶっちゃけ、相互変換可能ならその二つは同じじゃねえか?
数学的に

42 :
同じ点もあるし違う点もある
同じ点を強調したいときに「同じ」
違う点を強調したいときに「違う」
と言うだけ

具体的に語らないと何の意味もない

43 :
>>38
そのコード片、エラーになるかな?
仮引数のa(intへのポインタ)に
関数内で値を代入することは許されるはずだけど。

44 :
代入ではエラーにならんと思うよ。
lvalueとして使えると思う。配列っぽく書けるがあくまでポインタ。

45 :
>>43-44
すまん、お前らの言う通りだ
なんか勘違いしていたみたい

46 :
>>20
パクリで儲かる成功例

47 :
引数の配列がホンモノだとすると、非NULLが保証されてないとあかん。
というか構造体渡しと同様の配列渡しが必要だな。まあ使わんか。

48 :
>>37
その例は
void func(int ary[100])
{
int val;
val = ary++;
}
との違いを示そうとしているのだとしたら
int *val; じゃないとおかしいだろ

>>37
[]で書くべきと主張するんなら
char argv[][]にしなきゃねえ
もちエラーだけどw

49 :
>>47
ま、必要なら構造体の中に入れて渡すと。

50 :
配列をパラメータにするのは
サイズが決まってる時にそれを明示したい場合くらいだな

ポインタの方が汎用性が高いから

51 :
構造体みたいに
値渡しやコピーもあると(たまには)便利

52 :
>>50
void func(int ary[100]); これと
void func(int *ary); これが
意味が違うと思っているのか?

53 :
設計意図を示すコメント的な意味ならあると思う
中身は同じだけど

54 :
初心者に対して誤解を与えるだけじゃね?
必ずそのサイズで呼ばれると保証されるわけでもないし。

55 :
>>52
意味は違うね

要素が100個以外の時に前者を使ってるコードを見たら気持ち悪いだろ?
そういうこと

コンパイラによってはary[1000]にアクセスすれば警告が出る

56 :
ほんとに警告出るのか?
サイズ指定に意味がないというのが規格だし、コメント程度の役割しか持たせたらあかんという気が

57 :
gcc8でもclang6でも警告でなかったょ…

58 :
お高い静的解析ツールだと警告出るかもね。
やってないから知らんけど。

そういう環境で開発できるならコメント以上の意味はあるかも。
仮定で申し訳ない。

59 :
>>55
おまえの主観は聞いてない
プログラムの実行結果が違ってくる例を示せ

60 :
>>59
屁理屈乙

61 :
>>48
多次元配列なら
void func(int ary{}[100])
{
}
とか
void func(int (*ary){}[100])
{
}

62 :
>>61
間違えた

void func(int ary[][100])
{
}
とか
void func(int (*ary)[100])
{
}

63 :
>>60
もう一度言う、おまえの主観は聞いてない
正論か屁理屈かはおまえの主観だ
客観的事実を示せ、理屈はそれからだ

64 :
>>63
だれも機械の解釈の違いには言及してない定期

65 :
>>62
void func(int ary[][100]); これはできるのに
int func(void)[][100] これはできない
{
int ary[][100]; これもできない
ary = 0;
return ary;
}
extern int ary[][100]; と
extern int (*ary)[100]; は意味が違う
結局、[]で書くべきなんて主張は
通用しないところが多すぎる戯れ言だ

66 :
>>64
プログラム言語は機械に解釈させるためのものだ
自明なことを誰も言ってないなんてことこそ屁理屈そのものだろうが

67 :
>>66
糖衣構文

68 :
>>67
全然関係ねえぜ
暑さで気が触れたか?

69 :
>>68
機械の解釈が同じでも人間には違う意味に見えるのはあるよな?

70 :
>>69
void func(int ary[100]); これのどこが
void func(int *ary); これの構文糖衣なんだ?
書いた奴の頭を疑わせる以外にどんな意味があるんだよ

71 :
サイズが100でなければならない関数なら
void func(int (*ary)[100]); こう書いて
int ary[100];
func(&ary); こう渡せよボンクラ

72 :
まあ多次元配列を引数にするのは良くないと思うわ

73 :
>>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。

74 :
>>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。

75 :
>>72
なぜ?

76 :
>>73
ここがム板ってことを忘れたか?
技術的な話で来い

77 :
多次元配列の型は typedef で型名作っておけば楽なのでは?

78 :
>>68
>>76
この書き込みのどこが技術的な話なんだw
単にイキってるだけじゃん。

79 :
>>78
構文糖衣の話をしたんだが
構文糖衣と書いてないと読めないオツムなのか?
アホw バカwww

80 :
さて、買い物に行くぜ
妻子の夕飯を作らにゃならん

81 :
>>75
そりゃわかりにくいからだよ。
引数にするとCの多次元配列の嘘くささがよく表れるわ。
せめて構造体で包むとかして名前を付けた方がいいね。

82 :
>>71
無駄なコスト

83 :
>>70
それを糖衣構文というかどうかどうでもいいけど
だれも機械の解釈の違いには言及してない定期

>>50>>52
明示とは機械に対してではなく人間に対してのことを言ってるからこの返信は意味がずれてる

84 :
超初心者です。
シミュレーターで動かしながら独学で学んでいるのですが、
scanfが動かない(スルーされる)ので困っています。scanfが動くシミュレーターってあります?

85 :
今はpaiza.ioを使っています

86 :
下の入力欄が空白じゃないの?

87 :
解決しました。ありがとうございました。

88 :
for文でこんなのを発見したのです。
for(;;)
ご覧のとおりセミコロンがカッコ内に2つあるだけ。
これはどういうfor文でしょうか。
ググり方も分からないです。

89 :
無限ループ

90 :
昔からその書き方の無限ループを好む人は多い
俺が知ってる範囲だとカーニハンもその書き方を好んでいた

91 :
>>89
(*´Д`)ありがとうございました。

92 :
無限ループって言っても
大概は何かの条件で脱出するわけだから
while (条件) が一番わかりやすいと思う
あ、好みだろうから、反論は不要です

93 :
>>92
俺も無限ループはwhile(TRUE)派だな。
静的解析で怒られるから使うなって人もいるけど。
これも個人の好みなので反論不要です。

94 :
無限ループには
for(;;)
while(1)
while(true)
などがあるようですが、驚いたことにfor(;;)がC言語の伝統的スタイルなんだそうで。

95 :
goto 笑

96 :
do {
} while (true);

だな

97 :
true って新しいCだと使えるの?

98 :
_Bool

99 :
while (1==1)
なんて

100 :
for(;;)は無条件であることを的確に表現してる
条件が書いてないのはこれだけ


100〜のスレッドの続きを読む
ふらっと C#,C♯,C#(初心者用) Part141
こんなプログラミング言語は嫌だ!
学ぶ言語は「広く浅く」か「狭く深く」のどっちか
インデントを強制しても綺麗なコードにはなりません
TypeScript part3
シェルスクリプト総合 その28
monazilla Part 6
Deep learning
Perlについての質問箱 64箱目
☆★Java質問・相談スレッド182★★
--------------------
【アホ朝日新聞】日韓の外交上の対立が、民間交流に影を落としている。日本人の皆さん、新大久保へ行こう
☆全日本男子バレーボール PART2★
【白石信夫】みんなのクレジット32号案件【詐欺師】
どんだけ近鉄ケーブルネット大好きなんだよwwwwwwwwwwwwww
[0W-12]★低粘度オイル 13L★[0W-16]
ぬるぽで1時間以上ガッされなければ`∀@ハン板1416
【社会】日本人は、ここから「多拠点生活」をすべきワケ
【Go!プリンセスプリキュア】 カップリングスレ
【国会中継】<桜を見る会>1/29 参院予算委員会 質問者 #蓮舫氏 #菅官房長官 「桜名簿はないのが明快。再調査はしない」
仮に、田畑さんがヴェルザスを15にしなければ、FF15はいつ頃発売されていたのだろうか?
【セイタ】 火垂るの墓 【オバサン】
【女子アナ】N国・立花代表に不正経理指摘された有働由美子アナ側が反論 ★2
ぬこ「中入れろ」→警備員「ダメ」 ぬ「よお」→警「ダメだって」→ぬ「お前に会いにきたんじゃ」→///
【からかい上手の高木さん】高木さんはイチャイチャ上手かわいい2.1
【バーチャルYouTuber】.LIVEアイドル部アンチスレ#9926【アップランド】
スポクラに通う奥様IDあり☆12
┏━Joy Opposites━┛
【PSO2】ネ カ マ 図 鑑【SS勢】
どめさかひなんじょすれ その2
【本スレ】いきなり!ステーキ その45【肉】
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼