1 名前:デフォルトの名無しさん [2017/05/11(木) 22:20:03.99 ID:cn414UR90.net] C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ 前 echo.2ch.net/test/read.cgi/tech/1487757355/ www.geocities.jp/c_cpp_cs/about_c/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
152 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 12:33:01.58 ID:wd4rgPA1a.net] ポインタなら上が出来て、参照は出来ないんよ。
153 名前: mailto:sage [2017/05/21(日) 12:41:04.19 ID:pUWFtSb10.net] >>146 そりゃ配列とポインタは振る舞いがまったく同一というわけではなく,はっきりいって別物だから,言い分はわからんでもない. >>143 訂正する,配列名を示す識別子は配列の先頭を示すポインタになる >>145 が丁寧な説明だ >>147 そのたとえは意味不明,可変長引数の可変部は float->double に格上げされることを隠すなんでひどい物言いだね
154 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 12:51:40.59 ID:EZ567Ylh0.net] 最近は初心者を騙すのが流行しているのか
155 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 13:33:41.41 ID:LBGUGIAq0.net] linuxでc言語開発したいんですが、IDE使わないのが一般的なんですか?
156 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 13:45:10.14 ID:2TTm6ATPa.net] はい。 CやJavaならEclipseが一般的かと。 Eclipseにサポートして貰ってないのはviやemacsカスタマイズしてIDEとして使う感じ。
157 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 13:45:35.47 ID:2TTm6ATPa.net] あ、はい。は忘れてw
158 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 15:31:07.21 ID:Mj8j7wxe0.net] >>132 もおねがいします
159 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 15:34:52.30 ID:kPjNSBDr0.net] >>157 質問文が酷すぎて、何を聞きたいのか理解されてないだけだぞ [] [ここ壊れてます]
161 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 16:54:32.37 ID:bYtGqajI0.net] >>154 最近は yacc じゃなくて何か新しいのあるんだよね。
162 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 17:27:25.62 ID:1Ubd4ETn0.net] >>159 最近じゃないけど bison とかか?
163 名前:デフォルトの名無しさん [2017/05/21(日) 17:32:24.58 ID:ViqOYprV0.net] 何でいきなり構文解析器の話になった?
164 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 17:53:33.03 ID:Qv//Z9+/0.net] >>152 >訂正する,配列名を示す識別子は配列の先頭を示すポインタになる >>145 が丁寧な説明だ なんねーよ カス int a[10]; a++; // お前の主張が正しいならエラーにはならないはずだ
165 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 17:53:37.15 ID:/ema5D/U0.net] c言語作るって言ってるからでしょ
166 名前:デフォルトの名無しさん [2017/05/21(日) 17:59:27.49 ID:EhbYbiNc0.net] >>149 コンパイルエラーって、どこが? https://ideone.com/VpAiLB >>152 147だが、最後ふじこってんじゃん 落ち着いてもっぺん日本語で書いてくれ
167 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 18:06:09.69 ID:zNfd0kUpa.net] >>162 横からと言うか流されてるんで。。。 飛び飛びになってるけど >>148 >>150 >>151 は、おいらなりに結構正確に書いたつもり。 参照はC++用語だからCだと&はアドレス演算子が正確だけど。
168 名前: mailto:sage [2017/05/21(日) 19:10:04.03 ID:pUWFtSb10.net] はいはい,そりゃ配列とポインタは互換じゃないよ 分かりやすい説明はないものかね‥
169 名前: mailto:sage [2017/05/21(日) 19:10:52.98 ID:pUWFtSb10.net] >>164 >147だが、最後ふじこってんじゃん ん?
170 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 19:20:07.02 ID:lXB+sVuE0.net] %f は 引数を double 仮定で引き出す 呼び出し側は (可変長引数の可変部なので) doubleに格上げしてから引数に詰んでる 詰んでるものと引き出すものの食い違いはおきてないんじゃないかね
171 名前: mailto:sage [2017/05/21(日) 19:28:27.25 ID:pUWFtSb10.net] >>168 >積んでるものと引き出すものの食い違いはおきていない そりゃ引数に積むときに float->double しているから,そうなって当然だが,その事実を隠したまま >>147 を主張されても,そりゃないよ,としかいいようがない.
172 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 19:29:57.61 ID:zNfd0kUpa.net] >>166 無いなー。。。 ここが変だよC言語とかもう廃刊だっけ。 あれじゃないと説明しきれん。
173 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 19:40:24.59 ID:kPjNSBDr0.net] 配列型の"式"は、一部のケースを除いてポインタ型の式に"型変換"される、それは配列の先頭要素を指す、また左辺値でもない 関数の実引数での使用についてなら、>>147 の既定の実引数拡張でfloatがdoubleに拡張(型変換)される例と同じような話だと思うんだけどな
174 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 20:10:14.64 ID:zNfd0kUpa.net] >>146 おいらはこれ、sizeofが関数じゃなくて演算子って呼ばれてるのが肝で、関数に配列渡しても何故かポインタのサイズじゃなくて配列サイズ返す謎な奴って解釈してるな。
175 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 20:19:46.42 ID:8VZiX6Z0a.net] んあ。 ごめん。 >>172 は無し。 嘘付いた。 配列関数に渡す時、配列の大きさも別で関数に渡してたの思い出した。
176 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 20:24:04.46 ID:8VZiX6Z0a.net] >>146 これは配列宣言した場所と同じスコープなら配列のサイズ返すけど、配列を関数に渡した先(関数の中)でこれするとポインタのサイズが返ってくる。
177 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 21:28:16.83 ID:LBGUGIAq0.net] >>155 ありがとう
178 名前:デフォルトの名無しさん [2017/05/21(日) 21:39:54.59 ID:EhbYbiNc0.net] >>174 int main(void) { char i[100]; wanker(&i); return 0; } void wanker(char (*j)[100]) { /* ここは、「配列を関数に渡した先(関数の中)」だが? */ printf("%u", sizeof *j); }
179 名前:デフォルトの名無しさん [2017/05/21(日) 21:45:09.31 ID:EhbYbiNc0.net] >>169 隠している? それは聞き捨てならんな 公文書に書かれていることを俺がどう隠したとぬかす?
180 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 21:53:31.38 ID:8VZiX6Z0a.net] >>176 それ、文字配列だからヌル文字(0)で数えられるっしょ。 intの配列とか無理だから。
181 名前:デフォルトの名無しさん [2017/05/21(日) 22:00:12.54 ID:EhbYbiNc0.net] >>178 どう無理なんだ? int main(void) { int i[100]; booger(&i); return 0; } void booger(int (*j)[100]) { printf("%u", sizeof *j); }
182 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 22:02:18.84 ID:lXB+sVuE0.net] いやいや sizeof はコンパイル時に確定する演算だから strlen みたいにポインタの指し先追っかけてデリミタ見つかるまでのバイト数とか 実行時依存じゃない
183 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 22:08:35.89 ID:8VZiX6Z0a.net] >>179 ん? 出来てんの? よく見たら宣言だけで初期化(確保)はしてないのな。 うーん。。。 ちょっとおいらの方でも書いて検証してみるわ。
184 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 22:10:30.59 ID:lXB+sVuE0.net] だから sizeof は型さえ類推できれば、変数の実態なくてもいいんだって なんなら () 付けて 型をかけばいい
185 名前:デフォルトの名無しさん [2017/05/21(日) 22:10:36.85 ID:EhbYbiNc0.net] 176でも初期化はしてないが
186 名前:デフォルトの名無しさん [2017/05/21(日) 22:13:36.56 ID:EhbYbiNc0.net] >>182 型をかけばいいって、こうか? if (sizeof i != sizeof(char*)) puts("ahem!!");
187 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 22:15
] [ここ壊れてます]
188 名前::17.46 ID:lXB+sVuE0.net mailto: >>184 ごめん、すべて ID:8VZiX6Z0a 君向け (>>178 他) [] [ここ壊れてます]
189 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 22:39:46.18 ID:fA6hmJLUa.net] >>179 分かってきたかも。 そのコードだと int *i; ってポインタ宣言すると iのままがポインタで、*iがポインタの指す中身だから。。。 配列の実体になるんだ。 もっとシンプルに初心者のやりがちな int main(void) { int i[100]; booger(i[100]); return 0; } void booger(int i[100]) { printf("%u",sizeof a[100]); } こう言うコードだとポインタのサイズが返ってくる。
190 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 22:41:32.99 ID:fA6hmJLUa.net] ちゅーか十何年ぶりのCだったわ。。。
191 名前:デフォルトの名無しさん mailto:sage [2017/05/21(日) 22:44:28.27 ID:fA6hmJLUa.net] sizeof a[100]はタイポだけど許してね。 配列の変数名にiとか普通使わんのよ。 インデックス変数に使うからさ。 a[i]
192 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 06:47:21.18 ID:3isejMaU0.net] void f(void * v, int size, void * x){ *v=*x; } 上のコードで x の指し示す値のサイズが size であるとき どのようにvの指し示す場所にxが指し示す値を一度に代入できますか?
193 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 07:31:20.24 ID:uEzgaoxk0.net] memcpy(*v, *x, size);
194 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 07:34:49.91 ID:uEzgaoxk0.net] 訂正 memcpy(v, x, size);
195 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 07:37:02.82 ID:qnT1Y5yL0.net] >>189 学校の宿題か?
196 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 08:26:47.95 ID:jL5+dSxZ0.net] for (i=0; i<size; i++) ((int8_t*)v)[i] = ((int8_t*)x)[i];
197 名前:デフォルトの名無しさん [2017/05/22(月) 09:21:02.66 ID:uUtJqX7+0.net] while(size--) *(char*)v++ = *(char*)x++;
198 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 11:15:09.22 ID:jL5+dSxZ0.net] >>194 文法エラー (v, x のインクリメント操作は void * で評価されてる)
199 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 11:57:30.90 ID:WXjICEY9M.net] size の単位が何なのか分からんなぁ。
200 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 12:02:49.26 ID:HD7uOEeF0.net] (`・ω・´) ?
201 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 12:44:29.59 ID:+BU32a3i0.net] 最近はCMakeを使うのが普通なの? GNU Make覚える必要があるかな 話変わるけど、MakeFileってソース1つ追加するたびに、変更する必要がある?
202 名前:デフォルトの名無しさん [2017/05/22(月) 13:11:20.22 ID:uUtJqX7+0.net] >>195 すまん、素でボケてたw しかしこれ構文規則には違反してないぞ 意味論においてvoid*の増分が禁止されているって話で
203 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 13:14:30.22 ID:jL5+dSxZ0.net] >>199 あー コンパイルエラーと言えばよかったかw
204 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 13:14:54.60 ID:CEFnqLB20.net] Makefileを作らなくてもmake出来るケースがある事を最近は知らない奴が多い
205 名前:デフォルトの名無しさん [2017/05/22(月) 17:02:12.42 ID:uUtJqX7+0.net] cc love.c じゃなく make love でいい件か?
206 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 19:00:44.22 ID:J9ejs7e9M.net] makeのデフォルトルールだね .c.o はよく使う
207 名前:デフォルトの名無しさん [2017/05/22(月) 19:41:32.06 ID:h9CxmUP8M.net] >>201 まじか、知らなかった
208 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 19:45:14.71 ID:yWHDUG7V0.net] 作って覚えるVisual C#のようなゴールを設定して色々学ぶC言語の書籍はありますか?
209 名前:デフォルトの名無しさん [2017/05/22(月) 20:02:28.46 ID:uUtJqX7+0.net] 便利にゃ違いないけど ロクに指示も与えずよきに計らえってスタンスで 何が出来てくるのかに受動的でいることに 俺は我慢できないな 無関心な大将を有能な部下がフォローして事なきを得たってことだろ
210 名前:デフォルトの名無しさん [2017/05/22(月) 20:02:58.11 ID:uUtJqX7+0.net] だからスタックサイズのデフォも知らない馬鹿が大量発生するわけだし
211 名前: mailto:sage [2017/05/22(月) 20:03:31.72 ID:Zgh5eQVH0.net] >>195 (void *)c++ は1だけインクリメントされる,c99 では規格で決まっている
212 名前: mailto:sage [2017/05/22(月) 20:04:10.12 ID:Zgh5eQVH0.net] >>199 >意味論においてvoid*の増分が禁止されているって話で そんな決まりはない,void * のインクリメントは正確に1だ
213 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 20:15:17.89 ID:5FlvGyv/0.net] *vがsize分確保されてないんじゃね? 普通こうだよな void f(void ** v, int size, void * x)
214 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 20:16:31.52 ID:2o5iWMtc0.net] >>208 しらなんだ C99 からなのかね
215 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 21:22:47.69 ID:d/63nSXI0.net] voidがサイズ持ってるとか無理やり過ぎ 便利だけど
216 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 21:22:49.29 ID:lKEcPOEA0.net] >>208 ,209 うそつき
217 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 21:31:07.71 ID:oluY6epY0.net] 1になるのはgcc拡張だろ
218 名前:デフォルトの名無しさん [2017/05/22(月) 21:42:16.48 ID:uUtJqX7+0.net] そういうオチか ばかたれぃっ!!
219 名前:デフォルトの名無しさん mailto:sage [2017/05/22(月) 23:25:56.35 ID:klirxPDR0.net] 息をするように嘘をつかれた
220 名前: mailto:sage [2017/05/23(火) 06:44:54.44 ID:a7cn3COJ0.net] >>214 C99 からガチで
221 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 09:00:04.50 ID:BTD2Lf690.net] >>208-209 >>217 C99規格には「(void *)c++ は1だけインクリメントされる」という規定はない。 C99規格書(ISO/IEC 9899)は英語なのでそれを元にしたJIS X3010で説明する。 X3010は章番号を変えてないのでISO/IEC 9899の該当文章は自分で確認してくれ。 ISO/IEC 9899:TC2 www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf JIS X3010 kikakurui.com/x3/X3010-2003-01.html > 6.2.5 型 > 型は,オブジェクト型(オブジェクトを完全に規定する型),関数型(関数を規定する型), >及び不完全型(その大きさを確定するのに必要な情報が欠けたもの)に分類する。 > void型の値の集合は空とする。それは,完全にすることのできない不完全型とする。 > void へのポインタは,文字型へのポインタと > 同じ表現及び同じ境界調整要求をもたなければならない。 voidは不完全型だがvoid*はオブジェクト型でchar*と相互に代入可能だ。 > 6.5.3.4 sizeof 演算子 > sizeof演算子は,関数型若しくは不完全型をもつ式,それらの型の名前を括弧で > 囲んだもの,又はビットフィールドメンバを指し示す式に対して適用してはならない。 > 型char,unsigned char若しくはsigned char(又はそれらの修飾版)をもつ > オペランドに適用した場合の結果は,1 とする。 不完全型であるvoidにはsizeofを適用できない。 char派生はサイズ1と明確に規定されているがvoidのサイズは規定がない。 だから(void *)c++が元の値のままでもC99規格違反ではない。
222 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 09:33:11.13 ID:6xCmSTo3M.net] >>218 「void はサイズ1だけど、sizeof するなよ」ってことじゃね? 「適用してはならない」が何なのかわからんけど。
223 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 09:47:33.99 ID:Mt8tSRb/M.net] >>219 サイズ1ってどこからわかるの?
224 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 11:13:27.58 ID:ufwaINxg0.net] ウンコQz得意の炎上学習法か とっとと死ねよ
225 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 11:24:40.32 ID:ufwaINxg0.net] >>218 ポインタの算術演算なので参照するところが違う 6.5.6-2の定義で加算可能なポインタは「オブジェクトへのポインタ」であり、 void *はキミが引用した6.2.5によりこの条件を満たさない 従ってQzはうんこ 今すぐ死ね 6.5.6 Additive operators 2 For addition, either both operands shall have arithmetic type, or one operand shall be a pointer to an object type and the other shall have integer type. (Incrementing is equivalent to adding 1.)
226 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 11:31:22.03 ID:YiZYoA3+0.net] 規格のどこかにあったはず
227 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 11:45:51.13 ID:ENsR+rXL0.net] おいQZ都合悪くなったら自演で叩きかよ おまえもうム板に向いてないから一人でコードオナニーしてろよ
228 名前: mailto:sage [2017/05/23(火) 12:35:42.70 ID:F0rvxaiH0.net] この件、過去に私が書いたコードを元に議論されたんだよね、当時の書き込みが見つからない… >>218 >>222 ありがとうございます。感謝です。うれしいです。 >>218 >void へのポインタは,文字型へのポインタと >同じ表現及び同じ境界調整要求をもたなければならない。 というのだから >>222 当然、(char *)++ と (void *)++ は同じだよね
229 名前: mailto:sage [2017/05/23(火) 12:37:05.33 ID:F0rvxaiH0.net] >>255 = >>256
230 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 12:38:56.50 ID:fCVURflQ0.net] 配置アドレスのアライメント要求が等しいのと アドレスの算術演算で同じ結果になるのは別じゃ?
231 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 12:50:27.27 ID:ufwaINxg0.net] このバカは https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Pointer-Arith.html#Pointer-Arith すら読まずに、C99 からガチでキリッ とか言ってんのか 死ね死ね死ね今すぐ死ね
232 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 12:57:12.80 ID:fCVURflQ0.net] ideone の C99 でも(同じwarninngで)文句言ってるな https://ideone.com/fDNXlH
233 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 13:03:46.65 ID:BTD2Lf690.net] >>225 「同じ表現及び同じ境界調整要求」と同じ演算ができるかは別の話だ。 const変数は非const変数と「同じ表現及び同じ境界調整要求」だが変更できない。 >>222 のJIS X 3010:2003該当部分は下記の通りだ。 voidはオブジェクト型ではなく不完全型だからvoid*に加減演算するのは規格外だ。 > 6.5.6 加減演算子 > 制約 加算の場合,両オペランドが算術型をもつか,又は一方のオペランドがオブジェクト型への > ポインタで,もう一方のオペランドの型が整数型でなければならない。(増分は 1 の加算に等しい)
234 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 15:16:25.17 ID:Eouhg5rk0.net] gccでも-pedanticオプションを使えばgcc拡張を警告するぞ -std=c99オプションに頼るな gcc-8の警告文 warning: wrong type argument to increment [-Wpointer-arith] clang-5の警告文 warning: arithmetic on a pointer to void is a GNU extension [-Wpointer-arith]
235 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 17:10:14.54 ID:ENsR+rXL0.net] QZ怒りの暴走
236 名前:デフォルトの名無しさん [2017/05/23(火) 17:50:06.75 ID:YSxby3lha.net] >>225 char型へのポインタ型のオブジェクトとvoid型へのポインタ型のオブジェクトが同じ境界調整を持つという規格が なぜchar型のオブジェクトとvoid型のオブジェクトが同じサイズという話になるの?
237 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 18:08:28.42 ID:F0rvxaiH0.net] >>230 なるほど、感謝です。 この議論、以前にも(自分のコードを対象に)問題になって、そのときは void *p; に対して p + 3 が意味をもつのか、というあたりだったのですが、当時の議論に誤りがあったのかもしれません。 なお手元のgcc5.3.0 では -ansi -Wall で警告を出してくれませんでした。 >>228 あなたにもとっても感謝してますよ これからもどうかご教示ください :-) >>233 えっ、そう読むのか…
238 名前:デフォルトの名無しさん [2017/05/23(火) 18:17:27.01 ID:YSxby3lha.net] >>234 それ以外にどう読むの? 「同じ表現」はポインタ型のオブジェクトの内部表現の話だよね 並列で書いてある「同じ境界調整」もポインタ型のオブジェクトの境界調整の話と捉えるのが自然じゃないの
239 名前:デフォルトの名無しさん [2017/05/23(火) 18:22:45.88 ID:YSxby3lha.net] >>234 あと、-Wpointer-arithって言われてるのに、なんでWallで確認してるの? Wallを勘違いしてない?
240 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 18:32:25.29 ID:ufwaINxg0.net] >>230 >(増分は 1 の加算に等しい) ++を増分演算って訳した上に「演算」を省略すると意味不明になるね
241 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 18:40:44.02 ID:F0rvxaiH0.net] >>235 該当部分を読むと JIS 6.2.5 >void へのポインタは,文字型へのポインタと同じ表現及び同じ境界調整要求をもたなければならない ( 39 ) 。 >同様に,適合する型へのポインタ同士の場合,修飾版であるか又は非修飾版であるか(const とかのことby QZ) にかかわらず, >同じ表現及び同じ境界調整要求をもたなければならない。 >構造体型へのポインタは,すべて同じ表現及び 同じ境界調整要求をもたなければならない。 >共用体型へのポインタは,すべて同じ表現及び同じ境界調整 要求をもたなければならない。 >これ以外の型へのポインタは,同じ表現又は同じ境界調整要求をもつ必要はない。 これを読んで感じるのは、つまりポインタ自身の表現やアラインメントを、いろいろ細分化する実装を思いつかない far とか near とかでもなさそうだ。 細分化するとすればむしろポインタが指す先に関することではないだろうか? >>236 え?-Wall って全部だすんじゃなかったんですかね。たぶん勘違いしていると思う。
242 名前:デフォルトの名無しさん [2017/05/23(火) 18:40:46.39 ID:wffizmnr0.net] 汎用ポインタのインクリメントは、 エラーが出るか1進むかだろう。
243 名前:デフォルトの名無しさん [2017/05/23(火) 18:41:11.96 ID:7CxjD8/v0.net] >>235 境界調整が同じでもサイズの違うオブジェクトへのポインタはあるだろ char *a, (*b)[2]; K&R C では char* でよかった用途に、 なぜ、わざわざ void* を持ち込んだのか考えてみれ サイズが 1 なのが気持ち悪くて、 サイズが不明ということにするためだろうが この期に及んで void* が指す先のサイズが 1 とか言い出す どスカタンがもしいたら死刑でいい話だぞ
244 名前:デフォルトの名無しさん [2017/05/23(火) 18:46:38.37 ID:YSxby3lha.net] >>240 安価先間違ってない? ポインタの指すオブジェクトのサイズが一緒なんて一言も書いてないんだけど
245 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 18:53:09.03 ID:F0rvxaiH0.net] >>240 よくわかる、その意見 でも memcpy(), memmove() の引数が void * であることが、ちらりと頭に過ぎるんです これらは C で実装できない、てことですかね?
246 名前: mailto:sage [2017/05/23(火) 18:56:05.69 ID:F0rvxaiH0.net] ID:F0rvxaiH0 = QZaw55cn4c
247 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 18:57:52.22 ID:07biNjOo0.net] >>242 何言ってんの?
248 名前:デフォルトの名無しさん [2017/05/23(火) 19:00:42.38 ID:7CxjD8/v0.net] >>241 IDで追ってみたら、おまえさんの疑いは晴れた すまんかった
249 名前: mailto:sage [2017/05/23(火) 19:01:37.22 ID:F0rvxaiH0.net] >>244 void *memmove(void *dst, const void *src, unsigned n); void *memcpy(void *dst, const void *src, unsigned n); にて char * ではなく void * になっている理由はなにか?
250 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 19:09:35.34 ID:ufwaINxg0.net] >>240 いや第一目的は、全ての型へのポインタと互換(キャストなしで変換できる)なポインタが欲しかったのだ
251 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 19:17:52.52 ID:07biNjOo0.net] >>246 汎用なのになんでstring.hかと思ったことはある
252 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 19:31:53.76 ID:ZdN5y2SH0.net] >>238 Wallは全ての警告が有効になるわけではない https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Warning-Options.html#index-Wall > これを読んで感じるのは、つまりポインタ自身の表現やアラインメントを、いろいろ細分化する実装を思いつかない > far とか near とかでもなさそうだ。 > 細分化するとすればむしろポインタが指す先に関することではないだろうか? 思いつかないなら、同じにすれば良いだけでしょ そこからなぜ「同じ表現」はポインタの話なのに、「同じ境界調整要求」はポインタの先のオブジェクトの話になるの? >構造体型へのポインタは,すべて同じ表現及び 同じ境界調整要求をもたなければならない。 >共用体型へのポインタは,すべて同じ表現及び同じ境界調整 要求をもたなければならない。 構造体/共用体型のオブジェクトが等しい境界調整要求を持つほうが非現実的でしょ