[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
201
(2): 2017/01/08(日)01:15 ID:+QuxnNhY(1/2) AAS
■ 質問概要
ファイルに書き込んでも反映されない。

■ 環境
CentOS 6.4
GCC 4.4.7

■ 質問詳細
fopenに"r+"を指定して開いたファイルに、fputsでテキストデータを書き込んでも反映されません。
fcloseしていないことが、恐らく原因だと思います。
このアプリケーションは起動時にfopenでファイルを開いて常駐し、
アプリケーション終了時にfcloseするように開発しており、fcloseすると反映されます。
省12
202
(2): 2017/01/08(日)01:21 ID:Zdr2NPEX(1) AAS
大丈夫だから使え
203
(2): 2017/01/08(日)01:24 ID:T3Q1+h8z(1) AAS
flushは時間がかかるから頻度が高い場合は気をつけて。
204
(1): 201 2017/01/08(日)01:54 ID:+QuxnNhY(2/2) AAS
>>202-203
ありがとうございます。
時間がかかるんですね。
では、頻度が高い場合はfputsの度ではなく、
一定時間おきにfflushするように実装したいと思います。
205: 2017/01/08(日)03:35 ID:eh6WgorM(1/2) AAS
A = (framecount / 10) % 4

すみません、上記の式の意味を教えてください。
毎度、Aに入る値がしりたいです。
206
(1): 2017/01/08(日)03:39 ID:Nqw0FnK6(1) AAS
(framecount を 10 で割って) それの 4で割った余り 0〜3 の値になる

framecount
0〜 9 → 0
10〜19 → 1
20〜29 → 2
30〜39 → 3
40〜49 → 0
50〜59 → 1
:
207: 2017/01/08(日)03:43 ID:eh6WgorM(2/2) AAS
>>206
こんな深夜に即レス、感謝
ありがとうございます!
208
(2): 2017/01/08(日)04:24 ID:c5pY166L(1/2) AAS
>>201-204
普通は、ファイルを閉じる際、自動的にflushされる

それに何もしなくても、OSのデフォルト設定で、
dirty Page Cache を、5秒ごとにflushして、メモリとディスクを同じ状態に保つ

USB・SSDの書き込み回数を減らしたい人は、書き込み間隔を15〜30秒に設定している人もいる。
commit=15

Linux I/O のお話 write 編
外部リンク:d.hatena.ne.jp
209
(1): 2017/01/08(日)11:20 ID:OpAcES4h(1/3) AAS
char buffer[256];
scanf(%s,buffer);
printf(
210
(2): 2017/01/08(日)11:28 ID:OpAcES4h(2/3) AAS
すみません、誤送信してしまいました
質問させてください。

char buffer[256];
scanf(%s,buffer);
printf("finish---_n");
という記述で、文字入力をした後、何回リターンキーを押しても
finishが表示されない、つまりscanfが終了しないような状態になっているのですが
何か特別な条件でscanfが終了しないことってあるものなのでしょうか?
ちなみに、コードのscanfの行だけコメントアウトすると普通にfinishが表示される状態です。
あと、新規で.cファイルを作って短いコードにしてコンパイルしても問題なく動いてくれています。
211
(1): 2017/01/08(日)11:43 ID:nyR751xv(1/5) AAS
>>210
問題が再現できる最少コード書いてみて
コンパイル通るコード
212: 2017/01/08(日)11:52 ID:OpAcES4h(3/3) AAS
>>211
先日も少し教えてもらったのでまた聞きに来てるのが恥ずかしいのあ
ですが、サーバとクライアントでの通信のプログラムです。

server.c
外部リンク:codepad.org
client.c
外部リンク:codepad.org

gcc -o s server.c
gcc -o c client.c
./s&
省4
213
(1): 2017/01/08(日)12:07 ID:nyR751xv(2/5) AAS
server側がnot foundだわ
リンク確認してみて
214: 2017/01/08(日)12:15 ID:9g4d0om9(1) AAS
>>213
アップし直しました
外部リンク:codepad.org
確認不足ですみません;;
215
(1): 2017/01/08(日)12:35 ID:nyR751xv(3/5) AAS
Wait for Connection...Connected.
s1---------
C->S: %s
Server:

実行結果はここで止まって
s2---------
まで進まないって事?
216: 2017/01/08(日)12:38 ID:Cjw+tP2S(1) AAS
>>215
そうですね
Serverの後にscanfがあるので入力してみると

Server: uuu
aaaaa
iiii
uuu

とかになって、Enterキーを打っても次に進んでくれません
217
(1): 2017/01/08(日)13:15 ID:nyR751xv(4/5) AAS
送受信で変数を別々にしてみて
scanf -> sendはbuffer1
recv -> printfはbuffer2
みたいに

38, 39 40行目にブレークポイント置いてやってみて
218
(1): 2017/01/08(日)13:46 ID:uGSXn6++(1/2) AAS
サーバをフォアグラウンドにしてから入力すればいいだけな気がする。
いったんCtrl-zでクライアントを停止して「bg」でバックグラウンドで再開、
「jobs」でサーバのジョブIDを調べて「fg %[ジョブID]」してから入力すれば、
反応するんじゃないかな。
219
(1): 2017/01/08(日)15:47 ID:/TmTqYIS(1) AAS
>>217
ありがとうございます
やってみましたがどうもうまくいかなさそうです
>>218
ありがとうございます。
いちおうやってみたのですが、ぼくがりしょしんしゃすぎてこうどなれすすぎてりかいできません(^q^)
バックグラウンドとフォアグラウンドの使い分けが良く分からないです。

手順を整理すると、
1. サーバをバックグラウンドで開始
2. クライアントをフォアグラウンドで開始
省5
220
(1): 2017/01/08(日)16:06 ID:nyR751xv(5/5) AAS
>>219
ブレークポイントが39で止まる
→続行して入力しても40のブレークポイントに来ない
こんな状況なの?
221
(1): 2017/01/08(日)16:09 ID:uGSXn6++(2/2) AAS
難しいようなら、&で起動するのはやめて、ターミナルを二つ起動して
片方でサーバを、もう片方でクライアントを実行するほうが楽だと思う。
222
(1): 2017/01/08(日)16:24 ID:7aUjJ3jB(1) AAS
同意
223: 2017/01/08(日)17:02 ID:C9GVPqMv(1) AAS
>>208
それレイヤーが違う話だよ
224: 2017/01/08(日)17:48 ID:bwuU6ymI(1) AAS
質問者の提示したURLに書かれている注意事項すら読まない奴を相手にレスするとは
225: 2017/01/08(日)19:21 ID:d7tAym4Y(1) AAS
>>220
そんな感じでした
>>221-222
ターミナル2つ起動したら簡単にできました。。
ターミナルって2つ開いて操作したりするものだったんですね
Linux初心者すぎて分かってませんでした
助かりましたありがとうございます
226
(1): 2017/01/08(日)22:54 ID:c5pY166L(2/2) AAS
端末も複数、起動できる

仮想デスクトップを知っているか?
デスクトップも、複数起動できる

普通、C/S通信プログラムでは、2つ端末を起動する

>>209-210
2chのバグだろう

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?
省1
227: 2017/01/11(水)13:06 ID:X1FDgEas(1) AAS
>>208といい>>226といい、わざと嘘を書いてるのか?
228: 2017/01/12(木)04:36 ID:8CizHZGj(1) AAS
MSVCはいつまで__cplusplusの定義199711Lのままなんだ
229: 2017/01/12(木)07:09 ID:edOk7o4H(1) AAS
変えると暴動が起きるこら変えない
とライブラリ開発者のSTL氏が言っていた
230: 2017/01/12(木)12:09 ID:xegpw56Z(1) AAS
1だと思ってた
231: 2017/01/15(日)00:31 ID:7/DzGkQz(1/2) AAS
別ファイルで作成した関数を使用するときは、そのヘッダーファイルの
インクルードだけでなくプロトタイプ宣言も必要ですか?
インクルードだけでもコンパイルは通るし実行も出来るのですが、
そういう警告が出てくるので気になりました
232: 2017/01/15(日)00:34 ID:H7ag5TAh(1) AAS
警告文をコピペしてくれると話が早いような
233: 2017/01/15(日)00:51 ID:e3PYrJk6(1) AAS
そのヘッダーファイルの中でプロトタイプ宣言はされているんじゃないのか
警告の原因は別のことだろ
234: 2017/01/15(日)01:02 ID:7/DzGkQz(2/2) AAS
インクルードするファイルを間違えてたみたいです
お騒がせしました
235
(1): 2017/01/19(木)22:46 ID:knltoro2(1) AAS
新しくクラスとそれに関連した処理などを実装するとき
ヘッダー側でクラスの定義、ソースファイル側にクラス内のメンバ関数の実装部などを書きますよね
その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか? たとえば

//ヘッダー側です
class A{
private:
 int num;
public:
 int ReturnNum(void){
  return num;
省4
236: 2017/01/19(木)23:08 ID:ipEwSksA(1) AAS
プログラムは普通すべて「ソースファイル」に書くものです
「ヘッダー」に書くのはコンパイラー開発者だけです
237: 2017/01/19(木)23:11 ID:ydMYZ/gE(1) AAS
クラスもヘッダに書きますけどぉ
238: 2017/01/19(木)23:55 ID:A0Yl7Ujc(1) AAS
> その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか?
別にどんな場合でもソース側に書くというわけではない

ヘッダに書くのもソースに書くのも一長一短はあり絶対的にどっちがいいというものではない
君が違いを理解し何を重視するかを意識すれば
君にとってどっちが好ましいかは自然とはっきりする
239: 2017/01/20(金)00:23 ID:7sj2OAGi(1) AAS
なんか禅問答が始まったかと思ったわ
240
(1): 2017/01/20(金)01:12 ID:/ixeQkYS(1) AAS
短いメソッドなら、ヘッダに、inline 指定して書くと、
関数化せずに、inline にしてくれる可能性が高い

まあ、言語では保証していないけど。コンパイラ依存
241: 2017/01/20(金)05:11 ID:vaOLIJJw(1) AAS
クラス定義で定義されたメンバ関数は暗黙にinlineになるね。
(『プログラミング言語C++第4版』p.464 16.2.8 クラス内関数定義)

class SomeClass {
public:
  int a() {return a_;} // 暗黙のinline指定
private:
  int a_;
}

…という話を書くために厚い本を調べてたら

class SomeClass {
省10
242: 2017/01/20(金)07:10 ID:Nvso2zBq(1) AAS
>>235
本体側に書くのが原則 特にシステムが大きくなる場合
よほどの理由がある場合(インライン化して高速化するなど)はヘッダに書くこともある
243: 2017/01/20(金)08:09 ID:B05iL6IP(1) AAS
『〜のが原則』
『理由がある場合〜こともある』
俺の会社のルールは世界普遍的 思考
244
(1): 2017/01/20(金)16:53 ID:abKD9bRi(1/3) AAS
inlineにするのはほとんどその時の気分みたいな?
なんかマクロみたいだな。inlineにすっかみたいな。
245
(2): 片山博文MZ ◆T6xkBnTXz7B0 2017/01/20(金)17:10 ID:XdmbS/hB(1) AAS
>>244
関数呼び出しのオーバーヘッドの回避と、定数畳み込みなどの最適化が期待できる場合にインライン化する。
246: 2017/01/20(金)17:38 ID:abKD9bRi(2/3) AAS
>>245
そんな感じ
247: 2017/01/20(金)20:04 ID:1c/0Zcpc(1) AAS
>>245
インラインにしても劇的に速くなった経験が無いんですが、コツは有りますか?
248: 2017/01/20(金)20:57 ID:pNkrp0ep(1) AAS
効果が出るのは
・小さい
かつ
・短時間に非常に多数呼び出される
関数だけだよ。
しかも、まず劇的ではない。
249
(2): 2017/01/20(金)21:15 ID:esT1VQmf(1/3) AAS
inlineキーワードはヘッダに実装書くときなどに使用するものでインライン展開を狙った最適化の為に書くものではない
250: 2017/01/20(金)21:15 ID:abKD9bRi(3/3) AAS
もしかしてコンパイラの方で展開してるとか はないかなぁw
251: 2017/01/20(金)21:57 ID:aetIobRP(1) AAS
>>249
インライン関数の話の途中でinlineキーワードの関数の話を始めて、いきなりどうした
252
(1): 2017/01/20(金)22:07 ID:CICAdfuU(1) AAS
>>249
上にもあるけどヘッダに実装書いたら暗黙でインライン指定されるから、そこにinlineキーワードを使用するのは無意味
やはりinlineは最適化のためでしょう
253: 2017/01/20(金)23:11 ID:LsENUQp+(1/2) AAS
ベクトルとか行列のライブラリを使った時は全部インラインにしたな
1/60秒にかなりの回数呼ぶし
ライブラリとかもインラインで書かれてる
254: 2017/01/20(金)23:12 ID:LsENUQp+(2/2) AAS
×使った ??作った
255
(1): 2017/01/20(金)23:27 ID:esT1VQmf(2/3) AAS
>>252
んなわけない
256: 2017/01/20(金)23:34 ID:ITfb1kXg(1) AAS
>>255
んなこたーない
257: 2017/01/20(金)23:36 ID:esT1VQmf(3/3) AAS
ヘッダに書いたら暗黙でinlineって
#includeの機能しらんとしか思えないんだが
258: 2017/01/21(土)00:40 ID:dThE4/1u(1) AAS
ちょと混じっちゃったね。
関数を定義されたヘッダーが複数のソースに呼ばれちゃったら、実体が
いっぱい出来ちゃうもんね。
259: 2017/01/21(土)01:48 ID:RmTA4cQd(1) AAS
江添はなんて言ってる?
260: 2017/01/21(土)07:06 ID:5NCJ8rOL(1) AAS
forceを信じるのだ
261
(1): 2017/01/21(土)08:35 ID:P1/rV56D(1) AAS
インライン関数はODR回避のためだと思っていた
C++17(予定)のインライン変数もそんな感じ
262: 2017/01/21(土)11:00 ID:wrzS/cSB(1) AAS
ODRって何?
263
(1): 2017/01/21(土)11:17 ID:J7ipYv9j(1/2) AAS
単一定義則 One Definition Rule の略語
264: 263 2017/01/21(土)19:43 ID:J7ipYv9j(2/2) AAS
「単一定義規則」の方が検索にかかりやすい言葉かも。
265: [sage] 2017/01/22(日)08:28 ID:5o7PrILb(1) AAS
>>261
そうそう。最適化目的でinline付けても普通無視されるからね。
266: 2017/01/22(日)14:37 ID:hBhrTyQG(1) AAS
外部リンク:chrome.google.com
267
(2): 2017/01/24(火)12:50 ID:ZplzBBh2(1/2) AAS
Windows上で、APIを使わずに、コマンドプロンプト上だけで結果が
ほしいような、C言語のプログラムを作るのに便利な開発環境はありますか?
VIsualStudioは重すぎてあまり使いたくありません。
どうぞよろしくお願いします。
268: 2017/01/24(火)13:20 ID:qjTW56fl(1/2) AAS
msys2
269
(1): 2017/01/24(火)13:39 ID:ZplzBBh2(2/2) AAS
msysって、どういうものですか?
270: 2017/01/24(火)13:58 ID:qjTW56fl(2/2) AAS
>>269
コンパイラツールチェインとターミナルとライブラリ管理のパッケージツールを纏めたものです
エディタは無いし ビルドツールはautotoolsとかcmakeとかを使います
ただ単体ファイルをコンパイルして実行するだけなら
gccを叩くだけなので ご要望に沿うかと
271: 2017/01/24(火)14:14 ID:tjYeiy24(1) AAS
重いのがイヤなら code::blocks はどうかね
外部リンク[html]:demura.net
272: 2017/01/24(火)20:33 ID:bAAm8CCs(1) AAS
>>267
自分もvisual studio が重いのと好きなエディタ使いたいのと、
でもGUIでファイル管理とかコンパイルエラー行へのジャンプをしたかったの自分でそういうツールを作った。TTVC Developer っていうのだけど
ネット上に公開してるけど反応無いので本当に良くできてるかどうかは
わからんが、自分的には便利だとは思ってる
273: 2017/01/24(火)20:39 ID:2gaKjsEX(1) AAS
俺はqt creator使ってるな
VSよりマシってくらいだが
274: 2017/01/24(火)20:46 ID:HHZbO6eg(1) AAS
>>267
notepad.exe
cl.exe
link.exe
275: 2017/01/24(火)21:22 ID:nvNd8iP1(1) AAS
Bash on Ubuntu on Windws
276: 2017/01/24(火)21:41 ID:1ohBhH6C(1) AAS
あれβとれたっけ?
277: 2017/01/27(金)01:10 ID:c6wkRwWW(1/2) AAS
*p++ って 参照してからインクリメントですよね。
某書に*(p++)と等価って書いてあったけど。
ん 同じか
278: 2017/01/27(金)01:47 ID:JFq0FevS(1) AAS
同じだよ
その括弧かあってもなくても実際にインクリメントがされるタイミングには影響しない
279
(1): 2017/01/27(金)02:43 ID:c6wkRwWW(2/2) AAS
すまん 評価してからインクリメントは同じだもんね。
280: 2017/01/28(土)22:24 ID:fbuNIeJW(1) AAS
>>279
いいってことよ

何気に愉快なIDだな
281
(3): 2017/01/29(日)14:28 ID:XKehhdE4(1/3) AAS
質問です。
VisualStudio2015でReleaseビルドをしていたところ、生成されたEXEに気になる点がありました

if(false){
printf("hogehoge");
}

という処理を書いたところ、このprintfは到達不可能なのに、EXEの中に"hogehoge"という文字列が含まれていたのです。
※再現コードなのでhogehoeをprintしてなんの意味があるのかというコードですが

到達不能なのが明らかな部分は最適化で削除されるものだと思っていたのですが、何かしらの私の不手際でしょうか?
最適化は /O2オプションです
282
(1): 2017/01/29(日)15:19 ID:DfD+S+Qh(1) AAS
>>281
/O4とかは?
283
(1): 2017/01/29(日)15:31 ID:2ZaFXkbr(1) AAS
オプションによる不確定なものをどうして不手際と思ったのか謎
/O2 /GF-なら残る可能性高いし
284: 2017/01/29(日)17:04 ID:XKehhdE4(2/3) AAS
アドバイスありがとうございます

>>282
VisualStudioには無いようです。GCCにはあるようですが、ぐぐった限りだと効果はないようなことが散見されました

>>283
「不要なコードを削る」というのは、一番単純で効果が高そうなので、まっさきに確実に全除去してくれるだろうと思い込んでいたためです
この手のコードが最適化で消えないと、ifdefだらけになりそうなのですが、何か対策はないものでしょうか?
285
(1): 2017/01/29(日)18:59 ID:K+/fnyLa(1) AAS
何かの理由があって残してるという事はないのかな・・・
286
(1): 2017/01/29(日)19:49 ID:6wGEJq5M(1) AAS
>>281
普通に削除されて文字列もなくなるけど?
287: 2017/01/29(日)23:12 ID:XKehhdE4(3/3) AAS
>>285-286
ご返答ありがとうございます。

どうも文字列をあれこれ変えて、消えたり消えなかったりとよくわからない状況になってきました。
とりあえず、VS2015での最小コードを作れましたので貼り付けます

int main()
{
char text[] = "foofoo";
printf("hogehoge");
if (false) { printf(text); }
return 0;
省5
288
(1): 2017/01/29(日)23:42 ID:DuISdTe+(1) AAS
VS2015の環境を持っていないんで見当違いかも知れんが…。

#include <stdio.h> か #include <cstdio> を書いてみる。
char text[] = ... を const char text[] = ... にしてみる。

これらを(独立して)変えてみたら状態が変わらんかな?
printf()による副作用の可能性を考慮してtextを消さないのかも知れん。

もちろんprintf(&quot;hogehoge&quot;)を呼び出しても
引数になってないtextが読み書きされるはずはないんだけど。
289
(1): 2017/01/30(月)00:05 ID:iVXSa+56(1) AAS
>>288
アドバイスありがとうございます
すいません。最小コードといいつつincludeをきちんと書いておりませんでした
#include <stdio.h>を最初に書いております
cstdioに変えてみて、各種パターンやってみましたが、変化は見られませんでした

次に、以下です
const char ではfoofooは消えませんでした
const static char に変えたところ、消えました

printfが、中でスタック消費量でも利用しているのかな…と馬鹿なことを考えて
char text〜をグローバル空間に出してみましたが、foofooは消えずです
290: 2017/01/30(月)13:26 ID:NFw8h2uH(1) AAS
>>289
グローバル変数にするのは最適化されにくくなるだけ。
とりあえずこれで

#include <stdio.h>
int main(){
printf("hogehoge");
if(false){
printf("foofoo");
}
return 0;
省10
291: 2017/01/30(月)17:50 ID:X+M9ocjS(1) AAS
つまり>>281は嘘つきってこと?
292: 2017/01/30(月)19:47 ID:p0U51Ig/(1) AAS
exeの中身まで気が回りませんわ
293: 2017/01/30(月)22:08 ID:mpXbeHjF(1) AAS
exeにビルド時のフルパスが埋め込まれてるとイラっとする
294: 2017/01/30(月)22:20 ID:XMGcU10o(1) AAS
デバッグビルドなら普通でしょ
295: 2017/01/31(火)02:46 ID:SZ8YrWi+(1) AAS
リリースビルドにして、最適化オプションを指定すれば?
296: 2017/01/31(火)09:17 ID:r8Cb1+5o(1) AAS
デバッグ情報を含めなければいいだけだしな
297
(1): 2017/02/01(水)01:15 ID:lC8eLy+G(1) AAS
あるクラスに引数で渡されるオブジェクトのconstではない参照を持ちたいんですけどどのようにやればいいでしょうか
ポインタはなるべく使いたくないのですが
class A {
public:
void setParam(Param&);
private:
Param& m_param;
}
状況としては
あるクラスBがクラスAみたいなParamの参照を持つクラスを複数持っていて
省1
298
(1): 2017/02/01(水)01:25 ID:V+KME3Sb(1/2) AAS
ライフタイムと循環参照のもたらす悪夢を
全部避けられるように熟考しながら
shared_ptr / weak_ptr をどうぞ
Welcome to C++ nightmare!!
299
(1): 2017/02/01(水)01:36 ID:nwC60mRJ(1) AAS
shared_ptrの何が難しいのか判らん。
shared_ptr程度で悪夢とか言ってたらswiftも使えなくない?
300
(1): 2017/02/01(水)02:15 ID:V+KME3Sb(2/2) AAS
まぁ良く調べて使ってねってのを脅し効かせた程度です 
他の言語で参照カウント型のsmart_ptr解ってるなら 確かに大丈夫
1-
あと 702 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s