20/10/10 08:34:32.00 sA7w+t8zK.net
>>106
char型配列が s[] だとして、
printf()に s[0] とか *s を渡してないか?
113:デフォルトの名無しさん
20/10/10 16:25:14.09 i5KfYhU+0.net
>>109
ハゲめ
114:デフォルトの名無しさん
20/10/10 18:03:01.19 NSofC8xCa.net
>>112
strで渡しました。
すみません""で囲ったら
出力されました。
一文字ずつ' 'の方法は
なぜかだめだな
115:デフォルトの名無しさん
20/10/10 19:43:45.13 THhanVwl0.net
char str[] = "unko";
printf("%s", "str");
これで何か出力されたとして
それは目的通りなのか?
116:デフォルトの名無しさん
20/10/10 21:20:02.75 yhyq5Xqm0.net
可変長マクロ、... や __VA_ARGS__ に関連して、カンマが自動削除されたり
する使用は、結局、統一した仕様はあるのでしょうか?
__VA_OPT(,) を使う流儀と、カンマを自動削除する流儀、
実引数に , を書いた場合と書かなかった場合の違いなど、
色々有って何が標準か分かりません。
117:デフォルトの名無しさん
20/10/10 21:36:11.71 yhyq5Xqm0.net
#define aaa(fmt, ...) g(fmt __VA_OPT__(,) __VA_ARGS__)
の場合、
aaa(x)とaaa(x,)でどちらも結果は同じ g(x) になるのでしょうか?
そもそも、VC++では、
#define bbb(fmt, ...) g(fmt , __VA_ARGS__)
としていても、
bbb(x)とbbb(x,)でどちらも結果は同じ g(x) になるのでしょうか?
118:はちみつ餃子
20/10/10 22:10:07.34 i9YWGOdm0.net
>>72
その本を持ってないから前後の文脈はわからんけど、引用部分に関して言えば正しいよ。
「式の評価のときに副作用が起きることもある」というのは正しい。
でも、仮に「式の評価のときに値を得られる他に起きることが副作用である」と言ったら間違いだ。
C では実行環境の状態を変化させることを副作用と定義するのであって、
式評価のときに主作用 (式から値にする操作を仮にそう呼ぶとして) の他に
副作用も起こるというのは定義に付随する性質なわけ。
(C における) 副作用とは何かの「定義」に主作用という概念は絡まないんだ。
式を評価する以外の方法 (主作用が存在しない) で起こる状態変化も副作用ということになる。
119:デフォルトの名無しさん
20/10/10 23:13:28.82 BjcbKuib0.net
厳密に言えば、++ 演算子を絡めたものは、変数自体を変更してるから副作用
b = a + 1
なら、変数a を変更していないから、副作用はない
だから、Go では副作用を警戒して、
++ 演算子は、単独の文でしか使えない。
組み合わせられない
a++
120:デフォルトの名無しさん
20/10/10 23:46:17.77 xY0iDsv30.net
>>117
標準(C17/18までの時点)では可変長引数マクロが第一引数以外の場合は少なくともひとつの引数が無ければシンタックスエラーになる
C++20で対応が提案(採択)されていて, 併せてCにも同じ仕様で提案されてる
URLリンク(www.open-std.org)
現状で(標準の範囲内で)同じことをするにはかなりトリッキーな方法を使う必要がある
URLリンク(stackoverflow.com)
またはBoost.PreprocessorのBOOST_PP_VA_OPTが上記提案の__VA_OPT__の代替として使える
121:デフォルトの名無しさん
20/10/11 00:07:40.75 yV/54YAK0.net
>>118
相変わらず、的外れなことを言ってるなあ。
もう相手するのがめんどくさいわ。
122:デフォルトの名無しさん
20/10/11 00:21:33.30 yV/54YAK0.net
君はたぶんスレを保守してる人なんだろうけどさあ、
その話はHNをわざわざ使ってる君のプライドを守るためだけの話になってるので、ここで話し合う意味がないんだよね。
123:デフォルトの名無しさん
20/10/11 00:30:42.60 u/XktDCx0.net
相手するのがめんどくさい、プライドを守るためだけ
おまいうwww
124:デフォルトの名無しさん
20/10/11 00:45:20.99 y5Dl22i00.net
ここに書き込んでいる人って、暇ですることが無い人ばかりではなかったか?
125:デフォルトの名無しさん
20/10/11 00:48:15.50 yV/54YAK0.net
HNをわざわざ使ってる人は必ず、批判されるとHNを使わずに自演するんだよね。
上の書き込みが自演かどうかは知らんけど、自演は必ずする。
大昔にローカルの掲示板をやってたことがあるから、HNを使う人のこの習性はよくよく知ってる。
一人残らずそうやってた。
126:42
20/10/11 00:54:48.93 Oo+TUOYr0.net
>>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の意味)として評価した値」が正しかった。
127:デフォルトの名無しさん
20/10/11 00:55:54.98 y5Dl22i00.net
HNをNGに登録し、レス書いた奴ごとアボーンすると比較的すっきりする
128:デフォルトの名無しさん
20/10/11 01:44:57.79 yV/54YAK0.net
>>126
意訳すれば「代入式の値は、左辺へ代入後に取り出してたら処理が無駄に重くなるから、代入直前の値を返すべき。返されるものは、左辺と同じ(値と型が)」
まあ端的に言うと、左辺が返されてると理解しとけばいいね。
129:デフォルトの名無しさん
20/10/11 07:57:55.20 Oo+TUOYr0.net
>>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.
とはあるが, どう実装すべきなどとは書いていないのだから, それは意訳ではなくお前の意見だ
130:デフォルトの名無しさん
20/10/11 08:44:36.55 yV/54YAK0.net
>>129
いやく【意訳】
《名・ス他》原文の語句の一つ一つにこだわらず、全体の意味に重点をおいて訳すこと。その訳。
131:デフォルトの名無しさん
20/10/11 09:21:01.70 yV/54YAK0.net
あと、そういうなら、君の書いた
>代入式の値は「左辺式(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:デフォルトの名無しさん
20/10/11 09:24:54.54 1n9mnEAt0.net
>>120
ご返答有難うございます。
やはり、色々と複雑なようですね。
133:デフォルトの名無しさん
20/10/11 12:23:08.94 kZXFoyze0.net
>>125
134:デフォルトの名無しさん
20/10/11 15:19:35.65 Ryz1amqZK.net
>>114
>一文字ずつ' 'の方法
その場合は最後に'\0'が必要
135:デフォルトの名無しさん
20/10/11 16:59:31.64 Oo+TUOYr0.net
>>131
阿呆かな?
>>128は>>126の原文中に無く脚注で書かれている内容だしその脚注にも「左辺へ代入後に取り出してたら処理が無駄に重くなるから」などとは書かれていない
> 次に、「(代入) is sequenced after the value computations of the left and right operands.」を訳すると「代入は両オペランドの値を処理後に行われる」となる。
> つまり、「代入は最後に行われる」とは読めないかな?
正しい
> よって、返す値はその前に原則的に決まってるということ。
妄想
規格ではunspecified (実装の自由度)
> そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
逆だろ, 処理系を指定しないなら規格に従うしかない。
136:デフォルトの名無しさん
20/10/11 17:27:29.04 yV/54YAK0.net
>>135
全部反論になってなくて、相手の言ってる言葉を都合のいいように解釈してるだけだね。
137:デフォルトの名無しさん
20/10/11 17:45:12.56 0ARGcdMRM.net
反論できないことは全部反論になってないで片付けるタイプ
138:135
20/10/11 17:51:10.03 jw/lLa/Ba.net
>>136
出先からで済まんな
妄想で仕様書を改竄する言い訳にはならんから注意しな
139:デフォルトの名無しさん
20/10/11 17:52:06.99 yV/54YAK0.net
全然反論になってないし、第一、第一声が「阿呆かな?」と頭に血が昇ってる人の相手しても意味ないじゃん。
140:デフォルトの名無しさん
20/10/11 18:39:36.02 u/XktDCx0.net
意味ないのに書き込んじゃうのはなんでだろうね?
141:デフォルトの名無しさん
20/10/11 19:03:18.63 yV/54YAK0.net
結局、原則的には、返す値は代入前に決まってるよね。gccもVC++もそうみたいだし。
142:デフォルトの名無しさん
20/10/11 19:54:22.88 vwOca/6s0.net
> > そもそも論だけど、仕様書のことを述べても、実装がその通りになってるとは限らないから意味ないよね。
> 逆だろ, 処理系を指定しないなら規格に従うしかない。
同感
143:デフォルトの名無しさん
20/10/11 20:21:00.36 qb0SAJQcM.net
まぁ過去の恨みで絡むのはやめとこうな
非建設的すぎる
144:デフォルトの名無しさん
20/10/11 21:19:40.64 qb0SAJQcM.net
一般論と規格の噛み合わない話が続いてるな
例えば日本語を表すのは大抵の処理系でshift jisかunicodeだが
一般論としてshift jisかunicodeだというと
規格として規定されてないみたいな
お互いの話してる主語が違ってて噛み合わない
145:デフォルトの名無しさん
20/10/11 21:45:50.38 /f4IUzXt0.net
>>144
下段の喩えが分かりませぬ。
146:デフォルトの名無しさん
20/10/12 17:32:23.08 Fn8G8w4j0.net
ファイルオープンできない
visualstudioにてfopen_s
err = fopen_s(&fp,"test.txt","r");
147:デフォルトの名無しさん
20/10/12 17:53:16.57 941JO02hF.net
FILE *fp;
なら
err = fopen_s(fp,"test.txt","r");
148:デフォルトの名無しさん
20/10/12 18:26:02.48 YDN8KrDa0.net
URLリンク(qiita.com)
>>146
これ?
149:デフォルトの名無しさん
20/10/12 20:07:04.33 XcjAzDTUM.net
初心者にありがちなのは相対パスを理解してなくてファイルが無いから開けないってやつ
150:デフォルトの名無しさん
20/10/12 20:19:27.43 UculHi610.net
>>146
それじゃファイル開けないよ
第二引数にファイルパス指定してくださいクソが
151:デフォルトの名無しさん
20/10/13 19:59:14.31 NHAZjg2T0.net
初歩的な質問で大変恐縮ですが、
平成6年度基本情報技術者試験のC言語について質問がありまして、
URLリンク(www.rs.kagu.tus.ac.jp)
問2のCですが、答えが2つありませんか?
ウでもエでもどちらでも正解の気がします。
コンパイルして両方の回答で試してみましたが、問題なく動きます。
なぜ答えがウになってエではいけないのか、どなたか知恵を貸していただけませんでしょうか?
152:デフォルトの名無しさん
20/10/13 20:23:51.05 FgDiRT1ia.net
146です。パス入力しデバッグしたら
なにかわけわからんBOX
でてきて思い通りになりません。
153:デフォルトの名無しさん
20/10/13 22:42:18.30 ciG+8HNI0.net
グローバル変数として宣言した変数j0とj1がmathcalls.hにもあるようで、コンパイルするとエラーが出ます
ヘッダファイルを書き換えずに回避するにはどうすればいいですか?
よろしくお願いします
154:デフォルトの名無しさん
20/10/13 22:43:11.29 b7C863zx0.net
>>151
エだと、60文字目と61文字目が' 'の行があるときに余分な改行が入る
155:デフォルトの名無しさん
20/10/14 01:03:48.89 9cyhkhnyp.net
モバイルC[C/C++コンパイラ]というアプリケーションを使っています
do~while()文で1!+2!+…+n!が1000を超える最初のnの値を求める問題です
以下の画像のどこが間違ってるか教えて頂きたいです
URLリンク(i.imgur.com)
156:デフォルトの名無しさん
20/10/14 01:22:34.34 6pvowPnvM.net
どうなって欲しくてどうなってしまうかくらい書け
157:デフォルトの名無しさん
20/10/14 02:05:50.62 9cyhkhnyp.net
14と表示されてほしいのですが実行すると以下の画像のようになります
URLリンク(i.imgur.com)
158:デフォルトの名無しさん
20/10/14 03:22:45.65 GZXcc9JpM.net
>>151
出題者が想定していた回答から察するに、「正しい答えを選べ」=「最適なものを選べ」という題意なんだろうね。
「エ」の場合、009~012が必ず実行される。
「ウ」の場合、空白が連続していない場合のみ、009~012が実行される。
なので「エ」よりも「ウ」の方が、実行時のコードが少なくなる可能性≒処理速度が速い≒より最適化されている。
ということで、「エ」を排しても「ウ」が選ばれるべき理由は説明できるけど、その逆は説明できそうになさげ
159:デフォルトの名無しさん
20/10/14 05:08:01.62 GZXcc9JpM.net
>>155
モバイルCのことは、よく知らないのだけど。
11行目を削除するか、↓のようにコメントアウト(行頭に // を追加)してみるとか。
// int fact(int n);
>>157
「1!+2!+…+n!が1000を超える最初のnの値」が「14」ということなのかな。
1!+2!+3!+4!+5!+6!=873
1!+2!+3!+4!+5!+6!+7!=5913
ということで(14ではなく)7あたりが正解であるように思える、なんとなくだけどね
160:デフォルトの名無しさん
20/10/14 05:26:43.66 z5Uy/Vd30.net
画像でコードを見せられても、テストできない
paiza.IO などに書いて下さい!
161:デフォルトの名無しさん
20/10/14 06:30:51.16 8SMXEVrO0.net
>>154
>>158
回答ありがとうございます。
よくわかりました!
162:デフォルトの名無しさん
20/10/14 10:47:06.71 ssGc8zMA0.net
>>151
クソみたいなマルチポスト野郎だな
俺らはこういうゴミに手を貸してたのか
騙された気分だ
C言語について質問です。平成6年度基本情報技術者試験のC言語につ... - Yahoo!知恵袋
URLリンク(detail.chiebukuro.yahoo.co.jp)
163:デフォルトの名無しさん
20/10/14 11:51:52.20 +mJN3MGTM.net
>>155
URLリンク(file3-d.kuku.lu)
#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って出たけど?
URLリンク(file3-d.kuku.lu)
164:デフォルトの名無しさん
20/10/14 13:06:19.00 8/BbynCKp.net
>>163
試したら7になりました、ありがとうございます