2ちゃんねる★スマホ版★■掲示板に戻る■全部1-最新50

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

1 :
デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 0b7b-+OgX)
2017/02/22(水) 18:55:55.41 ID:xeEkzIw00
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://echo.2ch.net/test/read.cgi/tech/1481372036/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2 :
デフォルトの名無しさん (ワッチョイ 7ba1-sbgu)
2017/02/22(水) 20:12:40.70 ID:BVjvbr4Q0
< `∀´>ニダー
3 :
2017/02/23(木) 10:08:32.31 ID:Reif/Spj0
数値演算はint型が最速と言われてるけど、64bitプロセッサでも同じと考えていいかな。
実際にそう書かれてるページが多いし。腑に落ちないけどそう理解してる。
更新するビット数が少ないから高速なのか?
4 :
デフォルトの名無しさん (ワッチョイ a37b-mxZJ)
2017/02/23(木) 10:26:10.02 ID:sZtROie80
>>3
int_fast32_t 32の部分は自分の必要な精度に入れ換えて
5 :
2017/02/23(木) 11:53:45.45 ID:WEvoRPmmH
仮に単独では64ビットが最速としても
配列とかで多量に使えばキャッシュが溢れて遅くなるというケースもある
真の最速整数型が欲しいなら、対象のCPUでいろいろな組合せを試すしかない
6 :
2017/02/24(金) 00:43:20.13 ID:cpdcPEPh0
恐れ入ります。お尋ねしてもよろしいですか。
わたくし、関数を定義いたしますマクロと、関数をお呼になられるマクロを定義いたしましたの。
関数をお呼びになられるマクロを使いましてご展開されるおり、関数を定義いたしますマクロが自動的に
ご展開なさるようにいたしたいことよ。
もしお存じ上げられるお方がいらっしゃいましたら、ぜひご意見をお伺いたくってよ。
では、ごきげんよう。
7 :
2017/02/24(金) 01:10:28.42 ID:tA8wO5PS0
ナニコレ??
8 :
2017/02/24(金) 02:53:11.32 ID:y7fe+xLc0
スベってるな
9 :
2017/02/24(金) 05:47:55.28 ID:NKFDYFgs0
C言語初心者なんです、とりあえずここまで勉強したら大体のプログラムが書けるっていうところはありますか?
10 :
2017/02/24(金) 06:59:24.53 ID:Rno5Qv0S0
ありません
11 :
2017/02/24(金) 15:53:27.60 ID:86ctwbLEM
>>9
構造化プログラミング
データ構造とアルゴリズム
プロセッサとメモリの基本動作原理
ポインタ
構造体
配列
12 :
2017/02/24(金) 16:56:06.69 ID:jIC6X1VU0
>>9
getoptの使い方
標準入力の読み方
printf

まずこの3つをマスターしよう
13 :
デフォルトの名無しさん (ワッチョイ a3e3-bUuO)
2017/02/25(土) 18:25:33.13 ID:euV/G24E0
>>9
lsのソースコードを読める
がんばれ
14 :
デフォルトの名無しさん (ラクッペ MM33-RcHU)
2017/02/26(日) 19:23:04.12 ID:V8RtWR1+M
未だにyaccなんかに頼ってちゃ駄目だ
という事で新しいパーサを一緒に考えてくれる人いません?
15 :
2017/02/26(日) 20:12:59.60 ID:Ui2+UTYM0
そこはもう、Haskell で書くしかないな。
16 :
2017/02/26(日) 20:31:54.73 ID:zlk72IFVH
Happyだって、見た目はほぼyacc
17 :
2017/02/26(日) 21:42:00.44 ID:jyTublGL0
>>14
yaccと比べて何がどう改善されたパーサを作るのか
18 :
デフォルトの名無しさん (ワッチョイ 6afa-frRf)
2017/02/27(月) 07:18:08.91 ID:0mBN5Hn20
yacc を使おうとして挫折したのか?
19 :
2017/02/27(月) 08:40:15.55 ID:wcG6k+HH0
yaccじゃC++のパーザ記述できないだろ
20 :
2017/02/27(月) 08:49:45.47 ID:cQVaqrK/H
>>9
他言語経験者かな?

・前方宣言とヘッダとよく使うプリプロセッサ文を把握
・メモリ配置(スタック・ヒープ・静的記憶)の違い・使い分けを把握
・文字列の概念と操作を把握
・その他Cでどういうケースでポインタが使われるかを把握
・変数が初期化されないワナを頭に叩き込む

あとはまぁ言語よりライブラリの選択と
OSやCPUの周辺知識の方が重要な事が多い
21 :
2017/02/28(火) 19:42:47.39 ID:4nfK1Rf+0
暇なのでネタ投下

x面体のサイコロy個を振って得られる出目のヒストグラムを出力するプログラムを作ろう
dice.exe 6 3 (6面体のサイコロ3個) の出力例
出目 出現回数 出現率
---- -------- ------
  3    1  0.46
  4    3  1.39
  5    6  2.78
  6    10  4.63
  7    15  6.94
  8    21  9.72
  9    25 11.57
 10    27 12.50
 11    27 12.50
 12    25 11.57
 13    21  9.72
 14    15  6.94
 15    10  4.63
 16    6  2.78
 17    3  1.39
 18    1  0.46
22 :
2017/03/01(水) 13:58:21.66 ID:Zp9/LnCHM
これ組み合わせ爆発じゃないの
100 100とか
数式2,3発の繰り返しで解けるん?
23 :
2017/03/01(水) 14:12:58.32 ID:SH8mWFxKH
if(scanf("%d/%d/%d",&ip[i][0], &ip[i][1], &ip[i][2]) != 3)

2016/9/31 
こんな感じにしたいだけなんですけど
このscanfの「/」って、これであってるの?
24 :
2017/03/01(水) 14:56:55.78 ID:CsmSQFfHM
>>22
全部数えるつもりかっ!

多項定理だけど、やり方考えれば簡単だよ。
25 :
2017/03/01(水) 18:58:24.59 ID:U+4Jaa7CM
>>23
あってる
26 :
2017/03/02(木) 12:18:48.45 ID:d45T9FBrH
バスケットの試合だけど
1 3 2 4って入力して
1 対 3
2 対 4
scanf("%d %d", a, b);
scanf("%d %d", c, d);
戦わせたいけど、どうすればいい?
1234なら出来ます
27 :
2017/03/02(木) 12:20:28.47 ID:d45T9FBrH
バスケットの試合だけど
1 3 2 4って入力して
1 対 3
2 対 4
scanf("%d %d", a, b);
scanf("%d %d", c, d);
戦わせたいけど、どうすればいい?
1234なら出来ます
28 :
2017/03/02(木) 12:30:29.26 ID:ThTFWtPOH
誰か、日本語に翻訳してくれる?
29 :
2017/03/02(木) 19:58:32.35 ID:im503L5qM
scanf("%d %d %d %d", a, b, c, d);
printf("%d 対 %d\n", a, b);
printf("%d 対 %d\n", c, d);
30 :
2017/03/02(木) 19:59:53.68 ID:rOcShz1+M
&忘れた
scanf("%d %d %d %d", &a, &b, &c, &d);
31 :
2017/03/02(木) 20:54:24.64 ID:5j/mvvA0H
2431って、選択した場合、どうすればいい?
32 :
2017/03/02(木) 21:01:29.33 ID:1Cz3jM3f0
こんな短いセンテンスなのに日本語になってねぇっぇぇ
33 :
2017/03/02(木) 21:51:36.92 ID:i/E5609c0
>>20
c言語が初めてです
34 :
2017/03/02(木) 21:52:35.03 ID:i/E5609c0
>>11
おお!入門書によく書いてある!
35 :
2017/03/02(木) 21:53:39.85 ID:i/E5609c0
>>12
getopt?ありがとうございます
36 :
2017/03/02(木) 21:55:50.31 ID:i/E5609c0
>>11
cpuの作り方って本読めばいいですか?
37 :
2017/03/02(木) 22:09:22.01 ID:5e6GrT/2a
ひでーなw
38 :
2017/03/03(金) 00:40:14.71 ID:k4+TCMnG0
>>34
入門書読んでるならまずその本を理解したほうが早い
その入門書には>>11の事も書いてあるみたいだから
なおのことだぁね
39 :
2017/03/03(金) 05:56:03.66 ID:E6sRhrGi0
>>38
分かりました!ありがとうございます!
40 :
2017/03/03(金) 12:13:23.53 ID:+HYzVfFdH
>>27
オレもわからん
誰かわかる人いないの?
41 :
2017/03/03(金) 12:26:01.73 ID:qPJvyZtuM
42 :
2017/03/03(金) 13:45:06.80 ID:+HYzVfFdH
43 :
2017/03/03(金) 14:21:40.68 ID:Er93SBHi0
44 :
2017/03/03(金) 15:29:51.13 ID:IC83RcbMM
45 :
2017/03/03(金) 22:39:07.27 ID:Jp23eHYS0
初めまして
CCSC社のPICコンパイラで以下の問題が出てます、多分知識不足だと思うのですが、Cの挙動に関する知識でどういう所が足りないのでしょうか?

char string[5]; //UARTを受ける変数枠
float32 sig_ch; //UARTから数字へと変換したい

GETS(string); // UART文字列をかくほ
sig_ch = atoi(string); // ここで文字列から数字に変換する(このためにstdlib.hを使う)


if(sig_ch % 16 == 0){
set_4067_00();
}
else if((sig_ch%16)/0.0625 == 1){
set_4067_01();
}

と設定しているにもかかわらず、このif-else分だけ通りません。(他のif-elseは今の所エラーは吐いてない)
if文が16にOnly integers are supported for this operation
else if 文すべては elseにA numeric expression must appear here
となっています
46 :
2017/03/03(金) 22:50:41.79 ID:qE+VJ28k0
まずその前にsig_ch%16の結果は0.0625になりえないんじゃ?
(/0.0625で1になることがない)
47 :
2017/03/03(金) 22:54:39.58 ID:qE+VJ28k0
あ、float型なのか
float型に剰余計算(%)は出来ないからfmodとか関数を使う
48 :
2017/03/03(金) 22:57:05.38 ID:Jp23eHYS0
そうですか?
MATLABのコンソールを使って計算した時には1の位以上に整数が出ましたがxx.0625刻みで増えて行ってくれました。
それを見て、どの型で宣言しているかは分からないけど、余りの少数も取ればいいと思っていました

あれこの場合、余りって…どこからだろう?
49 :
2017/03/03(金) 22:59:54.16 ID:Jp23eHYS0
>>47
math.hで使えるみたいですね、多分実装されているはずですので試してみます。
50 :
2017/03/03(金) 23:17:40.37 ID:Jp23eHYS0
やったぜ……解決しました(白目

*** Error 71 "main.c" Line 852(1,2): Out of ROM, A segment or the program is too large MAIN
Seg 00800-00FFF, 0580 left, need 009D0
Seg 01000-017FF, 0800 left, need 009D0
Seg 01800-01FFF, 0800 left, need 009D0
Seg 00000-00002, 0000 left, need 009D0 Reserved
Seg 00003-007FF, 0001 left, need 009D0

解決しました……orz
51 :
デフォルトの名無しさん (アウアウオー Sabf-aPLm)
2017/03/04(土) 00:14:41.41 ID:U0LEsPrza
今度仕事で「Linux C」なる言語を使うらしのですが普通のC言語と
どう違うのでしょうか?
52 :
2017/03/04(土) 00:23:43.29 ID:l5kdYc5I0
構造体初期化時のデフォルト値などを、簡単に記述できるように、C言語を拡張している

便利な記述が幾つかある。
見たことない書き方があれば、拡張記法
53 :
2017/03/04(土) 00:28:42.38 ID:U0LEsPrza
>>52
ありがとうございます。Linux独自拡張がなされているのですね。
自分で調べてみます。
ちょっとびびってます。
54 :
2017/03/04(土) 03:03:47.82 ID:azJYKT3F0
Linux拡張っていうかgcc拡張って言うよな普通は
55 :
2017/03/04(土) 05:24:58.37 ID:QZk9D4JAa
linux cって言われたら、そこそこposix準拠してるとかが本題じゃないの?
コンパイラの話とは思わないわ
56 :
2017/03/04(土) 07:11:38.33 ID:l5kdYc5I0
Linux プログラミング・インタフェース、2012

manの著者が書いた、神の書!

この本の翻訳本が出版されたのは、日本だけじゃないか?
翻訳者の千住治郎が、技術指導もしている
57 :
2017/03/04(土) 16:43:54.18 ID:VFtHImK30
> 「Linux C」なる言語

初耳だったので思わずググったがそんなの無かった
58 :
2017/03/04(土) 17:16:50.40 ID:40RMudYn0
>>52
>構造体初期化時のデフォルト値などを、簡単に記述できるように、C言語を拡張している
これ、なんだよ
designated initializerならC99の標準機能だぞ
59 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/04(土) 18:25:01.39 ID:a1Qd0ocB0
C99対応がものすごい遅かったMSVCが標準だと思い込んでる人なんじゃない?たまに居るよ
60 :
2017/03/04(土) 18:49:55.83 ID:Zd7SxADN0
linux cってgccのことなの?いくらなんでもgccはgccと言うんじゃ…
61 :
2017/03/04(土) 19:00:06.09 ID:BXXAQhND0
多分、単にLinux上で動かせるCコンパイラってことだと
62 :
2017/03/04(土) 19:46:34.97 ID:afa8PN5D0
俺の予想ではapiが違うってだけのこと
63 :
2017/03/04(土) 20:35:51.73 ID:40RMudYn0
ID:l5kdYc5I0がうんこだと言う事以外は謎のまま
翻訳本が必要な事を恥じろ
64 :
デフォルトの名無しさん (アウアウカー Sa6f-k9EO)
2017/03/04(土) 21:34:53.05 ID:CpamcytIa
>>58
指示付きの初期化子と同機能で文法の違うgcc拡張は一応ある
古い拡張だし今では使う必要ないないけど、機能自体は残ってる
65 :
2017/03/04(土) 21:49:55.63 ID:40RMudYn0
An alternative syntax for this that has been obsolete since GCC 2.5 but GCC still accepts is to write ‘[index]’ before the element value, with no ‘=’.
int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
struct point p = { y: yvalue, x: xvalue };
こいつらの事?
66 :
2017/03/05(日) 00:28:44.10 ID:WMRVohp00
GNU拡張

条件演算子(三項演算子とも)である ? : の書式は、
operand1 ? operand2 : operand3

ですが、このうち第2オペランドを省略すると、第1オペランドの値が真の場合、式の値は第1オペランドの値になる…というのがありまして

operand1 ? : operand3
67 :
2017/03/05(日) 00:43:46.49 ID:WMRVohp00
KotlinでNullチェックする、エルビス演算子、?:
横から見れば、エルビス・プレスリーの顔に見える

変数 ?: デフォルト値
変数 ?: エラー処理

変数がnullなら、後ろを処理する。
変数がnull以外 → 何もしない
68 :
2017/03/05(日) 19:59:38.94 ID:FXcRiqza0
>>59
CはANSI-Cで完成しているからな。C99以降の仕様でどうしても必要なものなんてlong longくらい。
69 :
2017/03/05(日) 20:06:24.91 ID:hQyyoOdR0
こういう老害死なねーかな
死んでくれ とっとた
70 :
2017/03/05(日) 22:15:18.97 ID:VTxP7/2w0
まあ、C99以降については、レガシーなコンパイラの下位互換性を削ることになっても
仕様を変える必要性があったのか? という気はしないでもない。
71 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/05(日) 22:35:20.65 ID:qOQ2PN1U0
Cはもうそのままでいい気がしなくもない。
C11なんか誰が使ってんの?って感じだし。
72 :
2017/03/05(日) 22:39:34.38 ID:Z7K8qPrE0
むしろC99の方がうんこだよ,C89 で十分なのに意味不明な拡張をしたC99 or later は葬りさられるべき
>>68
long long を準備するくらいなら, sizeof(int) == 8 の処理系をさっさとつくるべき
73 :
2017/03/05(日) 22:39:39.21 ID:pZffxBVA0
でもgets廃止はもっと早くやるべきだった
使う側の問題ではあるが
74 :
2017/03/05(日) 22:46:24.51 ID:hQyyoOdR0
externの使い方知らない素人は引っ込んでろ
75 :
2017/03/05(日) 22:54:05.78 ID:Z7K8qPrE0
>>74
ライブラリ(の中で静的変数を確保するようなコード)でも書かない限り extern は不要
76 :
2017/03/05(日) 22:57:48.43 ID:pZffxBVA0
externはincludeで正直訳が分からなくなった
77 :
2017/03/05(日) 23:00:05.85 ID:Z7K8qPrE0
>>76
そんなときのための tentative definition
78 :
2017/03/05(日) 23:21:29.99 ID:1JomNGIg0
あんまりいじり回さないで欲しいね
79 :
2017/03/06(月) 01:17:27.44 ID:2/63ad4Z0
むしろレガシーコードをとっととC11に改変すべき最低でもC99
80 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/06(月) 01:33:56.85 ID:k6KUwGnB0
C11のThreadとかは良いけど実装してるコンパイラ知らない
Genericはゴミ
他は…あれば便利だけど特定のコンパイラでビルド出来なくなるデメリットに目を瞑ってまで使いたいとは思えない
81 :
デフォルトの名無しさん (ワッチョイ 1fe5-kMYg)
2017/03/06(月) 02:40:03.27 ID:i/MU6nkw0
kill関数ってwindows上だと機能しないんですか?
メモ帳のpidを1111として

kill(1111,SIGTERM);

としてもタスクキルされないのですが
82 :
2017/03/06(月) 03:20:51.34 ID:NUOafv2T0
Windowsの場合、APIを直接呼び出した方がトラブルが少ない(かも
http://support.microsoft.com/ja-jp/help/409542
83 :
2017/03/06(月) 07:23:55.49 ID:HrLL0BzwM
そもそも既定だと SIGTERM で終了しないだろ
84 :
2017/03/06(月) 07:44:56.29 ID:c2C1QaOD0
いまどきCなんて使えても何の役にも立ちませんが。。
85 :
2017/03/06(月) 08:00:30.96 ID:0PrPfpk/0
>>75
未だに理解してないようだな
グローバル変数を使う時に必要
86 :
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)
2017/03/06(月) 10:51:45.16 ID:DwMqYVii0
>>72
だよな
何でもかんでもゴテゴテつけるのは
ないなら作れというCの思想に反する
87 :
2017/03/06(月) 11:39:16.77 ID:0PrPfpk/0
ブロック先頭以外での変数定義
designated initializer
flexible array member
compound literal
snprintf

ついてこれないジジイが使わないのは勝手だが
懐古オナニーはジジイ仲間で見せあうだけにしておけ
88 :
2017/03/06(月) 12:12:38.80 ID:k/FbYHjZM
ブロック先頭で全変数が定義されてるとどこで使ってるのか分かりにくいよね。

ところで、一時的に使った変数を「これ以降使わないよ」って宣言できないかな?
undef みたいな感じで。
89 :
2017/03/06(月) 12:17:05.41 ID:GI3nM20k0
{ } で囲ってスコープ作れば多少コントロールしてる気分になる
90 :
2017/03/06(月) 13:09:58.99 ID:L9fnRYGMM
>>88
ブロック先頭で定義する方が使ってる変数が一目で分かっていいよ。
あとちゃんと設計されてる感がある
91 :
2017/03/06(月) 14:04:54.74 ID:turPSodzM
>>84
世の中の下位レイヤのほとんどのコードがC/C++
むしろほとんどのプラットフォームで未だに活躍中なんだがな
それを知らないって本当にPGか疑わしい
92 :
2017/03/06(月) 15:06:33.42 ID:c2C1QaOD0
Cなんてもはや一部の組み込みでジジイが組んでるくらいだろ
C++もC#かJavaに置き換わってるよ
世の中の流れから取り残されたジジイは黙ってろよwww
93 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/06(月) 15:18:24.25 ID:k6KUwGnB0
そのC#やJavaのVMがCやC++無しで実装できてないんだけど?
94 :
2017/03/06(月) 15:27:27.06 ID:wVaOk6lpM
マジで言ってるみたいでビビるわ
そのVMがプラットフォーム無しで動いてるとでも?
VMも所詮プラットフォーム上で動くただの上位レイヤのアプリでしかないだがね
そんなに言うならプラットフォーム自身をそのC#やらJavaで作ってみたらいい
取り残されているのは上位レイヤしか触れない連中だよ
まずそれを自覚した方がいいマジで
95 :
2017/03/06(月) 15:32:50.40 ID:GI3nM20k0
C# やら Java のコンパイラを作るC# やら Java のコードってあるの?
96 :
デフォルトの名無しさん (ワッチョイ 5b4e-xEld)
2017/03/06(月) 15:32:55.63 ID:B+jhZQKr0
つうかね、異なるレイヤを一緒に語るもんではないw
97 :
2017/03/06(月) 15:39:25.17 ID:c2C1QaOD0
なんでも一から作らなきゃいけないと思ってるバカ
C言語なんかでやってたら今主流のソフトなんて一生かかっても完成しない
C言語しか知らないバカ
98 :
2017/03/06(月) 15:41:41.99 ID:c2C1QaOD0
お前のそのC言語のソフト全部アセンブリで組んでみろよ



って言ってるのと同じくらいアホらしい意見でしかない
99 :
2017/03/06(月) 15:42:54.06 ID:lmlH3P4+0
若いな。
少し前の自分を見てるみたいで微笑ましい。
100 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/06(月) 15:45:11.54 ID:k6KUwGnB0
少し前のお前こんなバカだったの?
101 :
2017/03/06(月) 16:15:36.45 ID:26MVvIlFM
文盲しかいないな
誰も1からCで作れなんて言ってないじゃん
これだから馬鹿は困る
102 :
2017/03/06(月) 16:49:28.72 ID:0PrPfpk/0
>>90
低レベルすぎる
使い捨てるループ変数を先頭で定義することが「ちゃんと設計」

constで済む変数もconstに出来なかったり
あっ、お爺ちゃんはconstなんて知らないか
103 :
2017/03/06(月) 17:01:10.73 ID:wb/Uuzufa
つかアセンブリも必要だし…なぜ用途の違いで割り切れないのか
104 :
2017/03/06(月) 17:06:52.49 ID:B+jhZQKr0
揺るぎない安定感、着実な一歩。
105 :
2017/03/06(月) 17:16:44.41 ID:Sa3Mqufl0
>>102
ループ変数ってまさにブロックの先頭で宣言するよね
106 :
2017/03/06(月) 18:00:32.13 ID:aYtCVo5YM
>>102
C言語にもconstあるよ
知らなかった?
これでまた1つ勉強になって良かったね
107 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/06(月) 18:18:39.71 ID:k6KUwGnB0
>>106
最後の煽りはともかくそういう意味じゃないでしょ。
途中で宣言出来ないとconstに出来ないものもあるって話だと思う。
例えばこういうの

a_init(a);
const int c=f(a);
108 :
2017/03/06(月) 18:24:17.23 ID:0PrPfpk/0
>>105
しねーよ
109 :
2017/03/06(月) 18:25:49.45 ID:0PrPfpk/0
>>106
頭悪りーな
110 :
2017/03/06(月) 18:42:01.64 ID:X6GSlxMnM
for初期化時の変数宣言は確かに無いと困るね
態々ブロックで包むのもだるいし
111 :
2017/03/06(月) 19:31:24.39 ID:CMFZE9+kM
>>107
それ出来るけど
C99かC11で
112 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/06(月) 19:39:13.31 ID:k6KUwGnB0
>>111
だーかーらーC88で十分でブロックの先頭だけで宣言出来ればいいって言ってる奴に対して言ってるんだっての…
他人の発言を代わりに説明してあげてる俺バカみたいだからこれ以上ツッコミあっても答えねえよ
113 :
2017/03/06(月) 19:41:23.20 ID:0PrPfpk/0
>>111
本当に頭悪い
114 :
2017/03/06(月) 19:45:49.72 ID:qEORy0cSM
>>95
あるかどうかは知らんけど普通に作れるでしょ
テキスト読んでバイナリ吐ければいいのでモダンな言語ならできない言語の方が珍しいかと
115 :
2017/03/06(月) 20:30:36.37 ID:M+lJg41m0
>>85
単なるグローバル変数をつかうのならば,tentative definition で十分
116 :
2017/03/06(月) 20:31:42.36 ID:M+lJg41m0
>>88
そういうときには { } で小分けにすればいいだけ
というか,やたらめったらに変数を量産するからそんな目にあう
117 :
2017/03/06(月) 20:33:01.44 ID:M+lJg41m0
>>95
Javaコンパイラ,C#コンパイラを名乗るのだったら,自分自身をコンパイルできなければだめだね
118 :
2017/03/06(月) 20:34:27.16 ID:M+lJg41m0
>>112
C89 だよ,いちど文法を調べてみなよ,必要十分とはまさにこのこと
119 :
2017/03/06(月) 21:11:28.16 ID:0PrPfpk/0
>>115
まだ理解してないのかバカが1匹
120 :
2017/03/06(月) 22:21:37.05 ID:c2C1QaOD0
バカバカ言ってるおっさん
C言語しか分からない時代遅れの上に知恵遅れだなw
121 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/06(月) 22:38:00.23 ID:k6KUwGnB0
>>120
なんでC言語しか分からないって事がお前に解るの?
122 :
2017/03/06(月) 22:58:16.40 ID:HD9d9iiPM
天啓が下ったぁ
123 :
2017/03/06(月) 23:52:25.88 ID:0PrPfpk/0
>>120
CLRやJavaVMの記述言語がわからないド底辺か
124 :
2017/03/06(月) 23:53:15.16 ID:1xt4bVO70
2chを10年くらいやり続けると、
しっぽが9本生えてきて、
透視能力も身につくらしい
125 :
2017/03/07(火) 00:00:35.92 ID:O3agX0W90
C言語なんて安い仕事しか出来ないものにしがみついてるバカだから
当然C言語しか出来ないに決まっているw
これがバカでなきゃ何なんだよwww
126 :
2017/03/07(火) 00:26:11.17 ID:54fjNwR80
C/C++, Java, C#, VB, VB.Net, Ruby, Python出来るよ
Cが出来れば他の言語は比較的かんたんに覚えられる
127 :
2017/03/07(火) 07:44:28.92 ID:t7Ngew/R0
宗教家が発狂中!
128 :
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)
2017/03/07(火) 09:22:52.75 ID:O/JMqbZP0
>>125
へー、おまえ安い仕事にしかありつけないのか
低スキルですって自己紹介しなくていいのにw
129 :
2017/03/07(火) 10:06:01.46 ID:iKWZ1BlO0
>>125
非正規はそう言う状態なのか? そりゃかわいそう
130 :
2017/03/07(火) 11:36:26.32 ID:Op3K+dMb0
賃金やら契約条件やらの話はプログラマー板の方じゃないかえ?
良く知らないけど。
131 :
2017/03/07(火) 12:58:47.82 ID:7YWE/8fn0
>>95
Javaは知らんけど、C#のコンパイラはC#製
132 :
2017/03/07(火) 17:58:00.93 ID:sN5zB8qN0
>>131
それは感心なこころがけだ
133 :
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)
2017/03/07(火) 18:06:57.58 ID:MCZ/J11a0
>>131
CLRは3割がC++だけどな
134 :
2017/03/07(火) 18:25:09.22 ID:sN5zB8qN0
>>87
老人のために翻訳してあげるよ

designated initializer 指示つきの初期化子 struct S { int a; int b; } Obj = { .a = 12, .b = 34 };
flexible array member 最後のメンバーが不定長構造体、でもこの技は昔から、たとえば C FAQ でもすでに言及されているよね
compound literal 複合リテラル 無名の一時オブジェクトを構文で作ることができるやつ、関数の引数で無名で T の一時変数をつくりたいときに (T){.a = 12, .b = 34} と一時変数をつくれる
snprintf シグナチャーは int snprintf(char *s, int n, const char *format) ようは sprintf() のセキュリティ強化版

初期化子がらみについて文句をいうとすれば、どうせ拡張するんだったら C++11 later に完全にあわせてほしかったね…
135 :
2017/03/07(火) 20:20:26.79 ID:iKWZ1BlO0
>>134
ウソを混ぜて翻訳しなくて良い

ついてこれないんだろ
ジジイは老人会に引っ込んでろ
136 :
2017/03/07(火) 20:43:36.34 ID:C5UF9tvt0
>>135
どこが嘘だというのか?
具体的に指摘できないのか?
137 :
2017/03/07(火) 20:49:41.64 ID:l+KB4C7U0
ゆとりvsジジイ
138 :
2017/03/07(火) 20:54:39.52 ID:C5UF9tvt0
https://www.youtube.com/watch?v=Y_oD0ZWfWz4
頭のいい人は,しゃべるときも明晰な論理を貫徹するね
139 :
2017/03/07(火) 21:08:01.87 ID:iKWZ1BlO0
未だ炎上学習法実践してんか、特別に教えてやるよ
> flexible array member 最後のメンバーが不定長構造体、でもこの技は昔から、たとえば C FAQ でもすでに言及されているよね
140 :
デフォルトの名無しさん (ワッチョイ 1f5b-wJyW)
2017/03/07(火) 21:17:17.06 ID:dyD8NGJK0
みんな相手にするんじゃないぞ。
ちょっと頭がアレなやつなんだからよ。
141 :
デフォルトの名無しさん (ワッチョイ 0f31-3D2C)
2017/03/07(火) 21:54:59.55 ID:9V/NxRrg0
この煽りは上級者だな(煽り上級者の資格は何処で取れるんだ?)

問題はC言語で何を作るか何だけど?
やっぱり、ある程度は作るモノは決まってたりするの?
142 :
2017/03/07(火) 22:13:28.75 ID:jqZP77OvM
FPGAに書き込んでるよ
143 :
2017/03/07(火) 22:36:56.12 ID:cCh6hZTkM
FPGAに実装した8051で実行。
144 :
2017/03/08(水) 05:32:52.19 ID:fg5w6sCm0
もはやC言語の仕事なんてない
廃棄寸前の過去の組み込み機器のメンテとか?
今ならJavaか少なくともせいぜいC++だろうよ
C++もJavaかC#におきかわりつつあるし
C++も出来ない50歳くらいのジジイプログラマってたまにいるけど
だいたいブラック派遣で年収も300万くらいらしいわw
もう死ねよwww
145 :
2017/03/08(水) 05:55:29.49 ID:7Auc+YVy0
最近だと組み込みLinuxならC++ではなくてPythonかな
146 :
2017/03/08(水) 07:36:40.41 ID:3IqnA1f/0
>>139
ちょっと言葉が足りなかったね
flexible array member 最後のメンバーが不定長配列(a[0]とか),結果として全体が不定長構造体,
でもやっぱりこの技は昔から C FAQ でも言及されてるんだよな‥C89 では a[0] とかけないので,a[1] にしているよ
147 :
2017/03/08(水) 08:23:34.70 ID:Wr2kD9p+a
プログラムをろくに書けない奴に限って古い、新しいで騙る

プログラマは仕事によるレイヤーで語る
148 :
デフォルトの名無しさん (アウアウカー Sa6f-k9EO)
2017/03/08(水) 08:50:28.85 ID:ZrUr+Lkoa
>>146
要素数0じゃなくて、要素数の省略だろ
というか、要素数に0を指定するのって未定義じゃなかったっけ
149 :
2017/03/08(水) 09:43:12.83 ID:tKO0gCMl0
>>146
30点
ジジイは無理について来ようとしなくて良い
150 :
2017/03/08(水) 12:35:59.22 ID:/EX97NIO0
>>148
そうか、要素数を0とできたのは gcc 拡張だったかもしれないね

>>149
この手のものは昔からある手法だよ、バンバンつかっていたよね、
別に flexible array membe と名前がつかなくても問題ないよね
http://www.kouno.jp/home/c_faq/c2.html#6

C99 で追いついたとおもっている若者はお前かね?
151 :
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)
2017/03/08(水) 15:00:08.45 ID:DNe+Lf9O0
a[1]で書けてたのにa[0]ができるようになったからって
それは気分の問題で本質的には何も変わってないんだよ
ヤダジタするガキにくれてやるおしゃぶりという意味で_Boolと同じだ
152 :
2017/03/08(水) 15:45:17.33 ID:Ms4iQyEm0
sizeof とったときに 末尾可変実現箇所の部分の大きさが含まれるかどうか
153 :
2017/03/08(水) 15:57:06.21 ID:tKO0gCMl0
>>150
30点 的外れな戯言並べても採点は変わらない
ジジイは無理すんな w
154 :
2017/03/08(水) 18:00:32.85 ID:/EX97NIO0
>>151
そうだよね
C99 は全般的にいって今更感がぬぐえない

>>152
わかるが、サイズが1変わるかどうかなんて、どうでもいい問題に思っていた
155 :
2017/03/08(水) 18:38:53.79 ID:ERQkfdVq0
C99は今更なんじゃなくて、やっと現実に近づいたというところでしょ
コンパイラ拡張に依存したり、わかりにくいマクロが減らせる
156 :
2017/03/08(水) 18:45:04.00 ID:/EX97NIO0
>>155
いやね、C89 で十分という気がして仕方がない
仮に C89 処理系を作っていたとして、それを C99 に適合させる気力が湧くか、考えてみるけれどもたぶんやる気がでないだろう
あの alloca() の改変である実行時領域確保配列なんかは筋悪にしかみえない、たしか C11 とか C++ ではオプションになったとか、それもよくわかる
157 :
2017/03/08(水) 18:57:25.94 ID:YeRun3zZ0
>>154
たかが1要素 されど1要素

その要素が 1バイトかもしれないし 1ページかもしれないw
158 :
2017/03/08(水) 19:53:45.80 ID:N8HM6lINM
>>154
> わかるが、サイズが1変わるかどうかなんて、どうでもいい問題に思っていた
こういう奴は信用できない
159 :
デフォルトの名無しさん (ワッチョイ 5b4e-xEld)
2017/03/08(水) 20:38:19.19 ID:59T19xUI0
VLAって筋悪か?
160 :
デフォルトの名無しさん (ワッチョイ bb4e-CqFM)
2017/03/08(水) 20:58:52.57 ID:muMKoRUn0
>>159
正直使いどころがわからん。
161 :
2017/03/08(水) 21:05:16.11 ID:nYBrtmF60
組込分野はC89に対応してるならまだマシな部類じゃね
そうじゃないなら単にやる気の問題だろうけど
162 :
2017/03/08(水) 21:12:01.33 ID:tKO0gCMl0
>>160
ループの中で繰り返し毎に異なるサイズ確保する場合に重宝する
allocaの改変とか言ってるついてこれないジジイは無視しておけ
163 :
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)
2017/03/08(水) 21:56:56.05 ID:DNe+Lf9O0
>>152
で? a[1]で書けてたときに問題になってたか?
164 :
2017/03/08(水) 22:09:34.99 ID:tKO0gCMl0
>>163
a[1]では問題があった、flexible array memberで無くなった
165 :
2017/03/08(水) 22:45:59.22 ID:sHqr9nhTM
最低でもC99は必須
俺的には少なくともstdint.hは必須
166 :
2017/03/08(水) 23:12:32.85 ID:oksZ54sT0
まぁ標準化されたのはいいけど、みんなそれ以前から自前で用意してたよね。
167 :
2017/03/08(水) 23:15:10.17 ID:nYBrtmF60
まあ移植性は重要だよな
168 :
デフォルトの名無しさん (アウアウカー Sa6f-k9EO)
2017/03/08(水) 23:19:37.95 ID:kUhBpeLWa
>>166
してるけど、64bit環境とか考慮できてない腐ったコードもあるからな

flexible array memberなんかも末尾配列の要素数に0とか1指定でそれっぽいことはできていたけど、未定義を踏まざるを得なかった
それが規格に則って書けるようになるってのは良いことだと思うけどな
169 :
2017/03/08(水) 23:25:57.49 ID:oksZ54sT0
規格として移植性が良くなるのは正解なんだけど、使う側からすると、新しい規格が
十分に普及するまでは逆に移植性が悪くなるというジレンマ。
170 :
2017/03/08(水) 23:27:52.41 ID:jyzNIqf90
C89で基本は完成されたね。
どうしてもC99でないと困るってことはないけど
//コメントとかinttypes.hはよく使うから、あれば便利
171 :
デフォルトの名無しさん (ワッチョイ bb4e-CqFM)
2017/03/08(水) 23:29:36.18 ID:muMKoRUn0
>>162
その意味がわからないんだけど…
最大値を気にせず確保することなんてありえるの?
172 :
デフォルトの名無しさん (ワッチョイ 134e-ATAZ)
2017/03/09(木) 01:29:12.80 ID:3g6CLylS0
実行時に配列のサイズが決まるわけよ。
例えば引数によってとか。
173 :
デフォルトの名無しさん (ワッチョイ fb4e-HNYZ)
2017/03/09(木) 02:11:21.55 ID:Kb3gKMEf0
いや、だから、最大値を決めておかないのか?って事を突っ込んでいるのだが…
しかも外部入力でリミット切らないとか、セキュリティホールの典型じゃね?
で、最大値決めるって事は、可変にする必要がないって事だと思うんだが…
174 :
デフォルトの名無しさん (ワッチョイ 134e-ATAZ)
2017/03/09(木) 06:20:42.92 ID:3g6CLylS0
つうかVLAって要素数に変数を使えることが大きいんじゃないかな
int size = a / b;
int array[size] = {0}; 
sizeは実行時に決まるが問題の無い範囲であるのが保証できる場合、
計算結果であるsizeを再利用できるのでパフォーマンスがいい
175 :
2017/03/09(木) 06:38:53.59 ID:K/l9Si6sM
>>173
常に最大値で配列切っとけってこと?
いやそうしたけりゃお前はそうすればいいと思うよ
176 :
2017/03/09(木) 07:10:53.29 ID:hGM1T24/0
>>175
VLA はセキュリティの穴になりうるね,実行時の値で配列の上限が決まるなんて危険な発想ではないかい?
そんなものを標準に入れていいのか?

>>174
配列の要素数がパフォーマンスに関係することなんかないんでないかい?
177 :
2017/03/09(木) 07:44:22.47 ID:K/l9Si6sM
>>176
(バカが使えば)
> VLA はセキュリティの穴になりうる

VLA に限った話じゃないけどね
178 :
2017/03/09(木) 08:08:41.65 ID:dsGfio+6M
VLAそのものがセキュリティホールになる理由がわからん
外部入力でサイズが決まるとしても起こりうるのは
スタックオーバーフローくらいのもんだろ
そんなのは再帰が深くなりすぎても起こる
たとえmallocに変えたところで問題がスタックからヒープに移るだけ
179 :
2017/03/09(木) 08:08:57.49 ID:F9CUJ5lt0
if(size <100){
int array[size] = {0};
}
解決策考えたよ
180 :
2017/03/09(木) 08:29:50.20 ID:QUckDsXy0
>>173
何言ってんだバカ
VLAのサイズと最大値は全く独立だ

お前の心配するセキュリティホールの実例出してみろよ
笑ってやるから
181 :
デフォルトの名無しさん (ワッチョイ fb4e-HNYZ)
2017/03/09(木) 08:59:36.08 ID:Kb3gKMEf0
>>180
google で
「スタックオーバーフロー セキュリティ」
を検索して最初に表示されるページを読んでから反応しなよ…
182 :
2017/03/09(木) 09:08:20.35 ID:F9CUJ5lt0
>>181
そのサイト凄いな、時間計って読んでみたらちょうど5分で読み終わった。
183 :
2017/03/09(木) 09:14:10.67 ID:QUckDsXy0
>>181
とっとと、実例を出せよ
笑ってやるから

スタックオーバーフローのメカニズムわかってないだろ w
184 :
2017/03/09(木) 09:31:48.50 ID:iRW4jXC40
外部から悪意あるコードを突っ込んでそのコードにジャンプさせうることが
VLAの機構の中にリスクが内在してて可能になっちゃうということ?
185 :
2017/03/09(木) 09:50:34.19 ID:F9CUJ5lt0
int array[size] ; で。
sizeをリターンアドレスの一個前にもってくるようにして
次に都合よくgetsが出てくるから、そこでジャンプ後のアドレス+
悪意あるコードを入力すると関数から戻ったとき悪意あるコードが
実行されるってことを言いたいんだろ
186 :
2017/03/09(木) 10:00:19.43 ID:QUckDsXy0
>>176
>VLA はセキュリティの穴になりうるね,実行時の値で配列の上限が決まるなんて危険な発想ではないかい?
>そんなものを標準に入れていいのか?
snprintf不要と言ってるジジイの発言らしくないな
187 :
2017/03/09(木) 11:39:27.23 ID:LxMtt/hf0
ラン・オーバー・ラン
188 :
2017/03/09(木) 11:46:44.45 ID:iRW4jXC40
Run "CINDY" Run
189 :
2017/03/09(木) 12:19:27.12 ID:9nAslxZ/0
C99にわかはこれだから困る

>>180
>VLAのサイズと最大値は全く独立だ

では聞くが、VLA はどこに確保されるの?スタックなの?ヒープなの?
190 :
デフォルトの名無しさん (ワッチョイ 134e-ATAZ)
2017/03/09(木) 14:10:16.74 ID:3g6CLylS0
>>176
パフォーマンスに影響する(場合がある)のは、要素数じゃなく式の値(a / b)の再利用
191 :
デフォルトの名無しさん (ワッチョイ 134e-ATAZ)
2017/03/09(木) 14:17:05.30 ID:3g6CLylS0
まあ最大値で確保すれば解決する、というかVLA未サポートならそうするわけだけど、
VLAが使えるなら使っちゃうなあ
192 :
2017/03/09(木) 15:18:40.35 ID:QUckDsXy0
>>189
ついてこれないジジイは無理すんな
スタック領域を1000000以上拡張出来ないと仮定して

int a[1000000];

int l = 1000000;
...
int a[l];

どちらも拡張失敗するのは実行時
VLAだから失敗するわけじゃない

snprintfに関しての言い訳はしないのか?
193 :
2017/03/09(木) 18:29:43.99 ID:9nAslxZ/0
>>192
質問を繰り返そう
VLA はどこに確保されるの?スタックなの?ヒープなの?はっきりさせてよ

>snprintf
安全だからありがたく使わせていただきますけれども、C99 の目玉ってわけでもないかと
194 :
2017/03/09(木) 18:33:38.26 ID:9nAslxZ/0
>>191
そうなんだ…
新しいものを避けるのは、私ももう老人ってことかもね
alloca() をバンバン使ってる口だから(alloca() は実装されてない系もある)、そこんところの実装がはっきりしてるんだったら使ってもいいかな
195 :
2017/03/09(木) 18:44:49.43 ID:9nAslxZ/0
>>168
なるほどね、規格になった、てことで意味があるんだね
flexible array member も VLA も昔からある作法だし、C89 で十分だ、って頑なに思っていたけれども考え直してもいいかもね
196 :
2017/03/09(木) 18:47:48.68 ID:LA1Z4pgPM
>>191
最大値の大きさによるけどでかいなら俺はヒープにとる
197 :
2017/03/09(木) 18:57:57.10 ID:QUckDsXy0
>>193
>>192で回答済みだが、ジジイは分からないようだから答えてやろう
固定長アレイが確保されるのと同じ領域
大部分の実装ではスタック

で、それが何か?
198 :
2017/03/09(木) 18:58:32.59 ID:9TBsKkVvH
>>193
どこに確保されるかわかると嬉しいことでもあるの?
実際、どこに確保されるかは決まっていない
199 :
2017/03/09(木) 18:59:10.03 ID:QUckDsXy0
>>195
>flexible array member も VLA も昔からある作法だし、
ねーよ、ジジイ
200 :
2017/03/09(木) 19:17:51.15 ID:fyCowO4bM
C99は便利機能が云々ってよりは
クリーンなコードの為のガイドラインに近い気がする
201 :
2017/03/09(木) 19:30:40.14 ID:9nAslxZ/0
>>198
そうだね、強いて述べると安心感だね
alloca() とからくりが同じなら、よくわかるし、なによりも今までずっと使ってきたから安心だ、そこんところは規格に書いてないの?

>>198
VLA の確保領域がスタックなら、十中八九それは alloca() と同じだろうね
いいたいことは、C99 の大部分が、C89 ですでにやってきたことだ、ということだよ

>>86
>ついてこれないジジイが使わないのは勝手だが
とあるが、
実のところ、諸々のことは昔からやってきたことで、C89 を味わっているクラスとしては、C99 は今更感が強いんだよ
いや、今更感というのもしっくりこないな、なんというか、字面だけで見栄えがいいというだけで規格している、というか、
スタックかヒープかをはっきりさせないところというか

少なくとも、C++11 の右辺値参照ほどのインパクトは、ない

>>199
それは無知というほかはない
202 :
2017/03/09(木) 19:54:01.97 ID:QUckDsXy0
>>201
>それは無知というほかはない
まさかc faq 2.6がflexible array memberだと言う主張が?
これまでの戯言読む限りはそうっぽいが w
203 :
2017/03/09(木) 19:56:31.69 ID:9nAslxZ/0
>>202
そのとおりだよ

そうじゃないというのなら、
お前のいうところの flexible array member を使ったコードを書いてみてくれないかな?
お前のいうところの flexible array member の必要性を明示するコードを頼む
204 :
2017/03/09(木) 20:02:02.08 ID:LA1Z4pgPM
あの〜、セキュリティ云々の話は知ったかしちゃいました
って言うことでいいのかな?
205 :
2017/03/09(木) 20:13:40.89 ID:F9CUJ5lt0
自分の書いたコードがいつか世界中に出回ってインジェクションアタックの標的にされるかもしれない
そんなふうに考えていた時期が俺にもありました
206 :
2017/03/09(木) 20:18:03.80 ID:QUckDsXy0
>>203
ジジイのくせに基本的なこと知らねーのな

c faq 2.6はstruct hackと呼ばれる【技法】
初めは長さ1のアレイで実装されてた
gccだかどっかが長さ0のアレイを許して大きさの計算を楽にした
でも、規格に完全に適合して無かった
大きな長さのアレイで実装する事が提案されたが、とてもダサかった
struct hackを規格に適合して実装するためのC99の【言語機能】がflexible array memberだ
207 :
2017/03/09(木) 20:21:37.39 ID:QUckDsXy0
>>201
>実のところ、諸々のことは昔からやってきたことで、C89 を味わっているクラスとしては、C99 は今更感が強いんだよ
>いや、今更感というのもしっくりこないな、なんというか、字面だけで見栄えがいいというだけで規格している、というか、
>スタックかヒープかをはっきりさせないところというか

長くやってても、何も理解していないと言う悪い見本
208 :
2017/03/09(木) 20:39:48.15 ID:eJ64f19XM
C99の規格にスタックとかヒープとかいう概念はなかったはず
209 :
2017/03/09(木) 21:02:30.09 ID:hGM1T24/0
>>206
つまり C FAQ 2.6 が発展解消 flexible array member につながるんだね
結局,昔からやってきたことだね,VLA も同じだね

>>208
まあ,そうだが
210 :
2017/03/09(木) 21:07:29.41 ID:hGM1T24/0
>>204
あはは,alloca() と同じだったんなら,まあ VLA でもいっか‥と転向しました,てへぺろ
211 :
2017/03/09(木) 21:15:22.33 ID:QUckDsXy0
>>209
【技法】と【言語機能】の区別つけような ジジイ
212 :
2017/03/09(木) 21:17:42.13 ID:QUckDsXy0
>>210
あー、つまりVLAがどこに確保されるか知らないで
筋悪っ とか言ってたって事ね 死ねジジイ
213 :
2017/03/10(金) 00:57:30.56 ID:+YP/FacCM
で、セキュリティホールの話は?
214 :
2017/03/10(金) 01:08:50.79 ID:1BLND3090
181 デフォルトの名無しさん (ワッチョイ fb4e-HNYZ)[] 2017/03/09(木) 08:59:36.08 ID:Kb3gKMEf0

>>180
google で
「スタックオーバーフロー セキュリティ」
を検索して最初に表示されるページを読んでから反応しなよ…
215 :
2017/03/10(金) 01:22:38.60 ID:+YP/FacCM
>>214
環境によって順位が変わりうるので具体的なURLよろ
216 :
2017/03/10(金) 02:56:17.07 ID:7J5p523R0
valgrindでexpとかtanがエラー出るのなんでだろう
217 :
2017/03/10(金) 07:35:26.46 ID:Jt0Ka4fq0
>>212
alloca() をずっと使ってきたといったろう?VLA もおそらくそんなところだろうと想像してはいたね,
ただ筋悪だと思うことは今でも変わらないよ,配列は普通に固定長で書いたほうがいい,という主観だからね
ただここで意見をいただいて(お前からもいただいた,と思っているよ)スタンスの一部が変わったかもしれない

>>211
>>206 までさも大事なことのように出し惜しみしていた内容だが
実は >>168 ですでに述べられていることだったね
218 :
2017/03/10(金) 08:06:05.30 ID:V/tY9QS2M
>>217
お前がやることは

知ったかしてよく知らないのに >>173 のレスをしてしまいました
ごめんなさい

だろ
219 :
2017/03/10(金) 08:33:50.79 ID:9tLH1/xpa
技術的な議論で人格攻撃するのはやめなよ
220 :
2017/03/10(金) 08:43:28.66 ID:1BLND3090
おい、ID:Kb3gKMEf0出て来いよ
221 :
2017/03/10(金) 08:59:33.13 ID:USScrCM40
VLAだからこそ、それがセキュリティーホールになるに至ってない
スタックオーバーフローは起こせるけど
そこからどうやってセキュリティーホールたる
悪意のあるコードの注入と実行に至るのか知りたい

確保サイズを超えての書き込み(オーバーラン)は
セキュリティーホールに成り得るけど、それはVLAだろうが固定だろうが同じだし
222 :
2017/03/10(金) 09:12:05.47 ID:OTPF9/DXM
>>220
次に出てくる確率はどのくらいだろうね?
223 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/10(金) 09:15:12.97 ID:1BLND3090
>>217
VLAがどこに確保されるか確認したくて粘着してたと言い訳するのか?
じゃ、答え合わせが終わったところで、

> VLAのサイズと最大値は全く独立だ
につけてきた言いがかりは撤回するって事だな。
224 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/10(金) 09:54:31.76 ID:1BLND3090
ID:Kb3gKMEf0は逃亡しちゃったようだからもう一匹の当事者
セキュリティの穴を説明しろ

>>176 : ◆QZaw55cn4c (ワッチョイ be13-H6F/)2017/03/09(木) 07:10:53.29 ID:hGM1T24/0
> >>175
> VLA はセキュリティの穴になりうるね,実行時の値で配列の上限が決まるなんて危険な発想ではないかい?
> そんなものを標準に入れていいのか?
225 :
2017/03/10(金) 10:02:29.68 ID:YR4SAqR10
セキュリティーの穴とはセキュリティーホールの事です
セキュリティーホールとは安全のホールの事です
安全のホールとは安全の穴の事です。
安全の穴とは自分で調べろカスということです。
226 :
デフォルトの名無しさん (エーイモ SEb2-j8zu)
2017/03/10(金) 11:15:35.92 ID:+H2nFcdAE
苦cで学んでるけどc難しい
227 :
2017/03/10(金) 12:34:51.49 ID:6UnBWLdUa
苦Cくらいの基礎的な部分は他の高級言語と比べるとわかりやすいと思うけどね
そいつらよか機械寄りの言語だからブラックボックスが少ないし
ただ暗記より理解が大事にはなる
人間の視点を捨てて機械の気持ちになるんだ
228 :
2017/03/10(金) 12:46:04.08 ID:b/HgXddWM
俺は人間をやめるぞ!
229 :
2017/03/10(金) 13:47:06.37 ID:YR4SAqR10
妖怪人間になるのか?
230 :
2017/03/10(金) 13:56:43.32 ID:LsCbePTG0
メーテル・・・
231 :
2017/03/10(金) 18:35:04.54 ID:JlJm70jl0
>>223
「VLA って alloca() のことじゃない、類似品なら C89 のときからあるよね」
「flexible array member って C FAQ に書いてあるじゃない、類似品なら C89 のときからあるよね」

「C99 についてこれないと老人よばわりするけど、実は昔からあるよね」
232 :
2017/03/10(金) 18:40:21.38 ID:JlJm70jl0
>>218
>>173 は別人だよ

でもね、スタックに配列を置くんだったら基本固定長だね、まあ alloca() を使ってみたりするくらいだから自分も首尾一貫はしていないのは認めるけどね

>>173 の指摘はするどいね
>外部入力でリミット切らないとか、
自分もこわくてできないね
233 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/10(金) 19:05:25.98 ID:1BLND3090
>>231
>>217
VLAがどこに確保されるか確認したくて粘着してたと言い訳するのか?
じゃ、答え合わせが終わったところで、

> VLAのサイズと最大値は全く独立だ
につけてきた言いがかりは撤回するって事だな。
234 :
2017/03/10(金) 19:06:34.39 ID:YR4SAqR10
俺はリミット切らないぜ〜ワイルドだろ〜
235 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/10(金) 19:10:43.67 ID:1BLND3090
>>232
allocaは平気で使ってるようだけど、なんでVLAは
> >外部入力でリミット切らないとか、
> 自分もこわくてできないね
これなんだ? 謎
236 :
2017/03/10(金) 19:32:49.66 ID:V/tY9QS2M
>>232
別人ならすまん

> >>173 の指摘はするどいね
> >外部入力でリミット切らないとか、
> 自分もこわくてできないね
これはセキュリティホールの話かね?
そうだと言うならどこがどう危険なのか詳しく説明して欲しいんだが
237 :
2017/03/10(金) 19:33:05.83 ID:JlJm70jl0
>>235
首尾一貫していないのは認めるよ、でもスタックに何でも乗せまくるのは怖いね
データをスタックに置き、スタックからヒープに移す一連の作業では、データ用の配列は固定長にするね、そこらへんは慎重にやってるよ
alloca のいいところは使い捨てができるところだね

いいたいことは >>231
238 :
2017/03/10(金) 19:37:50.00 ID:JlJm70jl0
>>236
セキュリティホールも視野にいれているが、直接は関係ないかもしれないね
セキュリティホールは、書いている時点では予想もつかないところがあるから(ミスは事前にはわからない)
自分の能力を考えて、スタックには固定長をあてるようにしているよ
固定長の定数を最低限に振って(N=2 くらい)、それでも正常に動くことを確認したりしてから N=1024 とか 4096 とか適当にわりふっているよ

自分の能力を過信しないことだよ
だから VLA は使わない
239 :
2017/03/10(金) 19:59:52.49 ID:V/tY9QS2M
>>238
もう言ってることがむちゃくちゃだな...

> セキュリティホールも視野にいれているが、直接は関係ないかもしれないね
結局関係あるかどうかも知らないのに
> >>173 の指摘はするどいね
とか言ってたのかよ

> セキュリティホールは、書いている時点では予想もつかないところがあるから(ミスは事前にはわからない)
今の話に関係ないよな

> 自分の能力を考えて、スタックには固定長をあてるようにしているよ
お前の能力なんてどうでもいいし、プログラムの作り方もどうでもいい(部下がやってたら張り倒すけど)

> 自分の能力を過信しないことだよ
鏡を見た方がいいぞ

> だから VLA は使わない
これもどうでもいい結論だな
240 :
2017/03/10(金) 20:00:22.53 ID:cy2JzExTH
allocaは使うのに?
241 :
2017/03/10(金) 20:06:19.22 ID:Y9Psq7+lM
1関数でスタッフを使っていいのはせいぜいキロバイトオーダーまで
メガバイト以上はヒープ推薦
242 :
2017/03/10(金) 20:06:51.85 ID:YR4SAqR10
VLAは政府の陰謀だから使っては駄目だ
243 :
デフォルトの名無しさん (ワッチョイ f217-csvI)
2017/03/10(金) 20:44:24.96 ID:n8W4k0Sb0
Windowsのカーネルモードは12KBのスタックサイズ制限があるので、ひとつの関数で数KBスタックを使うのはかなり贅沢。
244 :
2017/03/10(金) 20:45:49.50 ID:Jt0Ka4fq0
>>240
まあ,そうだね
245 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/10(金) 21:57:09.32 ID:1BLND3090
>>238
非標準ライブラリのallocaは使うのにVLAを使わない理由はなんだ
逃げてないで答えろよ
246 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/10(金) 21:59:24.00 ID:1BLND3090
>>238
非標準ライブラリのallocaはセキュリティ上問題ない(だから使う)として
一方でVLAはセキュリティ上問題あるとしている根拠を述べよ
247 :
2017/03/11(土) 00:59:17.54 ID:99Bu6VN70
VLAって本当になんであるんだろうな。
ソフトウェアの脆弱性を誘発するためにNSAやアメリカ政府が無理やりぶち込んだ仕様としか思えない。
248 :
2017/03/11(土) 01:24:57.09 ID:37V8Z39XM
>>247
どんな脆弱性?
249 :
2017/03/11(土) 01:44:41.71 ID:o4rVijF20
>>241
スタックサイズ拡張したらダメなの?
250 :
2017/03/11(土) 05:56:56.37 ID:0cGmXZ4gM
>>247
> NSAやアメリカ政府が無理やりぶち込んだ仕様としか思えない。
基地害の妄想
251 :
2017/03/11(土) 05:58:26.88 ID:0cGmXZ4gM
>>249
>>243 みたいに拡張できないケースは少なくない
252 :
デフォルトの名無しさん (ワッチョイ f338-9O7/)
2017/03/11(土) 08:06:11.09 ID:zScGv76W0
https://www.youtube.com/watch?v=56-ktABNiR4
C言語マスターの生放送開始 お前らに指南してやんよ
253 :
2017/03/11(土) 09:07:47.31 ID:qsNY6D990
wikipedia

VLA
超大型干渉電波望遠鏡群(Very Large Array,VLA)
軽量飛行機 (Very Light Aircraft) - 欧州における航空機分類の一つ
垂直発射アスロックミサイル(Vector Launch ASROC)
ボランティア法律家による芸術支援団体(Volunteer Lawyers for the Arts,VLA)
ヴィオラ (Viola) の略称 (vla, va) - ヴァイオリン族の弦楽器

陰謀だな
まちがいない
254 :
2017/03/11(土) 12:50:26.01 ID:hyZtRr/u0
C#なら一行で終わる内容をCは20〜30行必要w
老い先短いジジイどもは死ぬまでCで書いてろwww
255 :
デフォルトの名無しさん (ワッチョイ be41-/tS9)
2017/03/11(土) 13:11:24.12 ID:awln0KGk0
>>254
なんでC#は一行で済むと思う?
256 :
2017/03/11(土) 15:26:38.47 ID:sAcoRj840
>>239
お前は自分の論理を信用しすぎる
https://en.wikipedia.org/wiki/Godel%27s_incompleteness_theorems

>>173
の指摘は鋭いと思うよ、外部入力でリミットを切らないのは悪手の典型だ
繰り返していっておくが、セキュリティホールは事前には書いている本人にもわからない
だから定石を信用して事を始めたほうが悪い結果がやってこない場合が多い
スタックあふれは発生してはじめてわかる、リンかのオプションを指定しても根本的解決にならない
毎月の windows update が一向に減らない理由も考慮しておいたほうがいい

C99 の可変長配列は、安易にスタックを大盛りにする悪手に誘導するという点で、筋悪だと主張している
(でも私は alloca は使うけどね :-)
257 :
2017/03/11(土) 15:27:36.34 ID:sAcoRj840
>>246
alloca はスタック上に展開することがはっきりしているからね、でも C99 の VLA は実装上の指定は規定にはないのでは?
258 :
2017/03/11(土) 15:36:12.19 ID:VKYuFzhGM
なんでスタック上にあることが確実なら安全になるの?
259 :
2017/03/11(土) 15:40:27.05 ID:fayNaA1W0
>>256
逃げずに答えろ

非標準ライブラリのallocaはセキュリティ上問題ない(だから使う)として
その一方でVLAはセキュリティ上問題あるとしている根拠を述べよ
260 :
2017/03/11(土) 16:03:26.08 ID:+8AcHZCs0
VLAはallocaのシンタックスシュガーだろシンタックスシュガーに
よってarray[size]のsizeがマクロか変数か気にしなくてよくなった。
きにしなくなるということは考えなくなるということだから
何も考えず配列を手軽に使えなくなったということだよ。
261 :
2017/03/11(土) 16:06:18.87 ID:d5jme4tX0
>>256
前半は VLA 固有の話じゃないよな

> C99 の可変長配列は、安易にスタックを大盛りにする悪手に誘導するという点で、筋悪だと主張している
根拠のない主張はチラ裏にでも書いとけ
262 :
2017/03/11(土) 16:09:24.59 ID:7UjqbkJQ0
>>260
>VLAはallocaのシンタックスシュガーだろ
規格には書いていないけれども,まあ同意するね >>213
でも,スタック大盛りに誘導するのは筋悪だろう?

>>259
alloca() にセキュリティ上の問題がないとは主張していないよ
setjmp()/longjmp() と同じで,悪い使い方をすれば,当然バグる
263 :
2017/03/11(土) 16:12:09.28 ID:bM520vnYH
allocaはスタック大盛りに誘導しないの?
264 :
2017/03/11(土) 16:15:28.58 ID:7UjqbkJQ0
もともとのお題は >>87 >>134 >>135 >>139 で,
最終的な回答は >>231 だよ,セキュリティの話は派生的な話題で,正直どうでもいい
265 :
2017/03/11(土) 16:22:03.96 ID:+8AcHZCs0
[]のなかが数字のときはもはやVLAの特別な場合になってしまったんだよ。
VLAを使わないないと思っても実はみんな使ってるんだよな。
266 :
デフォルトの名無しさん (ワッチョイ 725b-Zg/o)
2017/03/11(土) 16:22:22.50 ID:m3w8ys+M0
>>264
もう相手にしなさんな。
複数の端末を使い出してるしよ
267 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/11(土) 16:35:26.69 ID:fayNaA1W0
>>264
allocaを使って、VLAは筋悪といった理由は全然示してないな。
逃げずに答えろ。

> 最終的な回答は >>231 だよ,セキュリティの話は派生的な話題で,正直どうでもいい
じゃ
> VLA はセキュリティの穴になりうるね,実行時の値で配列の上限が決まるなんて危険な発想ではないかい?
> そんなものを標準に入れていいのか?
これは知ったかぶりしましたってことだな。
268 :
デフォルトの名無しさん (ワッチョイ bf7b-NGN/)
2017/03/11(土) 16:39:36.88 ID:fayNaA1W0
>>260
> VLAはallocaのシンタックスシュガーだろ
全然違う1000年ROMってろ

for() {
char *p = alloca(size);
}

for() {
char p[size];
}
269 :
2017/03/11(土) 16:51:56.73 ID:d5jme4tX0
>>264
> セキュリティの話は派生的な話題で,正直どうでもいい
じゃあ絶賛していたこれは撤回でいいんだよね
> しかも外部入力でリミット切らないとか、セキュリティホールの典型じゃね?
270 :
2017/03/11(土) 18:41:42.10 ID:p1f1fsAr0
allocaで取った領域はブロックの終わりじゃなく、関数の終わりまで開放されない
VLAはブロックの終わりで開放されるところが違う

というかallocaの落とし穴みたいな話だね、これは
271 :
2017/03/12(日) 09:00:20.57 ID:lxzttZnn0
> というかallocaの落とし穴みたいな話だね、これは
C++脳の落とし穴だよ
単なるライブラリ関数が返したポインタをスコープ抜けただけで解放できるわけないじゃん
272 :
2017/03/12(日) 14:21:13.54 ID:dQxGFGsK0
Cのコンパイルで詰まっています。

vimで表示した時にカッコが赤くなるのは何でなんでしょうか?
http://i.imgur.com/n84ewum.png
カッコの対応はちゃんとやってると思います。。。

またこのソースをコンパイルしたときに
http://i.imgur.com/XIX3aCv.png
というエラーメッセージが出ますが、これもこの部分を変えていないのに
突然エラーが出始めました。
何度見てもここの表記は間違っていません、というか変えていないので間違ってるわけありません。

これで今日の朝からずっと止まっているのですが、、、
原因が分かる方いますでしょうか?
273 :
2017/03/12(日) 14:24:07.85 ID:lxzttZnn0
main( ←これが閉じていない
274 :
2017/03/12(日) 14:24:47.88 ID:CrU6WH4/F
( と {
275 :
2017/03/12(日) 14:25:47.72 ID:dQxGFGsK0
ありがとうございます死んで来ます
いつ消えたんだ…
276 :
2017/03/12(日) 15:15:20.20 ID:IXx0ivIZ0
生きるんだ!
277 :
2017/03/12(日) 16:58:28.23 ID:Fl2HPIwQa
か、可愛いw
キモいレスバにフレッシュなコメ
278 :
2017/03/13(月) 12:35:01.26 ID:WVfxmOF7M
この程度のタイプミスぐらい自分で見つけられんようじゃ
先が厳しいんじゃないか
C言語に関係なく
279 :
2017/03/13(月) 14:36:21.34 ID:dPy5EX8Fd
タイプミスを見つけれるかどうかは
エディタとエラーメッセージの優秀さによるという持論
280 :
2017/03/13(月) 16:10:47.81 ID:v3XqhUuXM
これだけ赤く指摘してくれててまだそういうこと言えちゃうとは
人間の欲は天井知らずだな
281 :
デフォルトの名無しさん (ワッチョイ 13f2-jJqA)
2017/03/13(月) 16:55:25.56 ID:tV/WpGXC0
与えた入力に対して期待値と異なる出力となったとき
何が起きているか洞察をする専門職のくせに
コンパイラだけが何か特別なデバイスであるかのように思い込んでいるアフォだね
282 :
デフォルトの名無しさん (ワッチョイ efb5-j8zu)
2017/03/13(月) 17:25:35.83 ID:6TfSzvFh0
つかエラーメッセージに答えがあるじゃん
283 :
2017/03/13(月) 17:57:51.98 ID:IkDDkkqX0
49行の開き括弧か86行の閉じ括弧に色が付けば
もっとエラー位置が分かりやすいとは思うけどね。

main(
の内側に書ける要素がvimの文法チェック情報に登録されていて、
それに合致しない部分が指摘される、という仕掛けかな。
284 :
2017/03/13(月) 18:42:23.61 ID:dPy5EX8Fd
>>283
言いたかったのはそういうことです
もう少しピンポイントにエラーメッセージ出せそうな気がするのですが
なかなかそうもいかないものなのだろうか
285 :
2017/03/13(月) 18:47:33.49 ID:DDChi3YkM
コンパイラがそれを指摘してるのに。
286 :
2017/03/13(月) 20:33:47.62 ID:RNfJ73Ada
初心者だから許してやれよw
分かんなくて聞く人も周りにいなかったんだろ
287 :
2017/03/16(木) 20:49:48.72 ID:yxjuKDF10
C言語の教科書をwikibookで執筆してみました。
標準ライブラリ以外だいたい書き終えました。
よろしかったら加筆・修正などお願いいたします。
https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E

「C言語」でググると10番目あたりに表示されます。
標準ライブラリも完成させたらもう少し上がるだろうか。
288 :
2017/03/17(金) 08:58:22.22 ID:Wd4E8hAa0
mallocは昔はchar*ポインターを返していたから言ったけれど
今はvoid*だから必要ないよ。
情報古すぎない?
どんな大昔の本を参考にしているんだ?
289 :
2017/03/17(金) 09:01:26.88 ID:ft8i32zD0
最初に「まず、これを読め」と記述しておいて。
あとは、補足事項があれば追記していく形式の方がいいかな。

C89/C90: http://read.pudn.com/downloads133/doc/565041/ANSI_ISO%2B9899-1990%2B[1].pdf
C99: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
C11: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

ルールに加えて、解説やサンプルコードなんかを付けて教科書にしようとしたら、
上記のPDFの数倍の分量になってしまう。
290 :
2017/03/17(金) 09:16:22.96 ID:f1lK9slqM
手を動かして書いたことには敬意を表すし
自分は口先だけで申し訳ないんだが
せっかく書くならターゲット読者をもっとはっきり想定すべきかな
プログラミング自体の初心者はこれでは読んでもわからない
Cの初心者向けとしても、コード見ろと突き放さずに、コード解説を増やす、
図を豊富につける、練習問題と解答例ページをつけるとか
291 :
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)
2017/03/17(金) 10:23:44.22 ID:AO+9LJwo0
>>287
「配列とポインタ」という節がでたらめもいいとこ。
初心者が勝手に思い込む誤解をそのまま書いてあるぞ。
編集するならまっさらから書き直しが必要だ。
292 :
2017/03/17(金) 10:59:28.61 ID:oAih26uCH
>>291
批判はもっと具体的に
293 :
2017/03/17(金) 11:02:37.17 ID:sIrFKA5vH
char str1[] = "hello";
P1 = str1 + strlen(str1) - 1;
末尾を指すて書いてあるんですけど
最初のstr1は、どうして必要なんですか?
294 :
2017/03/17(金) 11:05:17.08 ID:IUwDlrSU0
最初しか読んでないけどまずこれが違う
「配列の識別子」と「&配列の識別子[0]」は同じ
295 :
2017/03/17(金) 11:15:06.58 ID:sdsUxTdsM
>>293
strlen はオフセットだからベースアドレスを指定している
296 :
2017/03/17(金) 11:41:08.46 ID:sIrFKA5vH
>>295
ありがとうございます
297 :
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)
2017/03/17(金) 12:02:47.24 ID:AO+9LJwo0
>>292
最後の一行で「具体的に」言ってるんだが
298 :
2017/03/17(金) 12:15:35.09 ID:oAih26uCH
>>297
それただのパワハラ上司と同じ
299 :
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)
2017/03/17(金) 12:20:56.72 ID:AO+9LJwo0
>>298
それただの使えない社員と同じ

逆に聞くがあれの全部を書き直さないとして
どこを残すべきだと思っている?
300 :
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)
2017/03/17(金) 12:25:14.65 ID:AO+9LJwo0
「配列とポインタの基本」と称する節でもう「配列の識別子と&配列の識別子[0]は同じ」なんて大ウソこいてるし
「1次元配列を指すポインタ」は配列ではなく単体を指すポインタの説明しかしていない
「多次元配列を指すポインタ」に多次元配列を指すポインタが全く出てこない
301 :
2017/03/17(金) 12:33:20.85 ID:oAih26uCH
>>300
おう、これを、具体的な批判というのだよ
302 :
2017/03/17(金) 12:37:20.54 ID:zqIC+zida
ポインタまで書きたいならCには多次元配列なんて存在しないことも書いとかないと学習者はわけわかんなくならない?
303 :
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)
2017/03/17(金) 12:49:42.29 ID:AO+9LJwo0
>>302
じゃあ int (*pa)[3][4]; は何を指すポインタと言うべきかね?
304 :
2017/03/17(金) 12:57:25.64 ID:Wd4E8hAa0
間違った情報を載せるということは載せないほうがましだということがわかってないね
305 :
2017/03/17(金) 13:19:26.79 ID:MT1dI4q4M
wikibookはC89前提なんでしょ。書いてないけどそんな感じがする

それでもint main()なのに返り値を返さないのは気になる
(関数の章で返却値の説明でもそうなのはどうかと)

「文字と文字列」はわりとひどい。1バイト=半角文字じゃないし、
unicode に半角文字は無いと思いこんでるようだし。
90年代に独学でパソコン上でCを勉強した人のメモにみえる
306 :
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)
2017/03/17(金) 13:31:01.59 ID:AO+9LJwo0
C89なら2.1.2.2 Hosted environmentでIf the main function executes a return that specifies no value, the termination status returned to the host environment is undefined.って書いてあるからmainにreturnがないのはNGだね。

C99では5.1.2.2.3 プログラム終了処理で「main 関数を終了する}に到達した場合,main 関数は,値0 を返す」となっているからmainのreturnなしはOK。
307 :
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)
2017/03/17(金) 13:39:02.86 ID:AO+9LJwo0
> int i, *pi=NULL;
> *pi=1;//必ずエラーになる。

未定義に「必ず」はねえんだよヴォケ
308 :
2017/03/17(金) 15:20:45.47 ID:CLjQ7KbNH
while((ch = fgetc(fp) != EOF)
ferrorとEOFでエラーかそうでないか調べてるだろ?
feofってなんの意味があるの?
309 :
2017/03/17(金) 15:37:30.17 ID:CLjQ7KbNH
本読んでたら自決しました
310 :
2017/03/17(金) 15:57:15.05 ID:XponhHf70
はやまるなよ
311 :
2017/03/17(金) 17:29:22.78 ID:QOMjQWO00
なんか文学っぽいね。
寺山修司と三島由紀夫を合わせた感じ。
312 :
2017/03/17(金) 20:54:03.91 ID:hFAn1F6/0
>>300
「C言語/配列とポインタ」のページに関しては自分は正しいと思っていたので、
現在確認中です。とりあえず、テンプレート:正確性を付けておきました。

>>305
「C言語/文字と文字列」のページに、制御文字についても追記しました。

>>307
「C言語/ポインタ#NULLポインタ」の節について修正しました。
313 :
2017/03/17(金) 21:02:08.87 ID:/pGD2dIka
>>303
intの配列(要素数4)を一つの要素とする配列(要素数3)へのポインタでしょ
ただの配列の配列を多次元配列と呼ぶのは違うでしょう
314 :
デフォルトの名無しさん (ワッチョイ bfda-8FG5)
2017/03/17(金) 21:08:39.12 ID:sgxnbWig0
> NULLポインタにアクセスした場合、OSがエラーを発生する場合もあるが、

ねえよヴォケ
int *pi;
pi = NULL;
printf("%p", pi); //エラーは生じない。生じるとしたらpanic状態だけ
315 :
2017/03/17(金) 21:17:55.46 ID:hFAn1F6/0
>>314
元の本では「OSが異常を検知して即座にプログラムを停止させてくれる」と書いていたのですが、
これを「OSがエラーを発生する場合もあるが」と記述したのは誤りなのでしょうか?
316 :
2017/03/17(金) 21:25:57.94 ID:sdsUxTdsM
OS/9 68000とか実記憶系だと暴走するな
317 :
デフォルトの名無しさん (ワッチョイ bfda-8FG5)
2017/03/17(金) 21:31:52.99 ID:sgxnbWig0
>>315
誤りだよ、真っ黒、弁明の余地はまったくない
つーか、おまえやってみろよ
どこの世界であのコードをエラーにできるOSを見つけられたのか
読者が知りたいのはそこなんだよ
「元の本」なんか読者も読めばわかるんだよ
おまえの経験値を提供しろ、それ以外にあのサイトの存在意義は何だ?
318 :
2017/03/17(金) 21:50:59.67 ID:8kMzXY9p0
>>314
未定義なんだからどんな動作しても不思議じゃない
それが「OSがエラーを発生する」という動作なだけだな
319 :
デフォルトの名無しさん (ワッチョイ bf5b-2PX+)
2017/03/17(金) 21:54:22.50 ID:9Couem/D0
AS400では確かエラーが出てた気がする。
ともかくウインドウズでは理解できんよ

ATMも壊した記憶がある。
320 :
デフォルトの名無しさん (ワッチョイ bfda-8FG5)
2017/03/17(金) 21:54:27.04 ID:sgxnbWig0
>>318
314のどこに未定義があんだよ
おまえ頭湧いてんのか??
321 :
2017/03/17(金) 22:02:07.25 ID:hFAn1F6/0
>>317

// HelloWorld.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <stdio.h>

int main(void)
{
int i, *pi = NULL;
*pi = 1;//必ずエラーになる。
}

「Windows 10 Pro」、「Visual C++ 2015」で、
上のプログラムを実行すると、
「HelloWorld.exeは動作を停止しました
問題が発生したため、プログラムが正しく動作しなくなりました。プログラム
は閉じられ、解決策がある場合はWindowsから通知されます。」
と表示されプログラムが終了しますが、
これはエラーメッセージとは呼ばないのでしょうか?
322 :
2017/03/17(金) 22:14:02.68 ID:Wd9/xPhT0
>>321
それはNULLポインタにアクセスしただけじゃなく
NULLポインタの指し示す領域にアクセスしようとしたからでは
323 :
2017/03/17(金) 22:20:21.45 ID:uumdUn730
>>314
pi = NULL;
printf("%p", pi);

これでエラーを生じさせるのは難しいな
324 :
2017/03/17(金) 22:26:08.25 ID:aH9iGnt2H
windowsでコンソールなしならコケるよ
325 :
2017/03/17(金) 22:27:09.66 ID:q3WLQEZV0
>>323
それ変数の中身見てるだけでアクセスしてないじゃん
アクセスされるには*piにしないと
326 :
2017/03/17(金) 22:32:57.53 ID:8kMzXY9p0
>>320
NULLポインタにアクセスとは、普通NULLポインタをデリファレンスする事だが
>>314の後半の��コードは知らん
327 :
デフォルトの名無しさん (ワッチョイ bf25-8FG5)
2017/03/18(土) 07:46:26.17 ID:BHNX1/aY0
>>321
最初に言っただろ「未定義に必ずはない」と
もう忘れたのか?

いいか、WindowsのSTOPダイアログはCの仕様じゃねえぞ
CではあくまでNULLを逆参照したら未定義の動作つってるだけだ
未定義の動作とは禁止に違反した場合にどのような保証もないことをいう

*** おまえの間違いは「必ず」という文言を入れたことだ ***

そしてその間違いに対する言い訳でもう1つ誤りを犯している
Cを教えるはずが論点がWindowsになってしまったことだ
328 :
2017/03/18(土) 07:49:39.12 ID:HdcIx2lR0
アドレス0x0000に意味のあるデータがあってもC言語だとアクセス出来ないの?
329 :
2017/03/18(土) 07:58:49.65 ID:+rfyF7Rl0
いにしえの割り込みハンドラ・・・
330 :
デフォルトの名無しさん (ワッチョイ bf25-8FG5)
2017/03/18(土) 08:10:46.63 ID:BHNX1/aY0
>>328
Cでは有効なオブジェクトは決して0x0000番地を含まない
もし0x0000番地を有効なオブジェクトに使うならば
それはもはやCではない、Cライクな別の言語だ
331 :
2017/03/18(土) 09:07:41.55 ID:87n2zRpL0
べつに、規格上の未定義動作に処理系が動作を定義することが禁止されているわけでもあるまい。
実際にVCがそう定義しているかどうかは知らんが、定義しているならその環境で「必ず」と言って
いいわけだし、一般論として「OSがエラーを出す場合もある」ってのも正しい。
332 :
2017/03/18(土) 09:17:10.66 ID:1jN6Nl4i0
>>328
NULL は 0 番地と決まってる訳じゃない
違う例はほとんどないけど
333 :
2017/03/18(土) 09:20:30.72 ID:d7Ob6ym/0
静的変数を定義してそのアドレスを番兵に使うイディオムと同じ。
334 :
デフォルトの名無しさん (ワッチョイ bf25-8FG5)
2017/03/18(土) 10:03:11.26 ID:BHNX1/aY0
>>331
そういうのは未定義じゃなく処理系定義だ

おまえは「必ず」と言った
それを一般論だとか場合もあるにすり替えるなら
おまえ自身が誤りを認めることになる
335 :
デフォルトの名無しさん (ワッチョイ bf5b-2PX+)
2017/03/18(土) 11:33:55.64 ID:WGf9t5s20
みんな触れるんじゃないぞ。
336 :
2017/03/18(土) 11:37:10.99 ID:KONZKirJ0
>>320
http://kikakurui.com/x3/X3010-2003-01.html#206
( fprintf() の変換指定子について)
> p 実引数は,void へのポインタでなければならない。
...
> ... 実引数の型が対応する変換指定に対して正しくない場合,その動作は,未定義とする。

>>314 は %p に int* ( != void* )を渡しているので、動作は未定義。
337 :
2017/03/18(土) 11:48:41.77 ID:tuXgGGJ00
>>328
アクセスできる。アドレス0x0000を指すポインタを使えばいい。

なお、WindowsやLinuxのプログラムがアドレス0x0000にアクセスできないのは
単にOSがガードしているってだけ。

>>330
んなことない
338 :
2017/03/18(土) 11:56:28.99 ID:emLmHug10
ポインタにNULLポインタ or 0を代入することはできても。
そのポインタの参照先がアドレス0番地であることは保証されてるんだっけ?
339 :
2017/03/18(土) 12:02:21.90 ID:frTBE7qo0
鼻から牛乳が出るのは 未定義だっけ? 未定だっけ? 不定?
340 :
2017/03/18(土) 12:09:42.93 ID:87n2zRpL0
「0番地にアクセスできることを保証するポインタ」というものを処理系で用意することはできる。
ただまぁ、NULLとの比較の扱いがやっかいだから普通は「0番地にアクセスする関数」で済ませるだろうな。
341 :
2017/03/18(土) 12:29:29.54 ID:nArQg9P4M
>>339
悪魔だろ
342 :
2017/03/18(土) 12:51:42.82 ID:1jN6Nl4i0
>>339
それは嘉門達夫
343 :
2017/03/18(土) 15:10:41.20 ID:kZzz1eqTH
ポインタに対する0リテラルは単なるNULLのシンタックスシュガー
ポインタに対するNULLは何も指さないことをコンパイラに指示しているだけであって具体的なアドレスを意味しているものではない
つまりどこも指していない
344 :
デフォルトの名無しさん (ワッチョイ 836f-8FG5)
2017/03/18(土) 17:35:41.69 ID:s2BlUuB40
>>337
んなことある
6.3.2.3 ポインタ
空ポインタ定数をポインタ型に型変換した場合,その結果のポインタを空ポインタ(null pointer)と呼び,いかなるオブジェクト又は関数へのポインタと比較しても等しくないことを保証する。
345 :
2017/03/18(土) 18:43:55.02 ID:8T4/OjG20
>>330
NULLポインタリテラルとNULLポインタの違いを理解しよう
この二つがメモリ上で同一の表現である事を規格は求めていない

void *p = 0; // 正しい

void *p;
memset(&p, 0, sizeof p); // 間違い
346 :
デフォルトの名無しさん (ワッチョイ 836f-8FG5)
2017/03/18(土) 20:08:31.46 ID:s2BlUuB40
>>336
それは論点が違うのでこの騒動が収まったら相手してやる
逃げも隠れもしないからそれまで待ってろ
347 :
2017/03/18(土) 21:11:59.62 ID:d7Ob6ym/0
struct{
char a;
T b[];
}
で、bの先頭アドレスは少なくとも2,4,8,16の倍数ではないです、
この構造体の実体が最大アラインメントの倍数のアドレスにいる限り
てことはアラインメントがそろわないからマクロTは1バイトのアラインメント
の型しか使えなくないですか?
348 :
2017/03/18(土) 22:05:18.85 ID:tH3TahT+0
>>289
読者に規格を読ませるのですか?
難易度高くないですかね。

>>290
コンピュータの一般的な知識については
別の教科書に書いて任せるのを考えていました。
解説、図、練習問題などは追加していきたいですが、
まずはこのスレで間違いだと指摘された部分を修正していきたいと思います。

>>302
配列の配列を便宜上多次元の配列と呼ぶ、
というように注釈を入れるのはどうでしょうか?
349 :
2017/03/18(土) 22:18:18.72 ID:oJMthdoca
っていうかマジでターゲットがわからんな
どの層狙ってんだか
350 :
2017/03/18(土) 22:43:58.68 ID:tkjBsxiU0
>>302
規格に配列の配列を多次元配列と呼ぶって書いてあるのに?
351 :
2017/03/18(土) 22:51:30.21 ID:STVlMw5Y0
ポインター = 0;
仮想関数 = 0;

キーワードを増やしたくないから、0 を使ったのだろう。
これがややこしさの原因

null pointer、\0 ヌル文字、"" 空文字列の、区別が分かりにくい
352 :
2017/03/18(土) 22:53:56.20 ID:LkwmWgnzM
>>348
いやいや、規格書は読まなきゃ。
一番信頼出来る文書だよ。
353 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 06:48:40.61 ID:TnjIuaQ20
>>345
んなこたわかっている
328が0x0000番地というから同じ目線で話してやっただけのこと
354 :
2017/03/19(日) 08:05:10.25 ID:kdMLqmW60
C言語の多次元配列は、厳密な仕様をあまり理解できないまま使ってるんだよなあ。
その昔、先輩から
・C言語には多次元配列はない。
・多次元配列のように見えるものは配列の配列だ。

みたいに教えられた思い出があったり。手元にあるC++(Cじゃないが)の解説本にも
・1次元配列(ベクトル)は連続したメモリである
・多次元配列は「表現系」である

と、わざわざ記述あったりする。つまり、表現することはできるし、ゆえに型も存在するが。
その実体は、他の言語(例えばFortranとか)の多次元配列とは、何か違うんだぞ?!
と言っているようにも見える。何が違うのか良く分からんけど。

深く考えないで使った方がいいのかなあ
355 :
2017/03/19(日) 08:19:38.21 ID:dbfovMwi0
>>330
いいや、わかってない

>Cでは有効なオブジェクトは決して0x0000番地を含まない
>もし0x0000番地を有効なオブジェクトに使うならば
>それはもはやCではない、Cライクな別の言語だ
そのような処理系を作ることは規格上許されている
356 :
2017/03/19(日) 08:36:21.90 ID:4PgJANIM0
ポインタにリテラルを代入すること自体が処理系の独自拡張に依存してるのでは?
357 :
2017/03/19(日) 08:40:06.10 ID:/fHKNSq50
多次元配列といいたいのは
a[x+N*y]をシンタックスシュガーでa[x,y]って書ける奴のことじゃない
配列の配列はa[x][y]でアクセスするやつで。
358 :
2017/03/19(日) 08:53:44.93 ID:j2JD5hFe0
>>256
そういうのは、アドレスを入れたらポインタが出てくる関数なんてのをライブラリとして用意する。
359 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 09:11:39.21 ID:TnjIuaQ20
>>355
許す? 禁止許可の話はしてねえぞ
もし作ったらそれは何だと書いただけだ
360 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 09:17:53.32 ID:TnjIuaQ20
つーかNULLの表現が0x0000かどうかって話だったはず
企業の製品開発を禁止するかどうかって話にブレんな
361 :
2017/03/19(日) 09:34:58.64 ID:cZ1Iduw30
330のCじゃないってのは間違いだったんでしょ。ユー認めちゃいなよ
362 :
2017/03/19(日) 09:56:49.59 ID:CdTi66AD0
int *p = 0;
としたとき、pが0x0000以外を指す可能性はある
何故なら「値としての0」の内部表現が「全ビット0」とは限らないから
故にcalloc()はその仕様「全ビット0にする」によって忌避されるのだ
これが「0を代入したのと同じ結果になる」だったら皆歓迎しただろう
363 :
2017/03/19(日) 10:07:18.04 ID:/fHKNSq50
NULLは危険だから使うなということでしょ。
安全なのはアドレス0ではなく
NULL用のメモリースペースを確保しておくことだね。
364 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 10:14:40.04 ID:TnjIuaQ20
>>361
どういう脈絡でそうなるんだよ
論破できないからって勝たせてくれはねえだろ
365 :
2017/03/19(日) 10:24:58.00 ID:cZ1Iduw30
>>364
まだ分かってないのか

NULLポインタはアドレス0x0000を指すポインタではない。
NULLポインタをデリファレンスすることは未定義である。
しかしアドレス0x0000を指すポインタをデリファレンスすることは問題ない。
366 :
2017/03/19(日) 10:25:05.48 ID:6ANDe7B10
330はまだ全く理解できてないようだな
ポインタに代入されるときの0って文字は数字の0とは全く関係ないんだよ
367 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 10:30:07.62 ID:TnjIuaQ20
>>365
>>353

数字の0とか言ってるアフォはスルー
368 :
2017/03/19(日) 10:32:21.33 ID:/fHKNSq50
アドレス0を示すポインターをデリファレンスする=(a=*adoresu0wosimesupointer)って
事なんだけどね。
使い慣れないデリファレンスなんてことば使うから間違えるんだよ。
369 :
2017/03/19(日) 10:39:04.36 ID:xMsfh7w0M
offsetof マクロ「呼んだ〜」
370 :
2017/03/19(日) 11:29:30.83 ID:dbfovMwi0
>>359
規格上許されてるんだから、Cのコンパイラに他ならない
こんな単純な事が理解できないのか?
371 :
2017/03/19(日) 11:40:29.25 ID:dbfovMwi0
>>367
>>328はお前よりは遥かに理解している
お前のような馬鹿を駆除しておかないと混乱の元だから、彼の疑問は暫く放置
372 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 14:14:52.15 ID:TnjIuaQ20
>>370
おまえさ、ずいぶん自信たっぷりに「許されている」て言うけど
それは具体的に規格票のどこでそうなっている?
0x0000番地については>>353で説明したわけだが、
それを聞いてまだ空ポインタを逆参照した結果が処理系定義だと言うのか?
未定義は「許さない」規定だぞ
おまえが「許している」と言うためには処理系定義が必要だ
さあ、どこに書いてある?
373 :
2017/03/19(日) 14:32:24.95 ID:j2JD5hFe0
まさかここに来て、NULLポインタと0番地を指すポインタの区別がついてないとは思わなかったw
374 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 14:33:40.97 ID:TnjIuaQ20
日本語が読めない外人はどっか行ってくれ
375 :
2017/03/19(日) 14:47:12.52 ID:eJrKZIBf0
>>372
逆じゃないかな?

規格で「0x0000番地を有効なオブジェクトに使う」ことが禁止されて
いなければ>>330の言うようなことは成り立たないわけで、そのような
禁止事項を>>330が示す必要があるでしょ。

ここで空ポインタを逆参照した場合の話が出てくることから
「空ポインタ」と「0x0000番地」の区別がついてないのは間違いないって
わかったからもういいんだけど。

「未定義は「許さない」規定」というのも違う。
規格はなんら規定を課さないというだけで、処理系が独自に動作を
規定することはできる。
376 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 14:52:14.14 ID:TnjIuaQ20
>>375
規格がなんら規定を課さないのは未規定だハゲ
>>353をどうしても無視したいしつけーキチガイとじゃ話にならん
377 :
2017/03/19(日) 15:03:00.06 ID:eJrKZIBf0
>>376
脊髄反射で相手を否定する前に確認しよう。
http://kikakurui.com/x3/X3010-2003-01.html#7
> 3.4.3 未定義の動作 ...この規格が何ら要求を課さないもの。
...
> ...翻訳時又はプログラム実行時に,文書化された,環境に特有な方法で
> 処理してもよい...
...
> 3.4.4 未規定の動作 この規格が,二つ以上の可能性を提供し,個々の場合に
> どの可能性を選択するかに関して何ら要求を課さない動作。

「空ポインタ」と「0x0000番地」をただの言い換えだと思ってるんだよね?
でも大方の人にとって「0x0000番地」は明確に意味が違うんだ。
話が合わないのはそのせいだよ。
http://www.kouno.jp/home/c_faq/c5.html#17
> Honeywell-Bullのメインフレームの中には、ビットパターン06000を (内部の)ヌルポインターとして使っているものもある。
378 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 15:17:56.93 ID:TnjIuaQ20
>>377
正しくないプログラム構成要素って書いてあるだろ
Cとは何かを規定している規格票の中で正しくないと書かれたプログラムはCか?
脊髄反射はおまえだろ、ちゃんと文脈よめってのドスカタン
「参考」には勝手にしろと書いてあるだけだぞ、わかるか外人

> 「空ポインタ」と「0x0000番地」をただの言い換えだと思ってるんだよね?
あー、おまえ>>353がそう見えるのか
外人つーか幻視の類じゃね?
キチガイつったのは差別用語だったな統合失調症の患者さん
379 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 15:19:57.68 ID:TnjIuaQ20
河野氏がどんな御仁かも知らず
ハネウエルのマシンを触ったこともなく
リンク貼るだけのカスだからこそ
もっと身近にある0でないNULLの実装例に気付かないんだろうな
380 :
2017/03/19(日) 15:33:43.87 ID:6ANDe7B10
>>353はよく意味の分からない言い訳をしてるだけにしか見えないが?
もう一度どういう意味で書いたか謝ったら許してやるよ
381 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 15:40:36.44 ID:TnjIuaQ20
言ったろ、どうしても>>353を無視したいしつけー統合失調症の患者さんとじゃ話にならんと
よっぽど>>353が困るということは判ったからそろそろ許してやろうか、こっちが
382 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 15:45:06.30 ID:TnjIuaQ20
もう1つ言ってやろう
自分の経験値でものを言ってない聞きかじりとじゃ話にならん
383 :
2017/03/19(日) 15:53:31.32 ID:IinMJCLx0
>>378
> 正しくないプログラム構成要素って書いてあるだろ
普通の理解力があればわかると思うが(規格の範囲では)正しくないプログラム要素のことな

> Cとは何かを規定している規格票の中で正しくないと書かれたプログラムはCか?
GCC とかの拡張機能を使ったプログラムもその意味では正しくないプログラム
それをCのソースじゃないと言うならそう言ってればいいと思う
384 :
2017/03/19(日) 15:54:35.31 ID:IinMJCLx0
>>379
> もっと身近にある0でないNULLの実装例に気付かないんだろうな
ほう、興味深いから是非教えてくださいよ
385 :
2017/03/19(日) 15:56:03.87 ID:eJrKZIBf0
>>378
「正しくない」だけじゃなくて「可搬性がない若しくは正しくない」って書いてあるでしょ。

正直>>353からは何も読み取れないんだけど、
>>372で0x0000番地の話と空ポインタの話を絡めてるから区別できてないと思った。
区別できてるなら空ポインタの話を持ち出す必要が無いからね。
386 :
2017/03/19(日) 15:59:01.21 ID:xMsfh7w0M
WhiteSmiss cなんざprintfすら無かったよなぁ
387 :
2017/03/19(日) 16:03:39.41 ID:/fHKNSq50
>>347
に答えられる強者はいないか?
388 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 16:05:14.59 ID:TnjIuaQ20
>>383
ああ、おまえ規格とは何かが解ってないわけね
只で教えてやる筋合いはないから、そこで壊れたままでいろ

>>385
おまえは自分の主張が表現できず、人の話も読めてない
これ以上おまえと話すのは間違いなく徒労に終わるな
389 :
2017/03/19(日) 16:11:34.27 ID:6ANDe7B10
よく分からないけどパディング抑制したりしなければ揃えられてるだろ
390 :
2017/03/19(日) 16:18:35.61 ID:xMsfh7w0M
>>387
struct hack ってoffsetof を使った技法がある。
但し、規格上は動作する事は未保証
391 :
2017/03/19(日) 16:20:03.52 ID:IinMJCLx0
>>388
> 只で教えてやる筋合いはないから、そこで壊れたままでいろ
結局これかよ w
>>384 もスルーみたいだし
知ったかの自爆乙
392 :
2017/03/19(日) 16:26:33.70 ID:/fHKNSq50
勘違いしでした。
sizeofでパディングしてあるところまでの大きさになってました。
393 :
2017/03/19(日) 16:28:23.54 ID:/fHKNSq50
なぜかというと昨日まで自分のパソコンのバグで
ideoneが使えなかったからです。
パソコンのバグを治したら使えるようになったので確認できました。
394 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 16:37:15.63 ID:TnjIuaQ20
>>391
無知なやつには恥をかかすより教えないことが一番堪えるからなあw
395 :
2017/03/19(日) 16:41:46.80 ID:mGXfpPMY0
鼻から悪魔が出るのは不定だったか
牛乳で検索しても全然出てこなかったので助かった
396 :
2017/03/19(日) 16:47:45.42 ID:IinMJCLx0
ID:TnjIuaQ20 が逃走モードに入りました w
397 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 16:50:36.58 ID:TnjIuaQ20
反論がこないのに一人でしゃべってろと? バカじゃねえのおまえ
398 :
2017/03/19(日) 16:59:35.63 ID:eJrKZIBf0
反論しても根拠の無いレッテル貼りしか返ってこなかったのでもうやめた。
399 :
2017/03/19(日) 17:02:14.20 ID:dbfovMwi0
ID:TnjIuaQ20逃げた?
400 :
2017/03/19(日) 17:15:58.21 ID:dbfovMwi0
まだ、暴れてたか
ID:TnjIuaQ20は矯正不可能な基地外のようなのでNG

>>328
0番地に意味のあるオブジェクトを置く必要がある処理系ではNULLポインタの内部表現を0以外にして
0番地は普通にアクセスするのが正しい実装
NULLポインタの内部表現が0のままだと
ポインタの比較で破綻する
401 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 17:16:08.26 ID:TnjIuaQ20
何だよ
402 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 17:19:06.51 ID:TnjIuaQ20
>>400
空想論の域を出られるやつ呼んでこい
おまえじゃ話にならん
403 :
2017/03/19(日) 17:30:27.69 ID:/fHKNSq50
結局NULLの初期値が0ってことだろうな。
NULLはマクロだから0のアドレスを使う場合
自分で設定可能にしてあるんだろうな。
NULLの初期値はぜったアドレスの表せる数値のどれかを決めなければいけなくて
設定しないという選択肢はNOだからな。
404 :
2017/03/19(日) 17:37:39.33 ID:SiE28aj70
>>400
0番地に意味のあるデータを置けるというのは、
OSのサポートがあればと言うことなのかな?
C言語としては、置かない事を推奨するのだろうか?
405 :
2017/03/19(日) 17:39:00.94 ID:eJrKZIBf0
>>403
NULLは自分で設定可能にするためのマクロじゃないよ。
http://www.kouno.jp/home/c_faq/c5.html#5
406 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 17:47:25.42 ID:TnjIuaQ20
また河野談話かw

# 俺は夕飯の支度をせにゃならん
# おまえら高齢童貞と違い妻子を背負ってるんでな
407 :
2017/03/19(日) 18:04:07.73 ID:IinMJCLx0
>>400
別に破綻なんてしないでしょ
0 番地をアクセスすると言うことはそこに何らかの情報があることを知っての上でやってる話だからそもそも null チェックなんてする必要がない
408 :
2017/03/19(日) 18:16:16.30 ID:dbfovMwi0
>>404
メモリ配置はOSの仕事
NULLポインタの内部表現はコンパイラが決める事
409 :
2017/03/19(日) 18:17:16.39 ID:dbfovMwi0
>>407
頭悪いぞ 100年ROMってろ
410 :
2017/03/19(日) 18:26:44.71 ID:SiE28aj70
0番地というのがC言語で特別な意味を持つと言うことで良いの?
411 :
2017/03/19(日) 18:28:57.82 ID:8lmCIKta0
MSCのスモールモデルは NULLポインタは アドレス0 を指してなかった
アドレス0 を指す場合にはコンパイラの方言の補助によってなされてた

ボーランドCも同じく アドレス0 を指してなかった
(さらに そこはNULLポインターだぜ って文字並びが入ってて、ランタイムで書き換えチェックしてたような・・・
412 :
2017/03/19(日) 18:49:39.06 ID:/fHKNSq50
C言語ではどんなアドレスもコンパイラー指定の場所以外はアクセスしてはいけない
事になってるだろ。
アドレス0にデータがあるという時点でもうコンパイラーがそこにアクセスしていいんだよ
ってクライアントにコミットしてるというコンプライアンスなんだよ。
413 :
2017/03/19(日) 18:59:29.81 ID:4KDyw5U70
JIS X?3010:2003?(ISO/IEC?9899:1999)
6.3.2.3
値0をもつ整数定数式又はその定数式を型void *にキャストした式を,空ポインタ定数(null?pointer constant)(注)と呼ぶ。
空ポインタ定数をポインタ型に型変換した場合,その結果のポインタを空ポインタ(null?pointer)と呼び,いかなる
オブジェクト又は関数へのポインタと比較しても等しくないことを保証する。
(注)空ポインタ定数としてマクロ?NULL?が<stddef.h>(及び他のヘッダ)で定義されている。
414 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 19:03:52.69 ID:TnjIuaQ20
>>411
指していたよヴォケ
じゃあお前はNTの環境で仮想アドレスが0番地でも実アドレスが0番地以外に
マッピングされてるのを0番地を指していないとかほざくのか
415 :
デフォルトの名無しさん (ワッチョイ bfa9-JN/B)
2017/03/19(日) 19:08:30.87 ID:GmJCDs4Q0
打たれ弱いやつ…
416 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 19:14:09.32 ID:TnjIuaQ20
417 :
2017/03/19(日) 19:14:50.90 ID:IinMJCLx0
>>409
そんなことしか書けないならレスするなよ w
418 :
2017/03/19(日) 19:16:10.98 ID:dbfovMwi0
>>410
NULLポインタの内部表現として0番地を使う実装が多いと言うこと

レス番飛んでるな、基地外がまだ暴れてるのか
419 :
2017/03/19(日) 19:39:08.68 ID:dbfovMwi0
>>417
0番地に置いたオブジェクトを標準関数に渡すとか、全然思いつかないわけ?

お前頭悪すぎてこの業界向いてない
ホームレスにでも転職しろ
420 :
デフォルトの名無しさん (ワッチョイ d3a1-CANY)
2017/03/19(日) 19:54:10.06 ID:g8OM3BRu0
0の発見
インド人もびっくり
421 :
2017/03/19(日) 19:59:23.95 ID:IinMJCLx0
>>411
スモールモデルの話をするなら
オフセットの話なのかセグメント:オフセットの話なのかを明確にしてくれ
ちなみに実アドレスガーとか言ってるアホは無視でいいから w
422 :
2017/03/19(日) 20:00:36.81 ID:IinMJCLx0
>>419
思い付かない
あると言うなら具体的に書いてみそ
423 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 20:09:28.87 ID:TnjIuaQ20
>>418
ああ「許されている」を突っ込まれて逃げたバカかw
424 :
2017/03/19(日) 20:23:37.44 ID:8lmCIKta0
>>421
あえてアヤフヤにしてた箇所ー
スモールモデルの操作するポインタはオフセットだけなのに

>>411 文中のアドレス0 と表現してるのは セグメント:オフセットのペアで
そもそも取り扱いの空間が違うという話
425 :
2017/03/19(日) 20:34:21.29 ID:dbfovMwi0
>>422
0番地に文字列を置く
ホームレスに転職しろ バカ
426 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 20:37:45.19 ID:TnjIuaQ20
nearなのかfarなのかはあやふやじゃ絶対に済まされねえだろうが
smallどころかtinyでさえ絶対の鉄則だぜ
427 :
デフォルトの名無しさん (ワッチョイ 33cb-8FG5)
2017/03/19(日) 20:38:34.90 ID:TnjIuaQ20
>>425
空想論を不特定多数に喚き散らしてる
おまえこそホームレスさながら
428 :
2017/03/19(日) 20:49:54.17 ID:IinMJCLx0
>>424
さすがにそれは実アドレスガーって騒いでる奴と同類な気がするけど...
429 :
2017/03/19(日) 20:54:58.93 ID:IinMJCLx0
>>425
で、どの標準関数に渡すんだ?
いちいちレスするのが面倒だからそれぐらいは書いてくれよ
自分で
> 標準関数に渡すとか
って書いてあるんだからさ
それともホームレスだとそれもできないのかい? w
430 :
デフォルトの名無しさん (ワッチョイ 239a-y740)
2017/03/19(日) 21:50:25.57 ID:SRd22OVa0
ぬるぬる
431 :
デフォルトの名無しさん (ワッチョイ bf5b-2PX+)
2017/03/19(日) 22:00:04.38 ID:uEahj1PR0
0番地は使えるだろう。OSで使えないようにしてるだけだ。

0番地にアクセスして暴走なんてのは昔はよくあった。
それこそプログラマー任せのC言語だ。

それがC言語では無いと言うならば、一体それは何だ。
432 :
2017/03/19(日) 22:11:56.60 ID:SiE28aj70
>>431
>0番地は使えるだろう。OSで使えないようにしてるだけだ。

釣りですよね?
433 :
2017/03/19(日) 22:18:36.29 ID:dbfovMwi0
>>429
なんでも良いが、例えばfopen

本当に頭悪いんだな
今すぐホームレスに転職しろ
434 :
2017/03/19(日) 22:20:37.55 ID:dbfovMwi0
>>432
0番地にメモリが割り当てられてれば使える
435 :
2017/03/19(日) 22:27:10.76 ID:MM3vmS8Q0
ポインター = 存在しない;
仮想関数 = 存在しない;

存在しないを表す、キーワードを増やしたくないから、0 を使ったのだろう。
これがややこしさの原因

ポインター = 0;
仮想関数 = 0;

数値リテラルの、0 じゃない!
絶対にあり得ない表現だから、これを使っても問題ないだろうという、単なる暗号

まあ、古い言語だから、あちこちおかしくて、一般人には理解できない
436 :
2017/03/19(日) 22:49:48.29 ID:j2JD5hFe0
C++の仮想関数の=0とはちょっと違う。
ポインタは整数型と相互にキャストでき、NULLポインタと整数の0が対応すると定められている。
だからそれは数値リテラルの0で正しい。そもそもポインタのリテラルってないしな。
437 :
2017/03/19(日) 23:21:38.87 ID:xzxt/RKX0
じゃあNULLポインタのアドレスを知りたかったらprintfを使うか
アセンブラコードを見るしかないってこと?
438 :
2017/03/20(月) 00:56:15.53 ID:UNA38bnS0
>>437
NULLポインタのアドレスってなんだ。NULLポインタはどこも指してない
439 :
デフォルトの名無しさん (ワッチョイ bfa9-JN/B)
2017/03/20(月) 03:36:45.06 ID:j9IxIyz40
バイナリ表現を見たかったらunion使うとか
ポインタのアドレスを(char *)にキャストして
ごちゃごちゃやるとかすればいいんじゃね。
もっとも規格に則ったやり方かどうかは知らんがね。
440 :
2017/03/20(月) 06:36:17.55 ID:LcNjV7jZ0
>>433
null が 0 番地の環境ってことは 0 番地の領域は配列や malloc で取得した領域じゃないってことだよな
そんな領域に文字列置いて fopen に渡す?
ホームレスの発想って面白いな w
441 :
2017/03/20(月) 06:37:49.85 ID:LcNjV7jZ0
>>437
コンパイラーの仕様書とかソースコードを見るとかでもいいかもな

>>438
アスペかよ w
442 :
2017/03/20(月) 07:18:42.66 ID:u3I2WX630
JIS X 3010:2003 (ISO/IEC 9899:1999)
6.3.2.3
値0をもつ整数定数式又はその定数式を型void *にキャストした式を,空ポインタ定数(null pointer constant)(注)と呼ぶ。
空ポインタ定数をポインタ型に型変換した場合,その結果のポインタを空ポインタ(null pointer)と呼び,
いかなるオブジェクト又は関数へのポインタと比較しても等しくないことを保証する。
(注)空ポインタ定数としてマクロ NULL が<stddef.h>(及び他のヘッダ)で定義されている。
443 :
2017/03/20(月) 07:27:21.79 ID:29VmeOvG0
つまり、どこかのアドレスは指している、ってことだな。
どこも指してない、というのはインジケータとしての意味に過ぎず、解釈としては間違いか
444 :
2017/03/20(月) 08:37:58.12 ID:03OBGWSB0
>>440
>null が 0 番地の環境ってことは
そんな事一言も言っていない
お前バカ過ぎる本当にこの業界向いてない、ホームレスに転職しろ今すぐだ
445 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 08:52:54.28 ID:I/L1t1T+0
ホームレスをニートが見下してもねえ
446 :
2017/03/20(月) 09:04:12.11 ID:LcNjV7jZ0
>>443
現実的にどこも指さないポインタって作れないからな
保証されてるのは規格の範疇で作成したオブジェクトのアドレスと重ならないアドレスと言うことだけ
規格上は単一の値である必要もなかったと思う
447 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 09:07:56.29 ID:I/L1t1T+0
いや単一の値である必要はあるでしょ
空ポインタ同士を比較したら等しくなければならないんだから
448 :
2017/03/20(月) 09:10:36.34 ID:LcNjV7jZ0
>>445
まあそう言ってやるなよ
自分で何を書いてかも怪しいみたいだし w
449 :
2017/03/20(月) 09:11:28.86 ID:LcNjV7jZ0
>>447
> 空ポインタ同士を比較したら等しくなければならないんだから
それ規格にあったっけ?
450 :
2017/03/20(月) 09:23:06.95 ID:u3I2WX630
mallocがメモリ確保に失敗した場合の戻り値は何になる?
失敗しているのにどこかのアドレスを指しているのか?
NULLはあくまで空ポインタ定数であってアドレスではない
451 :
2017/03/20(月) 09:24:39.36 ID:29VmeOvG0
難しい議論になってまいりました
452 :
2017/03/20(月) 09:31:53.69 ID:03OBGWSB0
ID:I/L1t1T+0とID:LcNjV7jZ0
バカは群れたがるんだな

>>447
>いや単一の値である必要はあるでしょ
>空ポインタ同士を比較したら等しくなければならないんだから
バカ過ぎる
453 :
2017/03/20(月) 09:34:19.17 ID:MXp+WHcu0
>>449
6.3.2.2 void
4 Conversion of a null pointer to another pointer type yields a null pointer of that type.
Any two null pointers shall compare equal.

SQLのような3値論理のNULLとは違う。
454 :
2017/03/20(月) 09:43:07.50 ID:MXp+WHcu0
セクション間違えた。
6.3.2.3 Pointers
455 :
2017/03/20(月) 09:56:11.13 ID:6RAbChbAM
>>453
ああ、あるのか
教えてくれてありがとう
456 :
2017/03/20(月) 10:03:40.62 ID:hOjZeIpo0
規格は絶対というものではないから余り過信しすぎるのもよくないよ。
法律を全部守ってたら生きていけないのと同じで、規格も全部守ってたら
プログラム出来ない。
457 :
デフォルトの名無しさん (ワッチョイ 537b-gO1F)
2017/03/20(月) 10:08:01.76 ID:+YHRRlIg0
>>456
ウソつくなよ
458 :
2017/03/20(月) 10:24:31.38 ID:8700tGFOM
sockaddr ってCの規格全て守っている?
459 :
2017/03/20(月) 11:11:55.38 ID:np9p/Hhl0
NULLチェックって

int *p;
...
if(p==NULL) {...};

とやらないとダメ?

if(!p){...};
はバグ?
460 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 11:16:41.34 ID:I/L1t1T+0
>>452
ねえ、今どんな気持ち?
461 :
2017/03/20(月) 11:31:05.55 ID:03OBGWSB0
もしかして理解してないのかと思ってたら、案の定理解してないのか

> 空ポインタ同士を比較したら等しくなければならない
から
> いや単一の値である必要はあるでしょ
これを導いちゃう頭の悪さは救いようがない
お前もホームレスに転職しろ

ねえ、勝ち誇って
>>460
>>>452
>ねえ、今どんな気持ち?
とか言ってたけど、今、どんな気持ち?
462 :
2017/03/20(月) 11:41:59.43 ID:03OBGWSB0
バカの理解力のなさは想像を絶するから↑でも理解できないかもな
バカに理解し易いように極端な環境を設定しよう

32ビットでNULLポインタの内部表現を「最上位ビットが1である」とする
この定義では通りのNULLポインタが存在して
ポインタの比較は
(a & b & 0x80000000) || (a == b)

単一の値である必要は無いね
463 :
2017/03/20(月) 11:54:17.03 ID:osGsQQ0u0
>>390
おいおい,その struct hack て,ついちょっと前にお題になった
flexible array member だし,C99 で合法になったんじゃない?
464 :
2017/03/20(月) 11:55:14.34 ID:03OBGWSB0
ちなみに
> (a & b & 0x80000000) || (a == b)
はアドレス演算をC言語風にかいただけだからね
バカにつまらないあげ足取られないように、念のため

>>460
ねえ、今どんな気持ち?
465 :
2017/03/20(月) 11:55:15.89 ID:osGsQQ0u0
>>459
NULL なんか使うな
466 :
2017/03/20(月) 11:58:13.93 ID:u3I2WX630
>>459
式の中で空ポインタ定数の評価結果は偽(値0ではあるがアドレス0番地を意味するものではないことに注意)
となるからその使い方で問題ない
467 :
2017/03/20(月) 12:18:10.91 ID:MfyRzqQ9M
>>464
0x80000000 以降を使えない変な環境作るなよ。
468 :
2017/03/20(月) 12:21:13.83 ID:03OBGWSB0
>>467
バカに理解し易い極端な環境っただろ
バカの理解力のなさは想像を絶するからな

>>460
ねえ、今どんな気持ち?
469 :
2017/03/20(月) 12:40:06.63 ID:MfyRzqQ9M
>>468
だから、それだとヌルポ=0と同じだろ。
470 :
2017/03/20(月) 13:03:35.92 ID:MXp+WHcu0
元々が

>>446
>規格上は単一の値である必要もなかったと思う

てことだから内部表現の話をしているわけじゃないだろう。
仮にNULLに異なる複数の内部表現が存在していたとしても、規格上はプログラム側から
その違いを検知することはできない。
471 :
2017/03/20(月) 13:20:03.85 ID:hOjZeIpo0
ある特殊なパソコンはメインメモリーとは別にNULL専用の
補助メモリーを搭載していてそのメモリー空間にアクセスするには
NULLという特殊なメモリーアドレスを使用する可能性も否定できない。
472 :
2017/03/20(月) 13:43:07.64 ID:UNA38bnS0
>>471
CもCPUもよく分かってなさそうだけど、とりあえず上の変なのを真に受けちゃいけない。
補助メモリとか持ち出さなくても0番地はアクセスできる。
但しNULLがヌルポインタのことなら、NULL経由ではアクセスできない
473 :
2017/03/20(月) 13:45:18.75 ID:LcNjV7jZ0
>>462
それ equal じゃないだろ...
474 :
2017/03/20(月) 13:57:08.57 ID:03OBGWSB0
>>473
ホームレスは引っ込んでろ
475 :
2017/03/20(月) 14:07:41.46 ID:LcNjV7jZ0
>>474
ねえ、今どんな気持ち? w
476 :
2017/03/20(月) 14:17:01.77 ID:03OBGWSB0
>>475
>>449のように基本的な事知らないバカが絡んで来て鬱陶しいから、早くホームレスに転職してこの板から去って欲しいと言う気持ち

0番地にオブジェクト置く一例も理解できないんだろ
バカ過ぎて話にならないからとっとと転職しろよホームレスに
477 :
2017/03/20(月) 14:38:04.87 ID:LcNjV7jZ0
バカとしか返せなくて悔しいね w
478 :
デフォルトの名無しさん (ワッチョイ 2352-tW1y)
2017/03/20(月) 14:38:50.57 ID:JgeJM1UH0
エラい勢いなのに内容がほとんど無い…
暴言系キーワードが多いのか…
また触っちゃいけない人が暴れているのか…
479 :
デフォルトの名無しさん (ワッチョイ 537b-gO1F)
2017/03/20(月) 14:42:14.62 ID:+YHRRlIg0
>>470
内部表現みたいなら
void* nullptr=0;
char raw[sizeof(nullptr)];
memcpy(raw,&nullptr,sizeof(nullptr));
とか、比較はmemcmpで出来るでしょ
480 :
デフォルトの名無しさん (アウアウカー Sa57-RXeS)
2017/03/20(月) 15:05:43.66 ID:gHpTyHSqa
>>479
それは言語規格上の空ポインタの内部表現
処理系依存のNULLと一致するとは限らない
481 :
2017/03/20(月) 15:12:43.22 ID:03OBGWSB0
>>477
バカに理解できる典型例を示されて↓こう言う反論しかできないホームレスに言ってやれ
ホームレス転職仲間のID:I/L1t1T+0は逃亡したようだけど、お前ホームレスにすら転職できずにしがみついてんのか? w

440 デフォルトの名無しさん (ワッチョイ bf3c-3fK7)[sage] 2017/03/20(月) 06:36:17.55 ID:LcNjV7jZ0

>>433
null が 0 番地の環境ってことは 0 番地の領域は配列や malloc で取得した領域じゃないってことだよな
そんな領域に文字列置いて fopen に渡す?
ホームレスの発想って面白いな w
482 :
2017/03/20(月) 15:20:55.40 ID:03OBGWSB0
>>479,480
この文脈で迂闊に「NULL」と使っちゃう軽率なレスは放置推奨

> The macros are
> NULL
> which expands to an implementation-defined null pointer constant
なので

> 仮にNULLに異なる複数の内部表現が存在していたとしても、
は意味不明
483 :
2017/03/20(月) 15:30:30.19 ID:hOjZeIpo0
NULLはマクロじゃなくてもいいんだよな。
NULLリテラルというものが存在して
NULLは存在しないとしないわけは
NULLをアドレスとして使いたいからだろ。
すなわちNULLがアドレスであることに意味がある。
484 :
2017/03/20(月) 15:53:42.44 ID:WHkWYxkrM
>>481
equal に触れられたくなくて必死だな
485 :
2017/03/20(月) 16:11:16.20 ID:03OBGWSB0
>>484
バーカ 構って欲しけりゃ

>>440の方が先だから、そっちの弁明先にしろ
486 :
2017/03/20(月) 16:26:02.90 ID:5J3+8zMD0
つかお前ら、そのエネルギーは>>287にぶつけて有効的に使うべきだろ。
編集日時から、対象は「ポインタ」「配列とポインタ」だし。

ざっくり見たところ確かにいろいろ突っ込みどころが多すぎるが、一つずつやるしかない。
そこでヌルポの記述を抜き出してみる。

> NULLポインタ[編集]
> NULLポインタ(ナルポインタ、ヌルポインタ、空ポインタ)とは、
> 何も指しておらず、有効などんなポインタと比較しても等しくならないことが保証されているポインタのことである。
> そのため、返却値にポインタをとる関数の異常時の返却値として用いたり、
> 連結リストで末尾のデータで次の要素がないことを示すために使われたりする。
> なお、NULLポインタを経由して参照した場合、OSが異常を検知して即座にプログラムを停止させてくれることもあるが、
> そうでない環境も存在するので注意が必要である。 [2]
> NULLポインタの使用例として、 fopen関数はオープン操作に失敗した場合、空ポインタを返す。
> 詳細はC言語/標準ライブラリ/入出力#fopen関数を参照せよ。

うむ、全部書き直せと言いたくなるのは分かる。
そこで、俺が全部書き直してみよう。

NULLポインタ(ヌルポインタ)とは、
何も指していないことを意味する値が入ったポインタである。
有効なポインタとの比較は、等しくないことが保証されている。
ヌルポインタ同士の比較は、等しいことが推奨されている。(>>453)
ヌルポインタ自身の真偽は、偽であることが保証されている。(>>466)
これらの仕様等に簡便に整合するため、多くの処理系では0が割り当てられている。
ポインタを返す関数呼び出しが失敗した場合、ヌルポインタを返すことが多い。(fopenやmalloc)
これは、成功/失敗の判定が容易であり、また、バグ等でその領域を参照した場合にも、
メモリ保護が行われている一般のOS(Windows等)上ならエラーが検出されるからである。

安価の場所には、仕様書の該当項目へのリンクよろしくってことで。
487 :
2017/03/20(月) 16:32:17.26 ID:29VmeOvG0
レスが付かない、というのも1つのレスだってお婆ちゃんが言ってた
488 :
2017/03/20(月) 16:33:56.26 ID:osGsQQ0u0
>>486
>ヌルポインタ同士の比較は、等しいことが推奨されている。>>453
その shall は,ほとんど話者の意志,すなわち規格による強制を示している,やわらかくする必要はない
ヌルポインタ同士の比較は等しい,として十分
489 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 16:42:10.56 ID:I/L1t1T+0
shallが推奨だってさ、こいつ文系だろ
適当がいい加減だと思ってるやつと同じだ

おーいバカ、おまえ「歪み」って何と読む?
490 :
2017/03/20(月) 17:02:53.83 ID:5J3+8zMD0
>>487
やたら「前橋和弥著」が多くて臭いってやつか?
だったらここ書き換えてしまえば脚注から剥がせるんだから踏み絵になるだろ。

>>488
まあ確かに規格準拠してないケースは無視していいな。では以下か。
(変更無しの場所は> を付けてる)

> NULLポインタ(ヌルポインタ)とは、
> 何も指していないことを意味する値が入ったポインタである。
有効なポインタとの比較は、常に等しくない。
ヌルポインタ同士の比較は、常に等しい。(>>453)
ヌルポインタ自身の真偽は、常に偽である。(>>466)
> これらの仕様等に簡便に整合するため、多くの処理系では0が割り当てられている。
> ポインタを返す関数呼び出しが失敗した場合、ヌルポインタを返すことが多い。(fopenやmalloc)
> これは、成功/失敗の判定が容易であり、また、バグ等でその領域を参照した場合にも、
> メモリ保護が行われている一般のOS(Windows等)上ならエラーが検出されるからである。

>>489
いちいち噛み付くなよめんどくせー奴だな。
491 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 17:12:43.72 ID:I/L1t1T+0
まあ「歪み」はともかく>>476はブルブルって読むよな
492 :
2017/03/20(月) 17:16:08.32 ID:5J3+8zMD0
つかそれ何?初めて聞くんだけど?
ひずみ←理系
ゆがみ←文系
とかなの?
493 :
2017/03/20(月) 17:19:41.56 ID:5J3+8zMD0
すまん、ぐぐったら出てきた。てか纏められまくってるな。
しかし、関係ねーなこれ。
494 :
2017/03/20(月) 17:56:48.31 ID:03OBGWSB0
>>491
ねえ、今どんな気持ち?
495 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 18:04:23.35 ID:I/L1t1T+0
女呼んで抱いて揉んでいい気持ち♪
496 :
デフォルトの名無しさん (ワッチョイ bfa9-JN/B)
2017/03/20(月) 18:06:03.09 ID:j9IxIyz40
沖田浩之かよ
497 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 18:12:02.55 ID:I/L1t1T+0
あったねーE気持ちだっけ
498 :
2017/03/20(月) 18:13:13.31 ID:WHkWYxkrM
>>485
図星突かれてアイタタタってか ww
499 :
2017/03/20(月) 18:25:09.53 ID:N/1+9uyT0
サザンだろがw
500 :
2017/03/20(月) 20:19:21.07 ID:03OBGWSB0
>>498
> 有効なポインタとの比較は、常に等しくない。
ねえ、今どんな気持ち?
501 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 20:30:48.39 ID:I/L1t1T+0
わかる人にはわかるねえ♪
502 :
2017/03/20(月) 20:39:01.24 ID:LcNjV7jZ0
503 :
2017/03/20(月) 20:48:24.35 ID:/NLNF+jbd
あなたの頭に役に立たない知識をインストール中。。。
504 :
2017/03/20(月) 20:50:53.21 ID:QillsqV80
だれか三行で結論
505 :
2017/03/20(月) 20:55:06.45 ID:cWwQvKi8a


らねえ
506 :
2017/03/20(月) 21:04:45.13 ID:MfyRzqQ9M
ぬるぽ
507 :
デフォルトの名無しさん (ワッチョイ bf5b-2PX+)
2017/03/20(月) 21:37:47.15 ID:yZQWbF0t0
C言語で0番地にアクセスできるのが理解できるかできないかってだけだろう。
508 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 21:54:25.12 ID:I/L1t1T+0
>>507
できることとやっていいことの違いだよ
大人の分別ともいう
製造物責任が法律的なことってくらいはおまえも解るだろうけど
じゃあ規格って何だってあたりからハチャメチャになってやがる
509 :
2017/03/20(月) 21:58:38.49 ID:6okaUTo50
我慢大会開始
510 :
デフォルトの名無しさん (ワッチョイ 839b-8FG5)
2017/03/20(月) 22:14:26.84 ID:I/L1t1T+0
高齢童貞の我慢大会って何を我慢するんだかw
511 :
デフォルトの名無しさん (ワッチョイ 537b-gO1F)
2017/03/20(月) 22:16:16.44 ID:+YHRRlIg0
C言語でnullポインタをdereferenceするのは違法。コンパイラによってその後のコード含めて抹消される可能性すらある。

0番地のメモリを参照しにいくコード自体は環境によっては合法nullポインタが0以外の内部表現の場合は0番地にデータを割り当てる事も出来るだろう。ただし、整数0をポインタに入れるとnullポインタになってしまうので注意

これだけの話なのになんでグダグダ続いてんの?
512 :
2017/03/20(月) 22:49:00.68 ID:03OBGWSB0
>>502
> 有効なポインタとの比較は、常に等しくない。
ねえ、今どんな気持ち?
513 :
2017/03/20(月) 22:50:15.45 ID:03OBGWSB0
>>510
ねえ、今どんな気持ち?
514 :
2017/03/20(月) 22:59:33.93 ID:MXp+WHcu0
不条理系ホラー漫画を連想するw
515 :
2017/03/20(月) 23:19:17.62 ID:03OBGWSB0
>>511
>C言語でnullポインタをdereferenceするのは違法。コンパイラによってその後のコード含めて抹消される可能性すらある。
いや、コード削除しちゃダメだろ、正しく「未定義動作」すべき
516 :
デフォルトの名無しさん (ワッチョイ 537b-gO1F)
2017/03/20(月) 23:24:48.71 ID:+YHRRlIg0
>>515
未定義動作だから何もしない含めて何がおきてもいい。

”未定義動作 はタイムトラベルを引き起こす”でググれ
517 :
2017/03/20(月) 23:26:32.54 ID:oLSEmtobM
>>512
>>484
バカの必死ループ
518 :
2017/03/20(月) 23:39:34.50 ID:03OBGWSB0
>>517
> 有効なポインタとの比較は、常に等しくない。
ねえ、今どんな気持ち?
519 :
2017/03/20(月) 23:51:40.94 ID:1OeZAfgS0
私に会いに来た私を見ている二人の私
520 :
2017/03/20(月) 23:58:21.83 ID:GWfrNwZR0
また宗教戦争してんのか
521 :
2017/03/21(火) 00:08:27.12 ID:hvONl54jM
そんなに必死にならなくても w
522 :
2017/03/21(火) 00:37:43.24 ID:/+jzi6Fk0
>>516
読んだが「全てのCプログラマが未定義な振る舞いについて知っておくべきこと」の方が良いね
523 :
2017/03/21(火) 01:54:57.76 ID:Vm2G+Ucw0
タイムトラベルの話になってるとは……
ごめん、私にはついていけそうにないです。
524 :
デフォルトの名無しさん (ワッチョイ 33e6-8FG5)
2017/03/21(火) 02:53:37.31 ID:+DL1LwCN0
s/未定義な振る舞い/未定義の動作/
undefined behaviorというISO/IEC9899用語をJISではこう訳している
525 :
2017/03/21(火) 08:10:28.70 ID:bH1u/9cj0
未定義というのは規格で未定義ってことで、自由に未定義な部分を定義していいよ
新しく定義した部分で既存の定義を改変するようなことをしてもいいよってことだよな。
タイムマシーンはそれを悪意のあるように話を故意に捻じ曲げて
未定義=悪い動作をすることと思想を植え付けたいみたいだな
526 :
デフォルトの名無しさん (ワッチョイ 5375-gO1F)
2017/03/21(火) 08:27:43.61 ID:3WUWYr7R0
>>525
何言ってんのか解んねえけど、プログラマーは未定義動作をするコードを書いてはならない。それ以上でもいかでもない。
527 :
2017/03/21(火) 08:40:29.97 ID:bH1u/9cj0
コンパイラーによって定義がかわる部分が未定義動作だろ。
コンパイラーの実装によっては未定義動作がクラッシュするとか
間違った動作をするかもしれないと
定義されてるだけで、未定義なわけではない。
528 :
デフォルトの名無しさん (ワッチョイ 5375-gO1F)
2017/03/21(火) 08:43:03.73 ID:3WUWYr7R0
>>527
またまた何言ってんのか解んねえけど、コンパイラによって定義が変わる部分は処理系定義。
未定義動作は文字通り未定義
529 :
2017/03/21(火) 08:45:51.54 ID:bH1u/9cj0
未定義動作は規格で動作を定義しないということだから
コンパイラーが独自に定義していいってことだろ。
良い方向に定義するなら大歓迎。使わないなんてもったいない。
530 :
デフォルトの名無しさん (ワッチョイ 5375-gO1F)
2017/03/21(火) 09:12:14.39 ID:3WUWYr7R0
使わないなんてもったいないって何を?
531 :
2017/03/21(火) 09:21:56.24 ID:bH1u/9cj0
良い方向に定義された規格では未定義な動作
532 :
デフォルトの名無しさん (ワッチョイ 33e6-8FG5)
2017/03/21(火) 10:43:52.29 ID:+DL1LwCN0
>>527
それは未規定だタコ助

未規定のうち文書化義務のみ課されているのが処理系定義で
未定義は禁止以外の何者でもない

CPUの未定義命令には隠し命令があったりするが
このスレではISO/IEC9899、つまりCについてのみの話だ
混同してんじゃねえよつるっパゲ
533 :
デフォルトの名無しさん (ワッチョイ bfc8-2PX+)
2017/03/21(火) 10:45:25.94 ID:awqkwsPY0
移植性無視だな
534 :
2017/03/21(火) 11:27:10.77 ID:bH1u/9cj0
未定義はめんどくさいから禁止にしておこうということなかれ主義の慣例だからね。
仕来りや伝統を重んじる日本人にはこの手の人間が多い。
大事なのは自分で考えて使うか使わないか決める事。
理由も無く禁止と言われて従うのは個人の自由。
535 :
デフォルトの名無しさん (ワッチョイ 33e6-8FG5)
2017/03/21(火) 11:36:55.55 ID:+DL1LwCN0
文系ですらねえなこいつ
決めごとは、それが何であり何でないのか境界を示すんだよ
未定義は後者、つまりCではないという排除だ
536 :
2017/03/21(火) 11:42:42.81 ID:bH1u/9cj0
動作が未定義なわけで定義してない動作が起こるということじゃないよ
例えば一つの実装として、NULLポインターをデリファレンスすると
全てのキーワードやステートメントがJavaと置き換わるとしてもいいんだよ。
なぜなら未定義動作で今まで定義したものを変えてもいいと定義されているのだからね。
CがJavaに自由に拡張できる、これがCの寛容さなんだね。
537 :
デフォルトの名無しさん (ワッチョイ 33e6-8FG5)
2017/03/21(火) 11:59:45.78 ID:+DL1LwCN0
おまえの言い回しを真似て言うなら
CがC++に自由に拡張されたが、それは断じてCではない
かつて禿はC84と名乗ろうとしたがそんな勝手は通らなかった
538 :
2017/03/21(火) 12:04:48.72 ID:bH1u/9cj0
C++は初期状態がC++だからCじゃないだけだろ。
ちゃんと未定義動作をしてからCがC++にならないとCじゃない。
539 :
2017/03/21(火) 12:53:40.06 ID:UCmYUrR8M
>>535
Cの仕様で未定義と決められてるんだからCでしょ
もしかして>>330なの?
540 :
デフォルトの名無しさん (ワッチョイ 33e6-8FG5)
2017/03/21(火) 13:58:56.85 ID:+DL1LwCN0
>>538
おまえの言い回しを真似て言うなら
Javaも初期状態がJavaだからCじゃないだけだぜ

さっきおまえはこうも言っていたんだが
> CがJavaに自由に拡張できる、これがCの寛容さなんだね。
どっちなんだ?
541 :
2017/03/21(火) 14:07:31.83 ID:/+jzi6Fk0
未定義動作の濫用が許されるのは最適化まで

*ぬるぽ, "?- write('hello world!')";
こんなのがCだとは認めない
542 :
デフォルトの名無しさん (ワッチョイ 5375-gO1F)
2017/03/21(火) 14:57:56.17 ID:3WUWYr7R0
>>531
それって例えば現実にどんなものがあると?
543 :
2017/03/21(火) 20:46:55.55 ID:fjLA+enk0
仕様上の未定義動作に処理系が定義を与えちゃだめだと言うなら、clangの
UndefinedBehaviorSanitizerなんかもNGだな。
544 :
デフォルトの名無しさん (ワッチョイ 5375-gO1F)
2017/03/21(火) 21:04:09.67 ID:3WUWYr7R0
誰もそんな事言ってないと思うけど?
545 :
デフォルトの名無しさん (ワッチョイ 5399-3xgA)
2017/03/21(火) 21:54:42.42 ID:GykJf1ZS0
自然言語能力の重要性を教えてくれるスレ
546 :
2017/03/22(水) 02:36:18.39 ID:RsCcPqM10
>>542
*(uint32_t*)0x???????? = 0x???????? が任意アドレスへのストア命令にコンパイルされる、
とかいうのは伝統的に利用されてきた未定義動作と言えるかな。
547 :
デフォルトの名無しさん (ワッチョイ cfa0-8FG5)
2017/03/22(水) 05:43:13.61 ID:aJsdldWQ0
空ポインタじゃねえじゃん
548 :
デフォルトの名無しさん (ワッチョイ 5375-gO1F)
2017/03/22(水) 06:44:01.56 ID:sj71GTBZ0
>>546
そのアドレスが有効なら未定義動作じゃないんだけど
549 :
デフォルトの名無しさん (ワッチョイ 5375-gO1F)
2017/03/22(水) 09:21:55.79 ID:sj71GTBZ0
いや、訂正int32_tで書きこむのであればアドレスが有効でも場合によっては未定義動作になりうるね。
550 :
2017/03/22(水) 09:28:43.52 ID:UeMV6rw8M
>>546
volatile 付けてね。
551 :
2017/03/22(水) 18:18:23.27 ID:lkiNKfPzM
*(uintptr_t*)0x???????? = 0x????????
C99以降はuintptr_t
552 :
2017/03/22(水) 18:20:31.40 ID:lkiNKfPzM
失礼volatile付け忘れた
*(volatile uintptr_t*)0x???????? = 0x????????
553 :
デフォルトの名無しさん (ワッチョイ cfa0-8FG5)
2017/03/22(水) 18:53:09.70 ID:aJsdldWQ0
意味不明
ポインタのビット数以上の整数を
ポートのワード幅に使って何がしたい
554 :
2017/03/22(水) 19:15:08.79 ID:iVKayQlAM
551-552です
すまん間違えた
ポインタをその幅の整数型にキャストする時に使うのがuintptr_tだった
勘違いした
555 :
2017/03/22(水) 19:49:14.31 ID:Jve7RGmN0
*(volatile int*)((uintptr_t)0x??????) = 0x????
556 :
デフォルトの名無しさん (ワッチョイ be6b-72yv)
2017/03/23(木) 08:20:53.77 ID:xx3Et9SY0
意味不明
キャストする前の式がuintptr_tよりも
ビット数が多かったら失われる情報はどうするのか
ビット数が少なかったらMSBがどのように拡張されるのを意図しているのか
いずれにせよ文面に出ている値と違うアドレスにアクセスする不明瞭なコードにしかならない

そもそも、546がuint32_tを使ったのはポート幅という意味だったのに
ドヤ顔でuintptr_tと言い出した551からが間違いの始まりだ
普段、組み込みを全くやらないヤツであることが見え見え
557 :
デフォルトの名無しさん (ワッチョイ be03-72yv)
2017/03/24(金) 12:55:04.86 ID:Kvw1duXH0
ポインタ型のリテラルや、ポインタのビット演算は欲しい
C++14に追加された0bと桁区切りはありがたい
558 :
2017/03/24(金) 17:36:29.47 ID:175B8D420
型変換かUNIONするかして、必要な演算は整数型変数側で実施するとか。
大筋それで済むような気がするけど。
ポインタ直でインデックス以外の計算できた方がいい場面て、そんなにある?
559 :
デフォルトの名無しさん (ワッチョイ be03-72yv)
2017/03/24(金) 18:09:44.29 ID:Kvw1duXH0
自前基板用にmemtestみたいの作るとき
デコーダの構造でホワイトボックステストするのに
ビットORとか欲しくなるんだ
あと相対アドレスを扱うときポインタ同士の加算が欲しくなる
そこもとの言うとおり今んとこ整数にキャストでやってるけど
ときどき悲しくなってくることがある
560 :
2017/03/24(金) 18:38:39.76 ID:175B8D420
ほほう
561 :
2017/03/24(金) 21:35:12.56 ID:Z1YGpz2h0
それはポインタじゃなくてアドレスを操作したいってことなんじゃないか?
だとしたらどうやっても環境依存にならざるを得ないし、そうであればその環境で
ポインタとアドレスを表す整数値の相互変換が用意されればいいだけのような。
562 :
デフォルトの名無しさん (ワッチョイ be03-72yv)
2017/03/24(金) 22:13:25.18 ID:Kvw1duXH0
556のような心配をせずに済むなら
どんなやり方でもhowにはこだわらない
206KB

新着レスの表示

★スマホ版★■掲示板に戻る■全部前100次100最新50

名前:E-mail: