!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 155
https://mevius.5ch.net/test/read.cgi/tech/1589120427/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 156
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 9bb7-/QqT)
2020/09/28(月) 14:41:30.00ID:QxfbhGyV012642 (ワッチョイ cbda-KV+F)
2020/10/11(日) 00:54:48.93ID:Oo+TUOYr0 >>42
一部誤っていたので訂正。
6.5.16 Assignment operators
3
An assignment operator stores a value in the object designated by the left operand.
An assignment expression has the value of the left operand after the assignment, but is not an lvalue.
The type of an assignment expression is the type the left operand would have after lvalue conversion.
The side effect of updating the stored value of the left operand is sequenced after the value computations of the left and right operands.
The evaluations of the operands are unsequenced.
なので代入式の値は「左辺式(left operand)に右辺式(right operand)の値を代入した後の値を右辺値(rvalueの意味)として評価した値」が正しかった。
一部誤っていたので訂正。
6.5.16 Assignment operators
3
An assignment operator stores a value in the object designated by the left operand.
An assignment expression has the value of the left operand after the assignment, but is not an lvalue.
The type of an assignment expression is the type the left operand would have after lvalue conversion.
The side effect of updating the stored value of the left operand is sequenced after the value computations of the left and right operands.
The evaluations of the operands are unsequenced.
なので代入式の値は「左辺式(left operand)に右辺式(right operand)の値を代入した後の値を右辺値(rvalueの意味)として評価した値」が正しかった。
127デフォルトの名無しさん (ワッチョイ 0363-KV+F)
2020/10/11(日) 00:55:54.98ID:y5Dl22i00 HNをNGに登録し、レス書いた奴ごとアボーンすると比較的すっきりする
128デフォルトの名無しさん (ワッチョイ c393-YQ4O)
2020/10/11(日) 01:44:57.79ID:yV/54YAK0 >>126
意訳すれば「代入式の値は、左辺へ代入後に取り出してたら処理が無駄に重くなるから、代入直前の値を返すべき。返されるものは、左辺と同じ(値と型が)」
まあ端的に言うと、左辺が返されてると理解しとけばいいね。
意訳すれば「代入式の値は、左辺へ代入後に取り出してたら処理が無駄に重くなるから、代入直前の値を返すべき。返されるものは、左辺と同じ(値と型が)」
まあ端的に言うと、左辺が返されてると理解しとけばいいね。
129デフォルトの名無しさん (ワッチョイ cbda-KV+F)
2020/10/11(日) 07:57:55.20ID:Oo+TUOYr0 >>128
「左辺へ代入後に取り出してたら処理が無駄に重くなるから、代入直前の値を返すべき」なんて書いてない
脚注に
> 111) The implementation is permitted to read the object to determine the value but is not required to, even
when the object has volatile-qualified type.
とはあるが, どう実装すべきなどとは書いていないのだから, それは意訳ではなくお前の意見だ
「左辺へ代入後に取り出してたら処理が無駄に重くなるから、代入直前の値を返すべき」なんて書いてない
脚注に
> 111) The implementation is permitted to read the object to determine the value but is not required to, even
when the object has volatile-qualified type.
とはあるが, どう実装すべきなどとは書いていないのだから, それは意訳ではなくお前の意見だ
130デフォルトの名無しさん (ワッチョイ c393-YQ4O)
2020/10/11(日) 08:44:36.55ID:yV/54YAK0131デフォルトの名無しさん (ワッチョイ c393-YQ4O)
2020/10/11(日) 09:21:01.70ID:yV/54YAK0 あと、そういうなら、君の書いた
>代入式の値は「左辺式(left operand)に右辺式(right operand)の値を代入した後の値を右辺値(rvalueの意味)として評価した値」
これだって君の意訳で意見だよね。
言葉は通じるためにある。ネット検索しても、世間一般的にも代入のことは副作用と呼んでるよね。
副作用を検索すれば「代入」という言葉が頻出する。
なので「The side effect of updating the stored value of the left operand」⇒ 代入 となる
次に、「(代入) is sequenced after the value computations of the left and right operands.」を訳すると「代入は両オペランドの値を処理後に行われる」となる。
つまり、「代入は最後に行われる」とは読めないかな? よって、返す値はその前に原則的に決まってるということ。
なので「代入した後の値を」という表現は違和感あるし、ワタスの代入直前の方が正解に近くはないかな?
まあ、ワタスは、C言語の超初心者なので、君の挙げてくれた英文を周辺状況と合わせて普通に読んでるだけだけども。
そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
>代入式の値は「左辺式(left operand)に右辺式(right operand)の値を代入した後の値を右辺値(rvalueの意味)として評価した値」
これだって君の意訳で意見だよね。
言葉は通じるためにある。ネット検索しても、世間一般的にも代入のことは副作用と呼んでるよね。
副作用を検索すれば「代入」という言葉が頻出する。
なので「The side effect of updating the stored value of the left operand」⇒ 代入 となる
次に、「(代入) is sequenced after the value computations of the left and right operands.」を訳すると「代入は両オペランドの値を処理後に行われる」となる。
つまり、「代入は最後に行われる」とは読めないかな? よって、返す値はその前に原則的に決まってるということ。
なので「代入した後の値を」という表現は違和感あるし、ワタスの代入直前の方が正解に近くはないかな?
まあ、ワタスは、C言語の超初心者なので、君の挙げてくれた英文を周辺状況と合わせて普通に読んでるだけだけども。
そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
132デフォルトの名無しさん (ワッチョイ 4a61-wCbK)
2020/10/11(日) 09:24:54.54ID:1n9mnEAt0133デフォルトの名無しさん (ワッチョイ ea47-YQ4O)
2020/10/11(日) 12:23:08.94ID:kZXFoyze0134デフォルトの名無しさん (ガラプー KK56-yUdL)
2020/10/11(日) 15:19:35.65ID:Ryz1amqZK135デフォルトの名無しさん (ワッチョイ cbda-KV+F)
2020/10/11(日) 16:59:31.64ID:Oo+TUOYr0 >>131
阿呆かな?
>>128は>>126の原文中に無く脚注で書かれている内容だしその脚注にも「左辺へ代入後に取り出してたら処理が無駄に重くなるから」などとは書かれていない
> 次に、「(代入) is sequenced after the value computations of the left and right operands.」を訳すると「代入は両オペランドの値を処理後に行われる」となる。
> つまり、「代入は最後に行われる」とは読めないかな?
正しい
> よって、返す値はその前に原則的に決まってるということ。
妄想
規格ではunspecified (実装の自由度)
> そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
逆だろ, 処理系を指定しないなら規格に従うしかない。
阿呆かな?
>>128は>>126の原文中に無く脚注で書かれている内容だしその脚注にも「左辺へ代入後に取り出してたら処理が無駄に重くなるから」などとは書かれていない
> 次に、「(代入) is sequenced after the value computations of the left and right operands.」を訳すると「代入は両オペランドの値を処理後に行われる」となる。
> つまり、「代入は最後に行われる」とは読めないかな?
正しい
> よって、返す値はその前に原則的に決まってるということ。
妄想
規格ではunspecified (実装の自由度)
> そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
逆だろ, 処理系を指定しないなら規格に従うしかない。
136デフォルトの名無しさん (ワッチョイ c393-YQ4O)
2020/10/11(日) 17:27:29.04ID:yV/54YAK0 >>135
全部反論になってなくて、相手の言ってる言葉を都合のいいように解釈してるだけだね。
全部反論になってなくて、相手の言ってる言葉を都合のいいように解釈してるだけだね。
137デフォルトの名無しさん (ブーイモ MM76-BI9m)
2020/10/11(日) 17:45:12.56ID:0ARGcdMRM 反論できないことは全部反論になってないで片付けるタイプ
138135 (アウアウウー Sa2f-2PH9)
2020/10/11(日) 17:51:10.03ID:jw/lLa/Ba139デフォルトの名無しさん (ワッチョイ c393-YQ4O)
2020/10/11(日) 17:52:06.99ID:yV/54YAK0 全然反論になってないし、第一、第一声が「阿呆かな?」と頭に血が昇ってる人の相手しても意味ないじゃん。
140デフォルトの名無しさん (ワッチョイ 06e9-xYNh)
2020/10/11(日) 18:39:36.02ID:u/XktDCx0 意味ないのに書き込んじゃうのはなんでだろうね?
141デフォルトの名無しさん (ワッチョイ c393-YQ4O)
2020/10/11(日) 19:03:18.63ID:yV/54YAK0 結局、原則的には、返す値は代入前に決まってるよね。gccもVC++もそうみたいだし。
142デフォルトの名無しさん (ワッチョイ 07b7-xYNh)
2020/10/11(日) 19:54:22.88ID:vwOca/6s0 > > そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
> 逆だろ, 処理系を指定しないなら規格に従うしかない。
同感
> 逆だろ, 処理系を指定しないなら規格に従うしかない。
同感
143デフォルトの名無しさん (トンモー MMff-0hVy)
2020/10/11(日) 20:21:00.36ID:qb0SAJQcM まぁ過去の恨みで絡むのはやめとこうな
非建設的すぎる
非建設的すぎる
144デフォルトの名無しさん (トンモー MMff-0hVy)
2020/10/11(日) 21:19:40.64ID:qb0SAJQcM 一般論と規格の噛み合わない話が続いてるな
例えば日本語を表すのは大抵の処理系でshift jisかunicodeだが
一般論としてshift jisかunicodeだというと
規格として規定されてないみたいな
お互いの話してる主語が違ってて噛み合わない
例えば日本語を表すのは大抵の処理系でshift jisかunicodeだが
一般論としてshift jisかunicodeだというと
規格として規定されてないみたいな
お互いの話してる主語が違ってて噛み合わない
145デフォルトの名無しさん (ワッチョイ 6746-7d23)
2020/10/11(日) 21:45:50.38ID:/f4IUzXt0 >>144
下段の喩えが分かりませぬ。
下段の喩えが分かりませぬ。
146デフォルトの名無しさん (ワッチョイ 4a2f-JD9c)
2020/10/12(月) 17:32:23.08ID:Fn8G8w4j0 ファイルオープンできない
visualstudioにてfopen_s
err = fopen_s(&fp,"test.txt","r");
visualstudioにてfopen_s
err = fopen_s(&fp,"test.txt","r");
147デフォルトの名無しさん (ワイーワ2 FF82-YQ4O)
2020/10/12(月) 17:53:16.57ID:941JO02hF FILE *fp;
なら
err = fopen_s(fp,"test.txt","r");
なら
err = fopen_s(fp,"test.txt","r");
148デフォルトの名無しさん (ワッチョイ caf0-uZln)
2020/10/12(月) 18:26:02.48ID:YDN8KrDa0149デフォルトの名無しさん (ラクッペペ MM86-2AW8)
2020/10/12(月) 20:07:04.33ID:XcjAzDTUM 初心者にありがちなのは相対パスを理解してなくてファイルが無いから開けないってやつ
150デフォルトの名無しさん (ワッチョイ ca02-jNgh)
2020/10/12(月) 20:19:27.43ID:UculHi610151デフォルトの名無しさん (ワッチョイ ca93-Pfvf)
2020/10/13(火) 19:59:14.31ID:NHAZjg2T0 初歩的な質問で大変恐縮ですが、
平成6年度基本情報技術者試験のC言語について質問がありまして、
https://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H6b2/g11.html
問2のCですが、答えが2つありませんか?
ウでもエでもどちらでも正解の気がします。
コンパイルして両方の回答で試してみましたが、問題なく動きます。
なぜ答えがウになってエではいけないのか、どなたか知恵を貸していただけませんでしょうか?
平成6年度基本情報技術者試験のC言語について質問がありまして、
https://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H6b2/g11.html
問2のCですが、答えが2つありませんか?
ウでもエでもどちらでも正解の気がします。
コンパイルして両方の回答で試してみましたが、問題なく動きます。
なぜ答えがウになってエではいけないのか、どなたか知恵を貸していただけませんでしょうか?
152デフォルトの名無しさん (アウアウウー Sa2f-JD9c)
2020/10/13(火) 20:23:51.05ID:FgDiRT1ia 146です。パス入力しデバッグしたら
なにかわけわからんBOX
でてきて思い通りになりません。
なにかわけわからんBOX
でてきて思い通りになりません。
153デフォルトの名無しさん (ワッチョイ 032c-FXSo)
2020/10/13(火) 22:42:18.30ID:ciG+8HNI0 グローバル変数として宣言した変数j0とj1がmathcalls.hにもあるようで、コンパイルするとエラーが出ます
ヘッダファイルを書き換えずに回避するにはどうすればいいですか?
よろしくお願いします
ヘッダファイルを書き換えずに回避するにはどうすればいいですか?
よろしくお願いします
154デフォルトの名無しさん (ワッチョイ 4f7f-xYNh)
2020/10/13(火) 22:43:11.29ID:b7C863zx0 >>151
エだと、60文字目と61文字目が' 'の行があるときに余分な改行が入る
エだと、60文字目と61文字目が' 'の行があるときに余分な改行が入る
155デフォルトの名無しさん (ササクッテロル Sp0f-bZax)
2020/10/14(水) 01:03:48.89ID:9cyhkhnyp モバイルC[C/C++コンパイラ]というアプリケーションを使っています
do~while()文で1!+2!+…+n!が1000を超える最初のnの値を求める問題です
以下の画像のどこが間違ってるか教えて頂きたいです
https://i.imgur.com/WEfqdXB.jpg
do~while()文で1!+2!+…+n!が1000を超える最初のnの値を求める問題です
以下の画像のどこが間違ってるか教えて頂きたいです
https://i.imgur.com/WEfqdXB.jpg
156デフォルトの名無しさん (ブーイモ MM4f-yjnQ)
2020/10/14(水) 01:22:34.34ID:6pvowPnvM どうなって欲しくてどうなってしまうかくらい書け
157デフォルトの名無しさん (ササクッテロル Sp0f-bZax)
2020/10/14(水) 02:05:50.62ID:9cyhkhnyp 14と表示されてほしいのですが実行すると以下の画像のようになります
https://i.imgur.com/ztqzJy1.jpg
https://i.imgur.com/ztqzJy1.jpg
158デフォルトの名無しさん (オイコラミネオ MM8f-QI1E)
2020/10/14(水) 03:22:45.65ID:GZXcc9JpM >>151
出題者が想定していた回答から察するに、「正しい答えを選べ」=「最適なものを選べ」という題意なんだろうね。
「エ」の場合、009〜012が必ず実行される。
「ウ」の場合、空白が連続していない場合のみ、009〜012が実行される。
なので「エ」よりも「ウ」の方が、実行時のコードが少なくなる可能性≒処理速度が速い≒より最適化されている。
ということで、「エ」を排しても「ウ」が選ばれるべき理由は説明できるけど、その逆は説明できそうになさげ
出題者が想定していた回答から察するに、「正しい答えを選べ」=「最適なものを選べ」という題意なんだろうね。
「エ」の場合、009〜012が必ず実行される。
「ウ」の場合、空白が連続していない場合のみ、009〜012が実行される。
なので「エ」よりも「ウ」の方が、実行時のコードが少なくなる可能性≒処理速度が速い≒より最適化されている。
ということで、「エ」を排しても「ウ」が選ばれるべき理由は説明できるけど、その逆は説明できそうになさげ
159デフォルトの名無しさん (オイコラミネオ MM8f-QI1E)
2020/10/14(水) 05:08:01.62ID:GZXcc9JpM160デフォルトの名無しさん (ワッチョイ 5b2c-F9zC)
2020/10/14(水) 05:26:43.66ID:z5Uy/Vd30 画像でコードを見せられても、テストできない
paiza.IO などに書いて下さい!
paiza.IO などに書いて下さい!
161デフォルトの名無しさん (ワッチョイ 9f93-ntOo)
2020/10/14(水) 06:30:51.16ID:8SMXEVrO0162デフォルトの名無しさん (ワッチョイ 9fa5-51Mc)
2020/10/14(水) 10:47:06.71ID:ssGc8zMA0 >>151
クソみたいなマルチポスト野郎だな
俺らはこういうゴミに手を貸してたのか
騙された気分だ
C言語について質問です。平成6年度基本情報技術者試験のC言語につ... - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12232834992
クソみたいなマルチポスト野郎だな
俺らはこういうゴミに手を貸してたのか
騙された気分だ
C言語について質問です。平成6年度基本情報技術者試験のC言語につ... - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12232834992
163デフォルトの名無しさん (テテンテンテン MM7f-Eh3t)
2020/10/14(水) 11:51:52.20ID:+mJN3MGTM >>155
https://file3-d.kuku.lu/files/20201014-0239_c7aaeee8e9128bbdf0223997ba9de974.jpeg
#include <stdio.h>
int fact(int n){
if(n==1)return 1;
return n*fact(n-1);
}
int main(void){
int n=1,a=0;
while( (a+=fact(n)) <= 1000 ) n++;
printf("%d", n);
}
普通に7って出たけど?
https://file3-d.kuku.lu/files/20201014-0239_d20849c5db09546cee5a312db4c7b83e.jpeg
https://file3-d.kuku.lu/files/20201014-0239_c7aaeee8e9128bbdf0223997ba9de974.jpeg
#include <stdio.h>
int fact(int n){
if(n==1)return 1;
return n*fact(n-1);
}
int main(void){
int n=1,a=0;
while( (a+=fact(n)) <= 1000 ) n++;
printf("%d", n);
}
普通に7って出たけど?
https://file3-d.kuku.lu/files/20201014-0239_d20849c5db09546cee5a312db4c7b83e.jpeg
164デフォルトの名無しさん (ササクッテロル Sp0f-+cNN)
2020/10/14(水) 13:06:19.00ID:8/BbynCKp >>163
試したら7になりました、ありがとうございます
試したら7になりました、ありがとうございます
165デフォルトの名無しさん (ワッチョイ efad-kK2i)
2020/10/20(火) 01:13:51.72ID:1WZYXiCK0 >>163
インデントがキモい
インデントがキモい
166デフォルトの名無しさん (アウアウウー Sacf-dvF1)
2020/10/20(火) 08:49:06.08ID:q8Z69frHa systemのパスが通らない
ファイルに入力して
コンソールで表示する
プログラムだが
ファイルと同じパスでエラー
当方初心者
ファイルに入力して
コンソールで表示する
プログラムだが
ファイルと同じパスでエラー
当方初心者
167デフォルトの名無しさん (ワッチョイ fbda-b6U/)
2020/10/20(火) 08:55:48.28ID:0IrscxF80 まずはその日本語をなんとかしろ
168デフォルトの名無しさん (ワッチョイ dbb7-fMdf)
2020/10/20(火) 09:22:30.31ID:wzOsKsv00 >>166
パスって何か知ってる限り書いてみな
パスって何か知ってる限り書いてみな
169デフォルトの名無しさん (テテンテンテン MM7f-Eh3t)
2020/10/20(火) 10:05:35.78ID:qYYfNILyM >>165
んな事言われましても一応、HTML系の書き方なんで
https://ja.m.wikipedia.org/wiki/字下げスタイル
bannerスタイルは、ブロックのヘッダ部だけを字下げレベルで特別に目立たせるスタイルである。
ちょうど、K&Rスタイルでブロックの終わりの中括弧の字下げレベルを戻さないスタイルである。
んな事言われましても一応、HTML系の書き方なんで
https://ja.m.wikipedia.org/wiki/字下げスタイル
bannerスタイルは、ブロックのヘッダ部だけを字下げレベルで特別に目立たせるスタイルである。
ちょうど、K&Rスタイルでブロックの終わりの中括弧の字下げレベルを戻さないスタイルである。
170デフォルトの名無しさん (ワッチョイ dbb7-fMdf)
2020/10/20(火) 10:22:20.38ID:wzOsKsv00 どっちもどっちだ
自分のスタイルと違うだけでキモいとか言い出すやつも
自分のスタイルを気に入らない人に言い訳するやつも
協調性を欠くという点で同じだ
プロジェクトに参入するたびに顰蹙かうやつ
自分のスタイルと違うだけでキモいとか言い出すやつも
自分のスタイルを気に入らない人に言い訳するやつも
協調性を欠くという点で同じだ
プロジェクトに参入するたびに顰蹙かうやつ
171デフォルトの名無しさん (テテンテンテン MM7f-Eh3t)
2020/10/20(火) 10:32:37.64ID:qYYfNILyM 追い訳しますけど、質問者が読みやすいように
質問者のスタイルに合わせてあげたという事も忘れないで頂きたい。
質問者のスタイルに合わせてあげたという事も忘れないで頂きたい。
172デフォルトの名無しさん (JP 0H8f-yjnQ)
2020/10/20(火) 10:49:54.94ID:2QIfR1k/H 質問者がそのスタイル使ったのは最後の行だけだ
意図して使っているわけではないのに無駄にマイナーなスタイルで答えるな
意図して使っているわけではないのに無駄にマイナーなスタイルで答えるな
173デフォルトの名無しさん (ワイーワ2 FF3f-Vszw)
2020/10/20(火) 10:51:18.57ID:pHiz9StDF174デフォルトの名無しさん (ワッチョイ 0fd2-fMdf)
2020/10/20(火) 11:18:11.29ID:69CHk5Nl0 ここでは俺が無法者だ!!
175デフォルトの名無しさん (ワッチョイ 5b2c-UsEC)
2020/10/20(火) 15:12:59.44ID:aEz3U6LC0 環境変数PATH なら、; 区切り。
PowerShell で以下を入力してみ
$env:Path.split( ";" )
PowerShell で以下を入力してみ
$env:Path.split( ";" )
176デフォルトの名無しさん (ワッチョイ 89e6-w+A7)
2020/10/21(水) 10:15:31.31ID:KGhWJPjI0 >>172
このスレにコーディング規約がある訳じゃないんだからスタイルは回答者の自由だが
このスレにコーディング規約がある訳じゃないんだからスタイルは回答者の自由だが
177デフォルトの名無しさん (ワッチョイ 02a5-F5SX)
2020/10/21(水) 10:45:56.94ID:CZ2/iovY0 わかったわかった
お前はキモい、もうそれでいいよ
キモいことを自覚してそのスタイルを使い続けてくれ
心理的にダメ、気持ち悪いんだよお前
お前はキモい、もうそれでいいよ
キモいことを自覚してそのスタイルを使い続けてくれ
心理的にダメ、気持ち悪いんだよお前
178デフォルトの名無しさん (ブーイモ MM76-mN35)
2020/10/21(水) 11:02:14.79ID:nW5Wnc+BM おまえツイッターでも文脈見ずにクソリプばっかりしてるだろ
179デフォルトの名無しさん (ワッチョイ 65b7-tMQb)
2020/10/21(水) 12:17:24.48ID:EPxGxCCv0 MinGWをインスコしてあれば
path | sed "s/[=;]/\n/g"
path | sed "s/[=;]/\n/g"
180デフォルトの名無しさん (ワッチョイ 6d61-hFPD)
2020/10/21(水) 16:41:05.37ID:gYHxZT9P0 >>155
エラーメッセージからするとmain()関数内部でfact()関数の宣言を
書いていることが原因らしい。
素朴なCだと、そう書くとまだ名前が宣言されて無いグローバル関数を
main()関数内部で使えるようにする意味になるが、現在のC/C++だと
それぞれのコンパイラが独自に拡張したりした結果、
「(関数内部における)内部関数」なるものが使えるコンパイラが出てきたため、
意味が違ってしまっていることがある。
今の例の場合、main関数の中で後から定義するfactという名前の関数を先に
宣言する意味だとコンパイラは認識してしまっている可能性が高い。
だから、main関数の中にfact関数の関数定義が書かれて無いのでそのような
エラーが出る。
もし、素朴なCのプロトタイプ宣言にしたい場合、
main()関数の外側に書くのが普通だが、なんらかの事情でmain()関数の内側に
書きたい場合には、
int main(void){
extern int fact(int n);
・・・
}
のようにexternキーワードを書くと通ることがあるかも知れない。
エラーメッセージからするとmain()関数内部でfact()関数の宣言を
書いていることが原因らしい。
素朴なCだと、そう書くとまだ名前が宣言されて無いグローバル関数を
main()関数内部で使えるようにする意味になるが、現在のC/C++だと
それぞれのコンパイラが独自に拡張したりした結果、
「(関数内部における)内部関数」なるものが使えるコンパイラが出てきたため、
意味が違ってしまっていることがある。
今の例の場合、main関数の中で後から定義するfactという名前の関数を先に
宣言する意味だとコンパイラは認識してしまっている可能性が高い。
だから、main関数の中にfact関数の関数定義が書かれて無いのでそのような
エラーが出る。
もし、素朴なCのプロトタイプ宣言にしたい場合、
main()関数の外側に書くのが普通だが、なんらかの事情でmain()関数の内側に
書きたい場合には、
int main(void){
extern int fact(int n);
・・・
}
のようにexternキーワードを書くと通ることがあるかも知れない。
181デフォルトの名無しさん (ワッチョイ 65b7-tMQb)
2020/10/21(水) 16:52:54.92ID:EPxGxCCv0 関数のブロック内に関数原型があるのは完全に合法
実用上まず使わないけどね
実用上まず使わないけどね
182デフォルトの名無しさん (ワッチョイ 6d61-hFPD)
2020/10/21(水) 17:02:00.07ID:gYHxZT9P0183デフォルトの名無しさん (ワッチョイ 65b7-tMQb)
2020/10/21(水) 17:14:09.48ID:EPxGxCCv0 日本語でおk
184蟻人間 ◆T6xkBnTXz7B0 (スフッ Sda2-IaiW)
2020/10/21(水) 17:17:08.30ID:vNonm69Zd >>182さん、思い込みが激しすぎて証拠がないのに持論を主張する。
185デフォルトの名無しさん (ワッチョイ 6d61-hFPD)
2020/10/21(水) 17:58:35.70ID:gYHxZT9P0 gccなんかは関数の中に内部関数を作れる。
だから、関数内でプロトタイプ宣言を書くと元定義の pure Cとは
異なった意味になる可能性が高い。
だから、関数内でプロトタイプ宣言を書くと元定義の pure Cとは
異なった意味になる可能性が高い。
186デフォルトの名無しさん (ワッチョイ 6d61-hFPD)
2020/10/21(水) 18:02:50.56ID:gYHxZT9P0 >>184
現にその宣言が無ければコンパイルが通り、有ればエラーになっている。
それが一つの根拠。
実験してみたわけじゃないがそれらが本当におきているとすれば
入れ子関数(内部関数)の独自拡張が原因だと洞察できる。
現にその宣言が無ければコンパイルが通り、有ればエラーになっている。
それが一つの根拠。
実験してみたわけじゃないがそれらが本当におきているとすれば
入れ子関数(内部関数)の独自拡張が原因だと洞察できる。
188デフォルトの名無しさん (ワッチョイ 6d61-hFPD)
2020/10/21(水) 18:11:05.50ID:gYHxZT9P0 他の人の実験結果から推定しているだけだから、事実かどうかは分からんよ。
189蟻人間 ◆T6xkBnTXz7B0 (スフッ Sda2-IaiW)
2020/10/21(水) 18:23:13.18ID:vNonm69Zd モバイルCっつー奴にバグ報告せよ。
190デフォルトの名無しさん (ワッチョイ 6d61-hFPD)
2020/10/21(水) 18:35:10.36ID:gYHxZT9P0 PythonやLuaもサポートしているが、Clang, LLVMという言葉があった。
使ってるコンパイラはClangなのかな?
使ってるコンパイラはClangなのかな?
191デフォルトの名無しさん (アウアウウー Sa45-DB4w)
2020/10/21(水) 20:31:51.31ID:z1b04ciPa 簡単な質問申し訳ないです。
漢字を文字コードにて受け
putcで標準出力できるかな?
漢字を文字コードにて受け
putcで標準出力できるかな?
192デフォルトの名無しさん (ブーイモ MM76-mQ82)
2020/10/21(水) 20:57:42.76ID:GehgBoqYM もちろんできるけど、
入力される文字コードの種類と出力する文字の符号化方式は何にしたいか分かってるの?
入力される文字コードの種類と出力する文字の符号化方式は何にしたいか分かってるの?
193デフォルトの名無しさん (ラクッペペ MMe6-4R9W)
2020/10/21(水) 21:05:35.53ID:Cabs0W0/M 文字が文字コードで扱われるのは普通の事だ
画像とかではないなら
画像とかではないなら
194デフォルトの名無しさん (ワッチョイ 6247-YvdE)
2020/10/21(水) 22:53:14.42ID:sHBY55kz0 putw
putwc
putwc
195蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 3901-IaiW)
2020/10/21(水) 23:01:37.11ID:T/uvMZ2i0 全角文字はマルチバイト文字かUnicode文字。
196デフォルトの名無しさん (ワッチョイ 0d01-LA9s)
2020/10/22(木) 04:18:40.19ID:OxqRNNZs0 フリーランス向け報酬即日払いサービス『先払い』が、オンライン資金調達プラットフォーム『資金調達freee』β版に掲載開始
https://prtimes.jp/main/html/rd/p/000000037.000047439.html
フリーランスやパラレルワーカー同士のマッチングプラットフォーム「conema」が、
案件依頼・仲間募集を中心とした掲示板機能(β版)をリリース!
https://prtimes.jp/main/html/rd/p/000000004.000059389.html
フリーランス薬剤師専門エージェントサービス「きょうりょく薬剤師」、リリース開始。薬剤師の新しい働き方を提唱。
https://prtimes.jp/main/html/rd/p/000000002.000058526.html
中卒、新聞配達員から月収4億の不動産王へ。姫路の不動産王の投資哲学
https://hbol.jp/184178
【アプリ開発で起業】必要な心得とマネタイズ方法のすべて
https://www.dreamgate.gr.jp/contents/column/application-development
副業を認める企業に対して「より魅力的に感じる」人は6割以上。
一方、副業を認めない企業に対する魅力度は6割超が「低下した」と回答
https://prtimes.jp/main/html/rd/p/000000016.000040832.html
みんなが知らない「サラリーマンの生存戦略」副業年収1億円!motoさん伝授
https://diamond.jp/articles/-/247070
https://prtimes.jp/main/html/rd/p/000000037.000047439.html
フリーランスやパラレルワーカー同士のマッチングプラットフォーム「conema」が、
案件依頼・仲間募集を中心とした掲示板機能(β版)をリリース!
https://prtimes.jp/main/html/rd/p/000000004.000059389.html
フリーランス薬剤師専門エージェントサービス「きょうりょく薬剤師」、リリース開始。薬剤師の新しい働き方を提唱。
https://prtimes.jp/main/html/rd/p/000000002.000058526.html
中卒、新聞配達員から月収4億の不動産王へ。姫路の不動産王の投資哲学
https://hbol.jp/184178
【アプリ開発で起業】必要な心得とマネタイズ方法のすべて
https://www.dreamgate.gr.jp/contents/column/application-development
副業を認める企業に対して「より魅力的に感じる」人は6割以上。
一方、副業を認めない企業に対する魅力度は6割超が「低下した」と回答
https://prtimes.jp/main/html/rd/p/000000016.000040832.html
みんなが知らない「サラリーマンの生存戦略」副業年収1億円!motoさん伝授
https://diamond.jp/articles/-/247070
197デフォルトの名無しさん (ワッチョイ 2101-LA9s)
2020/10/24(土) 23:58:39.57ID:3PXn8xmW0 なぜ
int* a = 0;
*(PBYTE*)&a += 5;
は動作するのに
int* a = 0;
(PBYTE)a += 5;
はエラーになるのですか?
int* a = 0;
*(PBYTE*)&a += 5;
は動作するのに
int* a = 0;
(PBYTE)a += 5;
はエラーになるのですか?
198デフォルトの名無しさん (ワッチョイ e963-gGz3)
2020/10/25(日) 00:02:11.04ID:TZHfVi9W0199デフォルトの名無しさん (ワッチョイ 2101-LA9s)
2020/10/25(日) 00:12:03.26ID:5nJTYzvV0 >>198
キャストしているとはいえ、ポインタaに加算していると思うのですが、、
ポインタはアドレス0を指しているので、加算することによってアドレス5を参照したいのですが
なぜかエラーが出てしまうのかわかりません..
キャストしているとはいえ、ポインタaに加算していると思うのですが、、
ポインタはアドレス0を指しているので、加算することによってアドレス5を参照したいのですが
なぜかエラーが出てしまうのかわかりません..
200デフォルトの名無しさん (ワッチョイ 02f9-3XbD)
2020/10/25(日) 00:42:02.50ID:LNYSWk6n0 それだけじゃ参照してないしエラーなんてならなそうだけど
いつどんなエラーになるの?
参照した時?なら、5番地を読んでいい環境なの?
windowsやlinux等高級なOS上なら、絶対番地を勝手に読んじゃダメだよ
いつどんなエラーになるの?
参照した時?なら、5番地を読んでいい環境なの?
windowsやlinux等高級なOS上なら、絶対番地を勝手に読んじゃダメだよ
201デフォルトの名無しさん (ワッチョイ e963-gGz3)
2020/10/25(日) 00:46:43.39ID:TZHfVi9W0 (PBYTE)a は 変数ではなく、値になる
202デフォルトの名無しさん (ワッチョイ 2101-LA9s)
2020/10/25(日) 00:51:22.10ID:5nJTYzvV0 >>200
コンパイルエラーになるんです。
エラー内容は"式は変更可能な左辺値である必要があります"です。
このコードはここに投稿するためのテストのために書いたコードなので、
参照関係の問題は理解しています。
*(PBYTE*)&a += 5;
と
(PBYTE)a += 5;
はやってることは同じと思うのですが、なぜエラーになるのかなと。
そういうものとして理解するしかないのでしょうかね
コンパイルエラーになるんです。
エラー内容は"式は変更可能な左辺値である必要があります"です。
このコードはここに投稿するためのテストのために書いたコードなので、
参照関係の問題は理解しています。
*(PBYTE*)&a += 5;
と
(PBYTE)a += 5;
はやってることは同じと思うのですが、なぜエラーになるのかなと。
そういうものとして理解するしかないのでしょうかね
203デフォルトの名無しさん (ワッチョイ e963-gGz3)
2020/10/25(日) 00:57:14.44ID:TZHfVi9W0 *(PBYTE*)&a =
変数aの現在の値を&で取り出し、
それをポインタ値として扱い、
そのポインタ値が指し示すところに代入する
ということじゃないかな
変数aの現在の値を&で取り出し、
それをポインタ値として扱い、
そのポインタ値が指し示すところに代入する
ということじゃないかな
204デフォルトの名無しさん (ブーイモ MM76-mN35)
2020/10/25(日) 01:18:53.38ID:TWzqhGL8M (PBYTE)a みたいにキャストすると、値の解釈の変更ということになり、
代入先(左辺値)にはできなくなる。
int i;
(float)i = 1.1;
って意味あると思う?
代入先(左辺値)にはできなくなる。
int i;
(float)i = 1.1;
って意味あると思う?
205デフォルトの名無しさん (ワッチョイ 2101-LA9s)
2020/10/25(日) 01:33:16.78ID:5nJTYzvV0 あ〜〜 なるほど
floatなどの小数点以下を扱う型は以下のようにdが1になる特別な仕様があるから
そのためにエラーになるようになってるんですかね。
float c = 1.5f;
int d = (int)c;
int e = *(int*)&c;
この場合、dは1になるけど、eは1069547520になるから、
エラーになる現象はこれと近いのかな
この解釈であってるのだろうか
floatなどの小数点以下を扱う型は以下のようにdが1になる特別な仕様があるから
そのためにエラーになるようになってるんですかね。
float c = 1.5f;
int d = (int)c;
int e = *(int*)&c;
この場合、dは1になるけど、eは1069547520になるから、
エラーになる現象はこれと近いのかな
この解釈であってるのだろうか
206デフォルトの名無しさん (ブーイモ MM76-mN35)
2020/10/25(日) 01:35:55.99ID:TWzqhGL8M それそれ。
それ追記しようとしてた。
それ追記しようとしてた。
207デフォルトの名無しさん (ワッチョイ 2101-50og)
2020/10/25(日) 01:54:40.07ID:5nJTYzvV0 とはいえ
int i;
(float)i = 1.1;
これはiを一時的にfloatにキャストしてるだけだから、エラーにせずにiは1として動作させるとこはできなかったんだろうか
int i;
(float)i = 1.1;
これはiを一時的にfloatにキャストしてるだけだから、エラーにせずにiは1として動作させるとこはできなかったんだろうか
208デフォルトの名無しさん (ワッチョイ c6e9-tMQb)
2020/10/25(日) 02:21:39.27ID:COZe3KfC0209デフォルトの名無しさん (ワッチョイ 2101-50og)
2020/10/25(日) 02:57:11.72ID:5nJTYzvV0 >>208
そもそもなぜコンパイラがこれをエラーと捉えるのかというのがわからないと言う意味で言っておりました。
そもそもなぜコンパイラがこれをエラーと捉えるのかというのがわからないと言う意味で言っておりました。
210デフォルトの名無しさん (ワッチョイ c6e9-tMQb)
2020/10/25(日) 03:00:35.23ID:COZe3KfC0211デフォルトの名無しさん (ワッチョイ c6e9-tMQb)
2020/10/25(日) 03:18:58.54ID:COZe3KfC0212デフォルトの名無しさん (ワッチョイ 21da-gGz3)
2020/10/25(日) 03:28:10.91ID:UGl+6vH40 >>202
キャストの結果は常に右辺値
右辺値を代入してるから右辺値には代入出来ないというエラーが出る
ポインタのデリファレンスの結果は左辺値なので代入も問題ない
あとエスパーするにPBYTEってuint8_t (unsigned char)なんだろうけど(それ以外の場合はデリファレンスの結果が未定義),
> *(PBYTE*)&a += 5;
はint型の先頭バイトを書き換えたいという意図で,
> (PBYTE)a += 5;
こっちはメモリのどの位置を書き換えたいのか自明じゃないからやってること自体全く異なる
キャストの結果は常に右辺値
右辺値を代入してるから右辺値には代入出来ないというエラーが出る
ポインタのデリファレンスの結果は左辺値なので代入も問題ない
あとエスパーするにPBYTEってuint8_t (unsigned char)なんだろうけど(それ以外の場合はデリファレンスの結果が未定義),
> *(PBYTE*)&a += 5;
はint型の先頭バイトを書き換えたいという意図で,
> (PBYTE)a += 5;
こっちはメモリのどの位置を書き換えたいのか自明じゃないからやってること自体全く異なる
213デフォルトの名無しさん (ワッチョイ 65b7-tMQb)
2020/10/25(日) 08:17:29.39ID:B8Qi0Gue0 キャスト式の結果は左辺値ではない
間接演算式の結果は左辺値となる
これだけのことだろ
間接演算式の結果は左辺値となる
これだけのことだろ
214はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-3XbD)
2020/10/25(日) 09:56:54.64ID:63196X630 gcc3 の頃までは cast-as-lvalue が有ったけど 4 になるときに廃止された。
古いコードでこの機能をあてにしているものはあるかもね。
古いコードでこの機能をあてにしているものはあるかもね。
215デフォルトの名無しさん (ワッチョイ fd5f-Naer)
2020/10/25(日) 13:18:04.05ID:FzqccguI0 >>197
(PBYTE)*a += 5;
(PBYTE)*a += 5;
216デフォルトの名無しさん (ワッチョイ fd5f-Naer)
2020/10/25(日) 13:19:58.42ID:FzqccguI0 >>202
答えだけ言うとやってることが同じではない
答えだけ言うとやってることが同じではない
217デフォルトの名無しさん (ワッチョイ 2101-LA9s)
2020/10/25(日) 16:44:12.86ID:5nJTYzvV0218デフォルトの名無しさん (ワッチョイ fd5f-YvdE)
2020/10/25(日) 16:58:46.13ID:FzqccguI0 (PBYTE *) って (BYTE **) のことか
それなら同じじゃないな
っていうか「左辺値が変更出来ない型になってる」
これでこの話は終わり
それなら同じじゃないな
っていうか「左辺値が変更出来ない型になってる」
これでこの話は終わり
219デフォルトの名無しさん (ワッチョイ 6252-OGcW)
2020/10/25(日) 17:29:39.65ID:0u/0rMBT0 それなら「左辺値」ではなく「左辺」だろう
220はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-3XbD)
2020/10/25(日) 18:23:36.88ID:63196X630 >>217
型とは独立して (一部関係もあるが) lvalue (左辺値) と rvalue (右辺値) という概念があるってのは理解できてる?
たとえば
int x=5;
x = 2;
と書いたら OK だけど
5 = 2;
と書いたらもちろん NG だというのはわかるよね。
変数は評価したら値が出てくるけどそれとは別に場所としての性質も持ってる。
場所と値としての性質を併せ持っているのが lvalue なんだ。
で、キャスト演算子を適用するというのは取り出した値に対して型変換することになるので、
型変換した結果は場所としての性質が失われてしまう。
つまり lvalue ではなく rvalue になってしまってこれは代入先としては有効ではない。
---- 余談 ----
実際には代入先は lvalue の中でも特に modifiable lvalue (変更可能な左辺値) である必要があって
そのあたりの詳細は 6.3.2.1 あたりに記述がある。
http://kikakurui.com/x3/X3010-2003-01.html#page38-div
型とは独立して (一部関係もあるが) lvalue (左辺値) と rvalue (右辺値) という概念があるってのは理解できてる?
たとえば
int x=5;
x = 2;
と書いたら OK だけど
5 = 2;
と書いたらもちろん NG だというのはわかるよね。
変数は評価したら値が出てくるけどそれとは別に場所としての性質も持ってる。
場所と値としての性質を併せ持っているのが lvalue なんだ。
で、キャスト演算子を適用するというのは取り出した値に対して型変換することになるので、
型変換した結果は場所としての性質が失われてしまう。
つまり lvalue ではなく rvalue になってしまってこれは代入先としては有効ではない。
---- 余談 ----
実際には代入先は lvalue の中でも特に modifiable lvalue (変更可能な左辺値) である必要があって
そのあたりの詳細は 6.3.2.1 あたりに記述がある。
http://kikakurui.com/x3/X3010-2003-01.html#page38-div
221デフォルトの名無しさん (ワッチョイ 82ad-EeCs)
2020/10/26(月) 03:47:15.23ID:zDyo5E1K0 >>191
出力する端末が漢字を出すような端末で、尚且つその端末で漢字とされるコードを引き渡すのであれば出る。
しかしメジャーな文字コード体系で1バイトだけで漢字を表すようなものはなく、そういった端末も(おそらく自作しない限りは)ないだろうから putc() 1回だけで漢字が出ることはまずないと思う。
出力する端末が漢字を出すような端末で、尚且つその端末で漢字とされるコードを引き渡すのであれば出る。
しかしメジャーな文字コード体系で1バイトだけで漢字を表すようなものはなく、そういった端末も(おそらく自作しない限りは)ないだろうから putc() 1回だけで漢字が出ることはまずないと思う。
222デフォルトの名無しさん (ワッチョイ 65b7-tMQb)
2020/10/26(月) 07:27:20.32ID:ddH/1NYY0223デフォルトの名無しさん (ブーイモ MM76-mN35)
2020/10/26(月) 09:07:00.12ID:ePNtOm9AM224デフォルトの名無しさん (ワッチョイ 65b7-tMQb)
2020/10/26(月) 09:39:14.29ID:ddH/1NYY0 >>223
ん? 俺は、おまえさんに恥をかかせたのか? そういう意図はなかったが
ん? 俺は、おまえさんに恥をかかせたのか? そういう意図はなかったが
225デフォルトの名無しさん (ブーイモ MM76-mN35)
2020/10/26(月) 10:11:22.50ID:ePNtOm9AM >>224
最初の質問が
*(PBYTE*)&a += 5;
(PBYTE)a += 5;
の違いなのに、
(PBYTE)*a += 5;
を解説するというトンチンカンで質問者を困らす回答見せられたら、
質問者に申し訳ないし同じ回答者としてこっちが恥ずかしくなるわ
最初の質問が
*(PBYTE*)&a += 5;
(PBYTE)a += 5;
の違いなのに、
(PBYTE)*a += 5;
を解説するというトンチンカンで質問者を困らす回答見せられたら、
質問者に申し訳ないし同じ回答者としてこっちが恥ずかしくなるわ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★3 [BFU★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- 【実況】博衣こよりのえちえちスーパーダンガンロンパ4🧪
- 【すこん部🏡】白上フブキ🦊配信中❗【ホロライブ▶】
- 【安倍晋三】中国船4隻が領海侵入 [828897501]
- 近所にびっくりドンキーがないんだけど!!!
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ181
- 自民党のヒゲ「日本側の無線でcopyとは言ったが了解という意味ではない」 [834922174]
