C言語なら俺に聞け 141 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:06:47.63ID:J4JGo3XO
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/


http://mevius.2ch.net/test/read.cgi/tech/1494508803/
http://www.geocities.jp/c_cpp_cs/about_c/
2017/08/05(土) 13:19:25.82ID:LM2wNYVN
>>615
>特殊なリンカでない限り大抵のリンカは定数はROに配置しますよ?
組込みか何か?
2017/08/05(土) 13:20:36.17ID:239At3Tg
604 デフォルトの名無しさん[sage] 2017/08/05(土) 11:35:58.99 ID:B4rhQgJR

ああ、argumentとparameterをJISはそう訳してるのか
それはすまん


だっさ最低限の日本語も知らずに日本の2chに書き込むなよ
2017/08/05(土) 13:21:53.41ID:hIPGEPA7
>>616
今は組み込み屋ですね
昔はアプリ屋でWinやAndroid触ってました
2017/08/05(土) 13:26:16.29ID:3YqA5kDS
もしかして配列とポインタの区別すらついてないのか
2017/08/05(土) 15:28:27.35ID:AkDeKfTH
Cだと実際区別ないよね
長々と罵りあってるのに具体的な説明がひとつも出てなくてわろた
2017/08/05(土) 15:41:07.75ID:B4rhQgJR
>>615
こいつダメだ 何もかもがデタラメ
ポインタと配列の区別
リテラルと即値の区別

何も出来てない
2017/08/05(土) 15:43:44.88ID:B4rhQgJR
>>620
無知を自慢しなくても良いから
2017/08/05(土) 16:11:57.11ID:uXlFBIBD
シンタックスシュガーですよ。
2017/08/05(土) 16:14:56.43ID:40G0sflG
6809 のアドレッシングモードが懐かしい
リテラルと即値の区別は 6809 を触っておればわかるよね
6809 搭載のPCIボードを誰か作ってくれないかな
2017/08/05(土) 17:47:19.45ID:dV9p14Wx
char *pointer;
char array[1];

・・・・・・
pointer++; /* OK */
array++; /* error */
2017/08/05(土) 17:51:18.49ID:xVRX2iSI
>>620
こういうのあるよね。

char s1[] = "a";
char *s2 = "b";

これ、s2には後から他の文字列を指すポインタの代入ができるがs1にはできない。
s2はポインタを入れる変数に対する名前になっているがs1は文字列定数の先頭を
指すラベルにしかなっていない。

それとこんなのもある。

char s3[3][100];
char *s4[3];

s4は3要素のchar*だが、s3は違う。char で 100 要素の配列が3要素ある。
配列の配列なので実は typedef char c100t[100]; c100t s3[3]; みたいに書いたのと同じだ。
新しい型が密かに作られている。なので違うのだがアクセスする時に s3[x][y] も s4[x][y] も
できたりして見た目が同じになる。
多分初心者はこれにハマることがあると思う。特に関数の引数をs3のように書いてしまい、
それでs4を引き渡そうとした時とか、あるいはその逆の時とかね。(そして昔のコンパイラは
警告も出さずに通ってしまい動かしてからバグに悩むと)。
2017/08/05(土) 18:08:09.16ID:PFeVLmXg
cで一番難しいのは、constだと思う。
間違えてても、動いちゃうからなー
なくても困らないけれど、厳密に宣言しようとおもうと慣れが必要。

char ** とか
2017/08/05(土) 18:10:24.82ID:PFeVLmXg
あっ、あと二次元配列とかは、関数の引数に指定しようとするとはまるね。
2017/08/05(土) 19:34:33.25ID:vX9Ad9Pg
"constは左に掛かる"

char const **s; // charを修飾
char * const *s; // char *を修飾
char ** const s; // char **を修飾

と書けば何も迷うことはない
2017/08/05(土) 19:38:19.13ID:vHyXltX+
では const char **s は?
2017/08/05(土) 19:39:51.34ID:vX9Ad9Pg
>>630
char const **s;
と一緒
2017/08/06(日) 00:10:43.00ID:+MX/dj54
>>630
「では」 がconst
2017/08/06(日) 00:11:43.92ID:ljqAECQw
forkで子プロセスを複数生成した際に、子プロセス間で変数を共有、または子プロセスから他の子プロセス(親は同一)の変数にアクセスする方法って有りませんか?

共有メモリ以外でお願いします
2017/08/06(日) 00:18:14.02ID:+MX/dj54
ファイル経由
2017/08/06(日) 00:42:21.39ID:LLgtDDDS
pipe
2017/08/06(日) 07:47:08.77ID:D2MwPYUj
大喜利をやれということなのかな
2017/08/06(日) 07:49:51.80ID:UjkuucW3
ptrace
638デフォルトの名無しさん
垢版 |
2017/08/06(日) 10:57:12.05ID:3gNA0Uyl
>>633
内部的には共有メモリと同じなんだろうけどmmapなんかどうだ?
639633
垢版 |
2017/08/06(日) 12:30:30.67ID:QIgcqg1l
すみません自決しました
2017/08/06(日) 13:28:03.88ID:fp1GLRR7
書き込めると言うことは自決は失敗か
2017/08/06(日) 14:15:03.73ID:fAxfwMN0
自動で書き込むスクリプト作ったんじゃろ
2017/08/06(日) 14:32:55.81ID:/dqOVGNE
多倍長演算って10000進法でやってる?
それとも2^n進法?
2017/08/06(日) 14:33:22.10ID:nazawjTw
>>633
> 共有メモリ以外でお願いします
共有メモリがダメな理由が書いてないからネタなんだろうな
2017/08/06(日) 14:36:56.91ID:nazawjTw
>>642
32bit マシンでも 2^32 進数なんて使ってないが...
645デフォルトの名無しさん
垢版 |
2017/08/06(日) 15:27:01.03ID:3gNA0Uyl
>>643
難しくてわからないからじゃね?
あるいは宿題がそういう風に出てしまった。
2017/08/06(日) 15:42:53.54ID:LLgtDDDS
UNIX SOCKET
2017/08/06(日) 15:58:13.64ID:pnlX0fdh
>>645
どっちにしてもスルーするのが正解
648633
垢版 |
2017/08/06(日) 16:02:38.93ID:qTrjZ2YT
>>643
コードが無駄に長くなるので好きじゃないんです
どうしてもって時以外は使いたくないです
649デフォルトの名無しさん
垢版 |
2017/08/06(日) 16:31:30.70ID:ThMEkv3I
>>602
596だが
おまえ、どこから流れ読んでる?
>>593あたり前後の関係よく見てみな
>>595がいかに頓珍漢な噛みつき方しているか牛でもわかるぞ
2017/08/06(日) 16:47:17.37ID:r2XWWSNC
>>649
ポインタと配列の区別がつけられない障害児のID:dUt+j3iSか
出会った入門書が悪かったんだから、もう諦めてポインタのない言語を学びなおせ

お前にゃCは無理って事だ
2017/08/06(日) 16:48:57.70ID:r2XWWSNC
ポインタを教えてくださいと言ってる初心者に配列使って見せて
「これがポインタだっ どやっ」

笑うしかないな
2017/08/06(日) 16:52:58.17ID:4cVoKrwP
やっぱりポインタの勉強するには柴田ぼーよー先生のポインタの本がいいんでしょうか?
2017/08/06(日) 16:56:06.63ID:r2XWWSNC
ID:dUt+j3iSにどんな本使ったか聞いて、それは避けるべきだと思うよ
2017/08/06(日) 17:02:15.95ID:jhhg/GBw
こいつらの反論が反論になっていないな
C分かっていればそのコードが
ポインタ渡しになっていることは直ぐに分かるんだけどね
まぁスルーが得策だよ
ID:dUt+j3iSはID:r2XWWSNCに構ってはいけない
2017/08/06(日) 17:23:37.54ID:OSHq4q+H
問題はそこではなくて、ポインタの話からいきなり仮引数だの実引数だのとかの話に飛躍したことだと思うのだがな
まあだいたい想像は出来る
何故だか初心者本でよく見られる間違いとして、関数の呼び出し側の引数が実引数、関数の受け取り側の引数が仮引数、という説明をそのまま受け入れていたのだろうな
言語によってはその通りかも知れんが、少なくともC言語のJIS X 3010の解釈とは異なっている
2017/08/06(日) 17:28:55.73ID:r2XWWSNC
>>654
ID:jhhg/GBwもポインタ理解出来てない障害児か
初学時になんて本使った?
657デフォルトの名無しさん
垢版 |
2017/08/06(日) 17:35:06.21ID:ThMEkv3I
>>654
ご忠告どうも
気持ちだけありがたく貰っとくyo

>>656
K&R 1stだが何か?
2017/08/06(日) 17:37:29.70ID:MVEPApHK
C言語でもその解釈で全然問題無いと思うけどな俺は
どっちにしてもID:r2XWWSNCはど素人のくせに
質問の仕方も知らない無礼な奴と言う事には間違いはないだろう
2017/08/06(日) 17:44:53.62ID:OSHq4q+H
>>657
実引数として配列を用いて関数呼び出しを行えば、呼び出された関数は仮引数としてポインタで受け取ると言いたいのだろう
K&Rでも実引数と仮引数はそういった説明をしていたか?
2017/08/06(日) 17:54:58.87ID:r2XWWSNC
>>657
おメーには聞いてねーよ 障害児
661デフォルトの名無しさん
垢版 |
2017/08/06(日) 18:16:39.32ID:ThMEkv3I
>>659
ああしていたよ
おまえには読み取れなかったんだろうがな

>>660
無礼なやつだな
俺は障がい者手帳は交付されてねえよ
勝手に妄想すんな精神分裂病患者め
2017/08/06(日) 19:45:26.91ID:r2XWWSNC
>>661
> printf("Hello, C world!\n"); これがポインタだっ どやっ
手帳申請しろよ w
2017/08/06(日) 19:52:07.02ID:OFkcQ32C
>>662
>>661 にそんなことは書かれているのか?
2017/08/06(日) 19:55:39.33ID:zQpO4a2U
そういやシンタックスシュガーと言えば、昔々こんなのが動いたのを初めて見た時は驚いたな。
https://paiza.io/projects/XOWJRDaMZQIIu9cF5Ex1Ug
本当にポインタ計算してるだけという。
2017/08/06(日) 20:53:33.24ID:r2XWWSNC
>>659
ガイジには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

良い時代になったもんだ 歴史的資料がきちんと公開されている
2017/08/06(日) 21:33:36.77ID:r2XWWSNC
誤読される可能性があるので追記
>>659
ガイジのID:ThMEkv3Iには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

良い時代になったもんだ 歴史的資料がきちんと公開されている
2017/08/06(日) 21:39:44.09ID:r2XWWSNC
>>654
ポインタ渡し w
謎用語を躊躇いなく使っちゃう ガイジの特徴だよなあ
2017/08/06(日) 22:38:49.98ID:fAxfwMN0
When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

「配列の名前が関数の実引数として現れた時、その配列の先頭ポインタが渡される」でいい?
2017/08/06(日) 22:53:31.79ID:r2XWWSNC
どこにポインタなんて書いてあるんだ 見えないものが見えちゃうって精神科受診した方が良いぞ
2017/08/06(日) 22:57:19.94ID:fAxfwMN0
じゃあ君ならlocationはどう訳す?
2017/08/06(日) 23:15:47.82ID:jhhg/GBw
ポインタ渡しが謎用語らしい
コイツはもう覚える気すらないよ
つーかただのバカ
スルー推薦
2017/08/06(日) 23:17:56.61ID:r2XWWSNC
位置

そもそも
> A pointer is a variable that contains the address of another variable.
と言う定義を理解してないのか?
障害児製造機な入門書が存在らしいな
お前は何という本を初学時に使った?
2017/08/06(日) 23:20:53.44ID:UjkuucW3
一応言っとくけど、文字列リテラルを関数に渡す場合の説明は5.5章だぞ
2017/08/06(日) 23:22:53.35ID:r2XWWSNC
>>671
ガイジ用語か qiitaでいっぱいヒットするわ w
2017/08/06(日) 23:25:55.10ID:fAxfwMN0
>>672
直訳すると、「ポインタとは他の変数の位置を内包した変数である」。
"location of the beginning of the array"、直訳すると「配列の先頭の位置」はポインタ以外の何物だっていうのか教えてくれる?

ちなみに俺の初学本は「C言語によるプログラミング」第二版
2017/08/06(日) 23:25:56.83ID:AvyyeWcb
他人をガイジ呼ばわりしてるけど自分が1番ガイジだったってオチやね
2017/08/06(日) 23:38:53.59ID:fp1GLRR7
メモリ上の位置を表す「アドレス」と、それを格納する変数である「ポインタ」を混同してるから議論が噛み合わないのでは?
2017/08/06(日) 23:45:57.68ID:r2XWWSNC
>>675
ガイジか?
ポインタとは他の変数のアドレスを内包した変数である
としか書いてないのに、書かれてない「位置」がなぜ出てくる

まあ、それには目をつぶって
「内包した変数」が重要
Cの変数とは型を持ち、値を格納できるもの

アドレスとポインタ(=変数)を混同しないように
あと10年くらい修行することだ
2017/08/06(日) 23:45:58.32ID:fAxfwMN0
いうほど混同しているだろうか?
2017/08/06(日) 23:54:22.39ID:fAxfwMN0
>>678
えーともしかして、
「いわゆる『ポインタ渡し』ではアドレスがコピーされているのであってポインタ変数が渡されているわけではない」と言いたいの?
2017/08/06(日) 23:55:35.62ID:jhhg/GBw
コイツはまともな社会生活できてるのか
日常会話が成立出来ていないのではないか
2017/08/07(月) 00:00:10.79ID:Uo4tfgNR
>>680
ガイジ用語使うな
qiitaでヒットするそれはあえて言うなら「ポインタ渡され」
このスレで出現している「ポインタ渡し」はガイジID:jhhg/GBwが使い出した謎用語
2017/08/07(月) 00:02:00.78ID:bwSM+rxU
論点を三行でまとめて
2017/08/07(月) 00:07:08.67ID:r7C/NYo5
>>682
いわゆるって言ったのにそれでもダメか。

void foo(int a[8])と宣言された関数を別の関数内で

int a[8];
void foo(a)

と呼び出す時、それはポインタが渡されているのではなく配列の先頭アドレスがコピーされていると言いたいの?
2017/08/07(月) 00:09:51.87ID:uOfJK7yi
「ポインタ」って用語は結構仕様書中でも不安定だから、実はあまり気にしてもしょうがなかったりするんだよね
http://www.kijineko.co.jp/node/498
2017/08/07(月) 00:11:41.88ID:g8RW1Chx
>>684
foo(a) の 「a」って何?
2017/08/07(月) 00:13:35.75ID:r7C/NYo5
>>686
その上にint a[8];って書いたんだけど、なんか文法ミスってたかいな?
2017/08/07(月) 00:13:38.80ID:5EiEWIq+
このガイジ早く死刑にしろ
絶対何か障害持ってるだろ
何か起こしてからじゃ遅いぞ
2017/08/07(月) 00:16:29.93ID:DdwwpY1/
なるほど。やたらガイジ連呼してる奴が頭おかしいわけだな。
2017/08/07(月) 00:21:20.30ID:Uo4tfgNR
>>684
渡されるのはポインタ変数の値(アドレス)、それをfooがポインタ変数として受け取る
2017/08/07(月) 00:24:46.95ID:DdwwpY1/
ポインタの使い道を聞いてるのに、なにみんなで必死にポインタの解説してんだ?

Javaとかポインタない言語があるんだからポインタはなくてもいいだろという主旨だろう。
2017/08/07(月) 00:25:52.66ID:Uo4tfgNR
ガイジ用語「ポインタ渡し」を編み出したID:jhhg/GBwは今日はID:5EiEWIq+か
2017/08/07(月) 00:33:24.20ID:r7C/NYo5
>>690
だよねえ。それじゃあ
printf("Hello, C world!\n");はポインタとして受け取っているように見えるんだけど、ポインタではないの?
2017/08/07(月) 00:38:54.27ID:YE/9ro9h
引数を変数だと考えるからおかしなことになる
引数は値であって変数ではない、渡しているのは値であって変数ではない
C言語には値渡ししか存在しない、他の言語で言う参照渡しに相当するようなものは存在しない
ましてやポインタ渡しに至っては全く意味不明
渡しているのはアドレスであってポインタを渡しているのではない
2017/08/07(月) 00:43:09.37ID:CdxYgk48
ポインタ渡されww
2017/08/07(月) 00:46:39.34ID:r7C/NYo5
じゃあ「アドレス渡し」ならいいわけ?
2017/08/07(月) 00:48:53.93ID:tmW9+jq1
定義至上主義者とは一般的な会話が成り立たないことがよくわかる
2017/08/07(月) 00:51:00.39ID:r7C/NYo5
定義至上主義なら最初から「アドレス渡しと呼べ」と言えばいいだけだから、ただ文句つけたかっただけだと思うよ
2017/08/07(月) 01:02:22.98ID:L++MnVlz
定義至上主義者はID:r7C/NYo5のことだと思うが
「ポインタ渡し」だの「アドレス渡し」だの言葉の定義に拘ってるようにしか見えん
2017/08/07(月) 01:04:50.56ID:uOfJK7yi
>>694
厳密にはNULLポインタとかがアドレスじゃないから、「ポインタ型の値」といったほうが汎用的では
そして、
>>685
によると(場合によってはポインタ型の値)もポインタと言ってる箇所があるのかな
仕様書読むのめんどくさい

どれにせよ、厳密な表記しても初心者には得がないな
2017/08/07(月) 01:06:41.28ID:Uo4tfgNR
>>693
printfに対する知識がなければ、アドレスを渡しているところまでしかわからない
2017/08/07(月) 01:08:08.23ID:tmW9+jq1
この流れでそう思える読解力は凄い
言葉の定義で頓珍漢な噛みつき方したのは
ID:Uo4tfgNRとID:YE/9ro9hだろ
2017/08/07(月) 01:10:17.31ID:r7C/NYo5
>>701
そんなことで人のことをガイジガイジ連呼していたの?
2017/08/07(月) 01:11:58.49ID:ITzYZ/9b
人工知能は人間らしい解釈ができないから仕方ない。
2017/08/07(月) 01:14:42.90ID:tmW9+jq1
これチューリングテストの実験場だったのか
見抜けなかったわ〜w
2017/08/07(月) 01:15:35.04ID:DdwwpY1/
だからさぁ。使い道を聞かれてんだよ、使い方じゃねーんだよ。さっさと答えてやれよ。

javaやpascalはポインタ使わなくてもプログラム書けるのにCにポインタが必要になる使い方をよ。

もしかしておまえら入門書読んで理解したつもりなだけで、ポインタが何か分ってないんだろ?
2017/08/07(月) 01:18:08.93ID:r7C/NYo5
>>706
俺はガイジ連呼厨の意図が知りたかっただけだし、そこまで偉そうに言うなら君が答えてあげなよ
2017/08/07(月) 01:19:37.44ID:Uo4tfgNR
>>703
お前をガイジと呼んだのは、書かれていない単語が見えてたからだと説明したはずだが
2017/08/07(月) 01:21:33.94ID:ITzYZ/9b
そこ、放送禁止用語も知らない一般人、オンエアしちゃダメ。
2017/08/07(月) 01:26:39.77ID:r7C/NYo5
>>708
俺以外に対してだよ
2017/08/07(月) 01:35:13.99ID:DdwwpY1/
結局、javaやpascalはポインタ使わなくてもプログラム書けるのに
Cにポインタが必要になる使い道、理由は誰も分らないのかよ。

ガッカリだぜ。なにがC言語なら俺に聞けだよ。
2017/08/07(月) 01:35:26.77ID:ITzYZ/9b
┌────────┐
│        │
│  /■~\   │
│  (´∀`∩)  │
│  (つ  丿  │
│  ( ヽノ   │
│  し(_)   │
│        │
│Now Onigiring...│
│        │
│ 暫くおにぎりで │
│ お待ちください │
└────────┘
2017/08/07(月) 01:38:45.36ID:ITzYZ/9b
http://pg-kura.hatenablog.com/entry/20120616/1339856279
2017/08/07(月) 01:41:43.94ID:Uo4tfgNR
>>703
> printf("Hello, C world!\n"); これがポインタだっ どやっ
十分にガイジ

「ポインタ渡し」のガイジ事か?
> こいつらの反論が反論になっていないな
> C分かっていればそのコードが
> ポインタ渡しになっていることは直ぐに分かるんだけどね
printfの知識が無ければわからない
「渡され」を「渡し」と呼ぶ
十分にガイジ
2017/08/07(月) 01:44:12.93ID:ITzYZ/9b
生で全国放送なんで、影響力強いっす。学校でイジメの真似事されると困ります。ですから、放送コードに違反した発言は極力慎むように頼みます。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況