板検索:
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 (636)
まとめビュー
1
デフォルトの名無しさん[sage]   投稿日:2016/11/06 22:58:02  ID:dU5z27As.net
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
コメント3件


2
デフォルトの名無しさん[sage]   投稿日:2016/11/06 23:23:55  ID:AHO3vAwR.net
>3-1000は射精魔
コメント1件

3
デフォルトの名無しさん[]   投稿日:2016/11/07 00:30:57  ID:pyn9XiBr.net
>2
訂正しときます
次スレの>3-1000が射精魔
コメント1件

4
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:27:53  ID:vooGYje+.net
前スレ>999再掲
class A{
int a[2];
A(int b[])
:a(b) //error
{}
};

この:a(b)ってなにか書き方ありますか?

前スレ>1000
無理でした・・・
コメント3件

5
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:34:35  ID:dSd+kVnH.net(2)
何がしたいのかわからないので回答しようがないな

6
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:36:19  ID:dSd+kVnH.net(2)
あ、初期化子か
インデントがないから見間違えた

7
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:38:54  ID:e8hpdnod.net
引数の int b[] って int* b と同じやしなぁ

8
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:47:42  ID:HQzTq5fm.net
std::array

9
デフォルトの名無しさん[sage]   投稿日:2016/11/07 12:11:29  ID:56hqYy7l.net
C++11以降なら
A(int (&b)[2]) : a{b[0], b[1]} {}

10
デフォルトの名無しさん[sage]   投稿日:2016/11/07 14:52:37  ID:fwwW9lIx.net(2)
だがint b[2][3]はポインタ引数は・・・

11
デフォルトの名無しさん[sage]   投稿日:2016/11/07 14:56:04  ID:6MsAvbZq.net
↑幻覚をみた糖質のつぶやき
コメント1件

12
デフォルトの名無しさん[]   投稿日:2016/11/07 15:00:49  ID:3Xim9e5h.net(2)
>4
C++11以降ならstd::initializer_listが使える

#include <iostream>
#include <initializer_list>
#include <algorithm>

class A {
int a[6];
public:
A(std::initializer_list<int> b) {
std::copy(std::begin(b), std::end(b), a);
}
void print() const {
for (int i : a)
std::cout << i << std::endl;
}
};

int main()
{
A a({10, 4, 2, 8, 5, 66});

a.print();
}
コメント2件

13
デフォルトの名無しさん[sage]   投稿日:2016/11/07 18:18:06  ID:hOJqMng1.net(4)
>12
それinitializer_listに6っこ以上与えたら実行時のアクセス違反になる

>4
C++11以降ならstd::array使うべき
そうすれば普通に書ける

class A{
std::array<int,2> a;
public:
A(const std::array<int,2> &b):a(b)
{
}
};
コメント1件


14
13[sage]   投稿日:2016/11/07 18:21:04  ID:hOJqMng1.net(4)
2行目「6個より多く」だったね

15
デフォルトの名無しさん[sage]   投稿日:2016/11/07 18:44:55  ID:3Xim9e5h.net(2)
>13
いやいくらでも動的に増やせるんだけど初心者スレだから省略した

http://ideone.com/ryEwkt

16
デフォルトの名無しさん[sage]   投稿日:2016/11/07 19:07:23  ID:hOJqMng1.net(4)
要求は固定長の配列であって、動的に増やせるようにしろとは言ってないので
それのコードは非効率にしかならないと思うよ
コメント2件

17
デフォルトの名無しさん[sage]   投稿日:2016/11/07 19:25:01  ID:fwwW9lIx.net(2)
>11
ん?
int b[2][3];をわたせんの?
func(int a[][3]);以外で

18
デフォルトの名無しさん[sage]   投稿日:2016/11/07 19:50:01  ID:Z2RT26Su.net(2)
>16
だからvector使ってないでしょう
unique_ptrのパフォーマンス知らないの?

19
デフォルトの名無しさん[sage]   投稿日:2016/11/07 20:07:47  ID:Z2RT26Su.net(2)
ID:hOJqMng1 の主張の変遷

1.わざと大きい初期化子を与えると実行時にアクセス違反になると主張
→だから動的に対応できるようにした

2.すると今度は非効率的だからarrayを使えという
→arrayが特に効率的なわけではないし、今度は「要求は固定長の配列だ」と言い出す

どう考えても言ってることがコロコロ変わってるんだが
コメント2件

20
デフォルトの名無しさん[]   投稿日:2016/11/07 21:12:34  ID:L762Pvtq.net
!!喧嘩の予感!!

21
デフォルトの名無しさん[sage]   投稿日:2016/11/07 21:25:52  ID:nZ1H9hgf.net
A() : a{b[0], b[1]} {}がダメだった人にC++11を押しつけてどーすんだ
>12に至ってはもとの質問と全然関係ねーし
コメント1件

22
デフォルトの名無しさん[sage]   投稿日:2016/11/07 21:26:20  ID:Rr8tj+hR.net
VC++で、マウスオーバーで色が少し変わって、クリックしたら沈んだみたいになる画像ボタンを作るにはどうしたらいいですか?

23
デフォルトの名無しさん[sage]   投稿日:2016/11/07 22:16:57  ID:hOJqMng1.net(4)
>19
まず効率は動的確保を行うnewとunique_ptrより確実にarrayのほうがいい

そして>4の要求はコードから明らかに固定長でいいと言ってる
これは私の勝手な主張ではなく元の要求がそうなってる
目的を達成するために非効率な動的確保は必要ない

私はアクセス違反になるといったが動的確保にしろとは言っておらず、動的確保にしたのはそっちが勝手にやったこと
アクセス違反を回避するために動的確保にするのは全く割に合わない
だったら長さチェックすればいいだけ

24
デフォルトの名無しさん[sage]   投稿日:2016/11/07 22:20:22  ID:JXtVbtZ4.net
>21で結論でてるじゃねえか
C+11を押し付けてる時点でおまえら全員ダメだ!

25
デフォルトの名無しさん[sage]   投稿日:2016/11/07 23:34:44  ID:lMECrzfj.net
いいぞ、もっとやれ〜♪

26
デフォルトの名無しさん[sage]   投稿日:2016/11/08 00:32:16  ID:t0HdCoBm.net
沸点低すぎワロタw

27
デフォルトの名無しさん[sage]   投稿日:2016/11/08 00:33:05  ID:2SYrs2Uf.net
>アクセス違反を回避するために動的確保にするのは全く割に合わない
こう書かれるべきものが
>16
>それのコードは非効率にしかならないと思うよ
と書かれたため>19が射精した

特に「非効率にしかならない」の「にしか」という表現が前後の繋がりを考えると最悪だ

28
デフォルトの名無しさん[sage]   投稿日:2016/11/08 15:38:54  ID:FW358liz.net(3)
using std;
int main() {
int a;
cout<< "数を入力してください" <<endl;
cin>> a;
cout<<a <<"ですね?" <<endl;
}
aを確実に入力させたくて困っています
ご教授ねがいます
コメント1件

29
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:03:34  ID:j/2yZvJO.net
まず確実ってなんやねん
数以外だったり未入力は弾くってか

30
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:26:08  ID:FW358liz.net(3)
そうです
未入力で無限ループみたいに表示されて困っています

31
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:26:29  ID:Or+T0geg.net
教示ならしてやっても良いが、教授はお断りだ

32
デフォルトの名無しさん[sage]   投稿日:2016/11/08 16:58:49  ID:sBMnjDSh.net
>28
http://ideone.com/dpolU5

一応単なる改行や数字で始まらない文字列は弾くようにした
ただしコメントにも書いてあるけど 123def みたいな数字で始まる文字列を
入力したときは数字だけ返すんでそれが駄目なら自前で作るしかないね
コメント1件

33
デフォルトの名無しさん[sage]   投稿日:2016/11/08 17:22:56  ID:FW358liz.net(3)
>32
getline知りませんでしたが何とかできそうです
ありがとうございます

34
デフォルトの名無しさん[sage]   投稿日:2016/11/10 10:52:07  ID:8ULjF/bN.net(8)
独習C第4版 P197ページの再帰のプログラムなのですが、
#include <stdio.h>

void recurse(int i);

int main(void)
{
recurse(0);

return 0;
}

void recurse(int i)
{
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}
}

実行結果は
9 8 7 6 5 4 3 2 1 0

の動作がわかりません。10になるまでprintfが実行されずに+1され続けるのはいいのですが、
なぜ10になったらiが戻り始めるのでしょうか?
あまりに初心者な質問ですみません。

35
デフォルトの名無しさん[sage]   投稿日:2016/11/10 11:03:28  ID:6ImFpJhK.net(3)
引数だけ書くと
0+1
1+1
・・・
9+1
ここまではprintfまで来ないまま再帰
9+1でifに入らないからrecurseからリターン
printfがiを表示(9)してリターン
printfがiを表示(8)してリターン
の繰り返し
コメント2件

36
34[sage]   投稿日:2016/11/10 11:07:42  ID:8ULjF/bN.net(8)
>35
早速のレスありがとうございます。

>9+1でifに入らないからrecurseからリターン
ということはmain関数のreturn 0でプログラムは終了してしまうのではないですか?
なぜprintfが呼ばれるのかわからんのですが。(iが減算される理由もわかりません)

37
34[sage]   投稿日:2016/11/10 11:12:33  ID:8ULjF/bN.net(8)
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}

recurseとprintfは同じifブロックに入っているので、ifが偽なら両方共スキップされると思うのですが、
なぜprintfだけ呼ばれるのでしょうか?
コメント1件

38
デフォルトの名無しさん[sage]   投稿日:2016/11/10 11:20:27  ID:69ogPHI/.net(4)
丁度再帰打ち切り付近の挙動

i=8 で受けた recurse
 recurse(8+1) の呼び出し
 i=9 で受けた recurse
  recurse(9+1) の呼び出し
    i=10 で受けた recurse
    条件合致せず戻る
 printf("%d", i) で 引数の 9 を書く
 i=9 で受けた recurse から戻る
printf("%d", i) で 引数の 8 を書く
i=8 で受けた recurse から戻る

39
デフォルトの名無しさん[sage]   投稿日:2016/11/10 11:28:04  ID:6ImFpJhK.net(3)
>37
9+1で入って偽で抜けたら
8+1で入ってきたif内のrecurseから抜けて次のprintfが実行されて抜ける
8+1で抜けたら7+1で入ってきたif内のrecurseから抜けて次のprintfが実行される
の繰り返し

40
34[sage]   投稿日:2016/11/10 11:40:24  ID:8ULjF/bN.net(8)
>35-39さん
どうも再帰関数とforループがごっちゃになっていたようです。
何となくわかりました。
後は自分で考えてみます。
どうもありがとうございました。

41
デフォルトの名無しさん[sage]   投稿日:2016/11/10 12:42:30  ID:69ogPHI/.net(4)
再帰呼び出し後に書く  recurse(i+1); printf("%d ", i);

書いてから再帰呼び出し printf("%d ", i); recurse(i+1);
の違いとか

呼び出しの出入りを整理する
printf("in:%d\n", i);
recurse(i+1);
printf("out:%d\n", i);
と見えてくると思うよ
コメント1件


42
デフォルトの名無しさん[sage]   投稿日:2016/11/10 13:57:04  ID:gEXUDT4B.net(5)
なんか遠回りな説明ばかりだな
スタックフレームというキーワードを出してやれよ
コメント1件

43
40[sage]   投稿日:2016/11/10 14:01:09  ID:8ULjF/bN.net(8)
>41
>再帰呼び出し後に書く  recurse(i+1); printf("%d ", i);
>と
>書いてから再帰呼び出し printf("%d ", i); recurse(i+1);
>の違いとか

これはこの本の次のページにも書いてありました。
書いてから再帰呼び出しの場合は昇順(1,2,3,4,5,6~)になりますね。

相変わらず曖昧な理解なんですが、
どのiの場合もi=10に達するまではrecurse(i+9)までしか実行されていなくて、
printfは実行されていない待機中の状態だと考えればいいのでしょうか?
それでi=10でif条件文を抜けて、i=9からi=0まで数字が大きい方から順番にまだ実行していなかった
printfを降順で実行していくのでしょうか?

この本(独習C)には
> 引数の値が10に達すると、recurse()の再帰呼び出しから戻りはじめます。関数は、呼び出し元に戻る
>ものなので、recurse()は直前の呼び出し元に戻り、そこでprinf()を文を実行して「9」と表示し、
>さらに前の呼び出し元に戻ります。こうしてrecurse()は、今度は「8」と表示します。 その後も同じ>プロセスが繰り返され、すべての呼び出しから戻った段階でプログラムが終了します。

実行される順番が、最初のi=0からではなく、直近のi=9からなのはなぜなのでしょうか?
コメント2件

44
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:02:24  ID:69ogPHI/.net(4)
再帰でどう動いてるか理解するのに
スタックフレーム出されても困らないか? 値の保持の実装でそうなってるってだけだし

45
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:09:10  ID:gEXUDT4B.net(5)
この手の人は、具体的な実装例を見さえすれば、すぐさま疑問が解消されるんだよ
>43でも「待機する」だとか
なんで逆順になるのか分からないとか
言っているが
スタックフレームさえ知れば全ての疑問は解決だし
C/C++するのにスタックフレームさえ知らない状態だと
このさき困難だろう

46
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:10:50  ID:69ogPHI/.net(4)
おっけー まかせた

47
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:18:39  ID:gEXUDT4B.net(5)
待機する、って言い方を見るに、何かキューのような物を連想しているようだし
実際、なんで逆順になるか分からないと発言しているわけだが
答えは関数呼び出しはキューではなくスタックだから、と言う他ない
キューやスタックという言葉の意味が分からなかったとしても
どのみちこれらも覚える必要のある最も基本的な事の一つだから
合わせて覚えればよいだろう
コンピュータの基本動作もよくわからないままプログラムを書くということは
多言語ではあり得るのかもしれんが、とりわけここはC/C++スレだからね

48
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:26:03  ID:gEXUDT4B.net(5)
いや、俺は別に何も説明するつもりはないよ
ただ、スタックフレームというキーワードをだね
そうすれば後は本人が検索するなりなんなり、勝手に調べるだろう
キーワードが分からなきゃ検索も出来ないから、キーワードを出してやれという話
スタックを知らずして再起呼び出しの動作を理解するのは非常に困難というか
質問者は関数呼び出しがキューのようなものであると考えている可能性が高いようだけど
実際にはスタック動作だよ、と
ここを勘違いしていたら、答えにたどりつかないかなぁと

49
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:29:55  ID:6ImFpJhK.net(3)
>42
最短の説明で教えてあげてくれ任せた

50
40[sage]   投稿日:2016/11/10 14:33:22  ID:8ULjF/bN.net(8)
スタックフレームで検索して見たところ、
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/MP/final/part06/node9.html
このページが一番わかりやすそうです。
LIFOなんで新しい関数と引数が上の方に積み上がっていくと考えれば良いのでしょうか?
first outなんで実効は新しい順(つまり今回の例の場合はi=9)ということですね。

スタックフレームという言葉で検索したらおもしろそうなサイトがたくさん出てきました。
皆さん今回はありがとうございました。

51
デフォルトの名無しさん[sage]   投稿日:2016/11/10 14:51:19  ID:IzCfpVGN.net
>43
まず大前提としてプログラムの流れは1本道で別れたりしないし、待機みたいなことも普通しない

そして再帰関数という特別な関数があるわけではない、recurseは普通の関数と何も変わらない

void recurse(int i)
{
if(i < 10) {
recurse(i + 1);
printf("%d " , i);
}
}

この4行目はrecurseという関数を呼び出している
つまり自分自身を呼ぶのでこの4行目の呼び出し後、recurse関数の最初に戻る
ただし引数iは1大きい値で呼ぶ
これを入れ子のように10回繰り返すことになる
コメント1件

52
43[sage]   投稿日:2016/11/10 15:05:17  ID:8ULjF/bN.net(8)
>51
レスありがとうございます。
https://ipa-zone.info/page-2644/
このページに私が使っている独習Cの再帰の部分が丸ごと転載されているんですが(違法?)、

i=0~10と昇順で増加していく前半部分でも呼び出された関数(recurse(1)など)は終了した訳ではないですよね?
後半のi=10から降順で減少していくときにはじめてprintfが実行されて関数が終了すると思うんですが、
LIFOなんで最後に呼び出されたrecurse(9)からrecurese(0)まで降順で残ったprintfを実行していくということではないんですか?

53
デフォルトの名無しさん[sage]   投稿日:2016/11/10 15:15:27  ID:gEXUDT4B.net(5)
>実行は新しい順(つまり今回の例の場合はi=9)ということですね。

難しく考える必要は無い
関数を呼び出すとき、自分が今何をしていたかをそっくりそのまま保存した状態で
新たにスタックを確保して、呼び出した関数を実行する
関数の実行が終わると、使っていたスタックを開放して
呼び出される前に実行していた処理に復帰する
ちょうど君が
1)ビデオを見ていた時に電話がかかってきたら、ビデオを一時停止して電話に出る
2)電話が終わると、ビデオを再生して続きを見る
のと同じで、ビデオの一時停止機能がスタックに相当している
で、君がこの日のことを日記を書くとき
1)のことを重視すれば、ビデオ→電話、って順になるし
2)のことを重視すれば、電話→ビデオ、って順になる
実際にはビデオ→電話→ビデオ、という順で物事は流れているんだが
どこのタイミングを切り取ってくるかで順番が変わるのだ
下から順番に1,2,3,4,5と積み上げて、上から順番に5,4,3,2,1と取り出すとき
積み上げるとき(積み上げる前)に出力すると1,2,3,4,5だし
取り出すとき(取り出した後)に出力すると5,4,3,2,1になる
実際には1,2,3,4,5,4,3,2,1という順で処理は走っているが(積み上げる→取り出す)
前半に着目すれば1,2,3,4,5だし、後半に着目すれば5,4,3,2,1なのだ
コメント1件

54
デフォルトの名無しさん[sage]   投稿日:2016/11/10 15:18:47  ID:17noS2hU.net
長い。あとビデオ見ながら電話に出れるだろ

55
デフォルトの名無しさん[sage]   投稿日:2016/11/10 15:21:50  ID:3AXwvnI0.net
ポインタを返すラムダをstd::functionで取り扱いたくて調べてるのだが
どうしてどの参考例もintやvoidの例しか示していないのだろう
参考例を示すまでもなく誰でも簡単に記述出来ているのだろうか
コメント2件

56
52[sage]   投稿日:2016/11/10 15:39:54  ID:8ULjF/bN.net(8)
>53
レスありがとうございます。参考になりました。

57
デフォルトの名無しさん[sage]   投稿日:2016/11/10 20:21:43  ID:CLfGjB35.net
>55
特に難しくは無いと思う
例えばどんなことをしたいの?
コメント1件

58
デフォルトの名無しさん[sage]   投稿日:2016/11/10 20:31:23  ID:AQTsjJgJ.net(3)
文盲はお帰りください

59
デフォルトの名無しさん[sage]   投稿日:2016/11/10 21:49:48  ID:cv2N5dvt.net
std::function<int*(const int)> create_array = [](const int n)->int*{ return new int[n]); };

でいいんじゃないの
誰かdeleteすんだよと思うけど
コメント1件

60
デフォルトの名無しさん[sage]   投稿日:2016/11/10 22:03:01  ID:AQTsjJgJ.net(3)
>誰かdeleteすんだよと思うけど

自覚があるならそんな変な例を出さなければいいのに
コメント1件

61
デフォルトの名無しさん[]   投稿日:2016/11/10 23:23:35  ID:wCaAZ9DK.net
>60
じゃあお前が適切な答え書いてやれよ

62
デフォルトの名無しさん[sage]   投稿日:2016/11/10 23:41:59  ID:AQTsjJgJ.net(3)
>55の回答はこんな感じでいいだろう
using ptr_type = void *;
std::function<ptr_type ()> f1{ []{ return ptr_type{}; } };

std::function<void *()> f2{ []{ return static_cast<void *>(nullptr); } };
コメント2件

63
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:01:22  ID:JQalwGbJ.net(2)
>62
散々煽ってたから聞くけど
static_cast<void *>(nullptr)
このキャスト無駄じゃない?
これは変な例ではないの?
コメント1件

64
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:15:39  ID:tUBqvL6G.net(2)
う〜んどうだろうね
よく見るとラムダの戻り値の型が省略されているし
こういったことがどの段階のC++のバージョンで出来るようになったのか
俺は知らないが、実際の戻り値の型からラムダの型を推測してくれる便利機能
を使っていると思われる
となれば、キャストなしのnullptrでは型がわからないから
ラムダの戻り値の型の推測もできず、コンパイルエラーになるのではないだろうか

65
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:36:59  ID:tUBqvL6G.net(2)
もしくは、ひょっとしたらnullptrには何らかな特殊な型が与えられているのかもしれんが
それはしらないが、ともかくvoid*型ではないのは確かなので
その場合でもstd::function<void *()>への代入で問題を起こすんだろう
nullptrに型が有るのか無いのか、俺は知らんし、興味もないんだけどね
コメント1件

66
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:48:43  ID:v3r+B2af.net(2)
>57>59>62
vsで試してて
std::function<void *()>
のような書き方をするとテンプレートがエラーを出していたので
関数ポインタのような特殊な記述が必要になるのかと思って調べていたのですが
原因が分かりました

仮で書いていたラムダ式の中の返り値を
return NULL;
にしていたのでこれがintなためエラーが出ていたようです
テンプレートの奥のほうで型の不一致を出していたので
<>内の記述ばかり疑っていました

というかNULLって今まで(void *)0だと思ってました・・・
まさかただの0だとは
普段はコンパイラが暗黙に変換してるんだね・・・

67
デフォルトの名無しさん[sage]   投稿日:2016/11/11 01:56:19  ID:v3r+B2af.net(2)
自宅のvs2015communityで実験したところ

std::function<void *(void)> f0 = [](void) { return NULL; };
std::function<void *(void)> f1 = [](void) { return (void *)NULL; };
std::function<void *(void)> f2 = [](void)->void * { return NULL; };
std::function<void *(void)> f3 = [](void) { return nullptr; };

だとf0のみエラーです
gccとかでも同様なんですかね
コメント2件

68
デフォルトの名無しさん[sage]   投稿日:2016/11/11 02:04:25  ID:JQalwGbJ.net(2)
>65
nullptrの型はnullptr_tだよ
だからラムダの戻り値の型はnullptr_tと推論される
ただ問題はvoid *を戻り値としたfunctionに代入できるか

ぶっちゃけ俺も書いてからやっちまったかと思って調べた

規格を調べたところやはり要らなかった
戻り値が暗黙変換できれば代入できると書いてある
つまりラムダの戻り値intでfunctionはdoubleとかもあり
そして当然nullptrはvoid *型に暗黙変換できる
なので要らない

https://ideone.com/EwRvlU

>67の結果とも一致する

69
デフォルトの名無しさん[sage]   投稿日:2016/11/11 07:16:38  ID:hk5EgzxW.net
>63
コンパイルが通るかどうか以前に55は『ポインタを返すラムダを』と言っているのだから、
無いとお題改変になってしまうだろう

>67
当然
int f() {return NULL;}
void *関数() {
 return f();//エラー
}
と同じことなので

70
デフォルトの名無しさん[sage]   投稿日:2016/11/11 08:09:52  ID:JclCvFO1.net(2)
ID:tUBqvL6Gは希にみる健常者

71
デフォルトの名無しさん[sage]   投稿日:2016/11/11 08:32:07  ID:JclCvFO1.net(2)
>nullptrに型が有るのか無いのか
この手の文法で型が無い落とし穴は初期化の { } ぐらいか
int a = {0}; // 「{0}」は式でなく型も無い

72
デフォルトの名無しさん[sage]   投稿日:2016/11/29 23:30:19  ID:7z8mZ0fw.net
さすがにCは時代に取り残された感があるな
新規案件なら埋め込み系を除いて存在意義なし

73
デフォルトの名無しさん[sage]   投稿日:2016/11/30 02:47:51  ID:Ir3oZvjK.net
寂しいですなぁ

74
デフォルトの名無しさん[]   投稿日:2016/11/30 02:56:49  ID:a9ciiDR7.net
う、埋め込み…

75
デフォルトの名無しさん[]   投稿日:2016/11/30 04:02:07  ID:tfyAgmME.net
組み込み系って英語ではembedded なんちゃら だし
よくある間違いでしょ

76
デフォルトの名無しさん[]   投稿日:2016/11/30 05:21:32  ID:sG3uRZRm.net
韓国ではよくあるんだ。

77
デフォルトの名無しさん[sage]   投稿日:2016/11/30 05:53:32  ID:/gnC384r.net
埋めるのは中国の得意とする技術

78
デフォルトの名無しさん[sage]   投稿日:2016/11/30 21:26:32  ID:ncjk4kan.net
linuxのカーネルモジュールてC++で書けるようになったんだっけ?

79
デフォルトの名無しさん[sage]   投稿日:2016/11/30 22:16:09  ID:Yeu32peW.net
ドライバとかはサブシスは普通に書いてるぽい、コアな部分はメンテナがパニクルのでやっぱCかと

80
デフォルトの名無しさん[sage]   投稿日:2016/12/01 11:40:38  ID:OWujHEiH.net
実際ひと目でいいからソース見てみ
一生C++なんか使わねーという主張がにじみ出てるよ

81
デフォルトの名無しさん[sage]   投稿日:2016/12/01 12:49:06  ID:yfw1GD74.net
C++使わなくていいならそれに越したことはないからね

82
デフォルトの名無しさん[sage]   投稿日:2016/12/01 13:16:49  ID:VWu2OAFy.net
c++は個人差が大きすぎるようです。議論も出来ない。
方向がコンフリクトしたら大変なのは ここ見てればわかる。

83
デフォルトの名無しさん[sage]   投稿日:2016/12/03 01:01:12  ID:62YFpmrs.net
C++はマングリングとかややこしいから

84
デフォルトの名無しさん[sage]   投稿日:2016/12/03 20:56:34  ID:nmEGc+VH.net
健全でない言葉が含まれているため表示しません 内容を確認する

85
デフォルトの名無しさん[sage]   投稿日:2016/12/11 20:30:30  ID:CL+E9lTu.net
C++初学者です。

既存のCのライブラリに次のような関数が有るんだけど
bool SendData(uint32_t * txData, uint32_t * rxData, uint16_t length);

ラッパーで引数をuint16_tのポインタに変更したもを作りたいと考えています。
bool SendData(uint16_t * txData, uint16_t * rxData, uint_16_t length);

単にラッパーの中でバッファを持って変換してやれば良いとも思ったけど、
組み込み用途なんで速度や消費メモリ的にそれは避けたいです。
newやdeleteは無しでスタックのみを使用できれば、なお良いのですが、
良い方法が思いつきません。

何かスマートな方法は有りませんか?

86
デフォルトの名無しさん[sage]   投稿日:2016/12/11 20:55:16  ID:Cd8ql2jy.net
元関数の length が uint32_t 単位での個数という仮定
→ uint32_t より小さい粒度は取り扱えない
→ uint16_t で取り扱える個数は偶数個に限定される
→ ポインタのキャストと length を /2 で渡すだけ
コメント2件

87
デフォルトの名無しさん[sage]   投稿日:2016/12/11 21:42:00  ID:74mAoGAM.net
uint16_tの方がラッパーなの?
どちらにしろ元の関数をそのまま使うなら変換は必要だね。

スタックが使われるかどうかはしらないけどClangコンパイラなら
可変長配列(VLA)っていうのがC++でも使えたはず。
サイズが大きすぎるとオーバーフローするけど。newと兼用してみるのも手。
コメント1件

88
85[sage]   投稿日:2016/12/12 22:47:53  ID:lLNqHCIY.net
>86
なるほど、
渡すデータを1つ置きにすれば良いわけですね。
渡すデータを組み立てるときにそうすれば良いですし変換のコストは少なそうです。
多少汚いとこが関数外に出ちゃいますが今回のケースでは現実的な方法だと思います。

>87
残念ながら使用しているコンパイラはclangではないですし、
VLAは今回の用途には重そうですね。
便利そうなので、PC用のプログラムを作るときに使えるかもしれません。

ひとまず>86さんの方向で考えてみます。
お二人ともありがとうございました。

89
デフォルトの名無しさん[sage]   投稿日:2016/12/13 07:43:47  ID:vJwCdf+q.net(2)
組み込みでスタックに可変長のデータ領域確保するとか頭大丈夫?
コメント1件

90
デフォルトの名無しさん[sage]   投稿日:2016/12/13 18:19:51  ID:692Oa1tt.net
>89
組み込みのことは知らないんだけど、サイズチェックして分岐するのはどうなん?

if (length * sizeof(uint32_t) < 32767) {
  uint32_t list[length];
  Test(list, length);
}
else {
  uint32_t list = new uint32_t[length];
  Test(list, length);
}
コメント1件

91
デフォルトの名無しさん[sage]   投稿日:2016/12/13 19:22:51  ID:vJwCdf+q.net(2)
>90
どうなのって言われても好きにしろよとしか言えないけど...
個人的には各々のテストも必要になるその手のコードは書かない

92
デフォルトの名無しさん[sage]   投稿日:2016/12/15 21:00:06  ID:iypiqTM3.net
ガチの初心者でプログラミング勉強したいと思ってるんですが
プログラミング勉強するとなるとどんなものから作り始めればいいですかね?
ちなみにCの基本的なこと(if,for文やファイル入出力)くらいしか知りません
コメント2件

93
デフォルトの名無しさん[sage]   投稿日:2016/12/15 22:16:52  ID:esEF0eVo.net
やっぱり画像が出たら楽しいから画像ビューアとかが良いんじゃないかな
画像が動いたらもっと楽しいって言うんならゲームもよいんじゃない?
音関係も楽しいんだが、サウンドプログラミングは結構専門知識がいるうえ
デバッグが難しいから最初は手を出さないほうが良いよ

ま、画像ビューアや動画プレイヤーが楽しいよ
ちょっとした実用性もあるし
コメント1件

94
デフォルトの名無しさん[sage]   投稿日:2016/12/15 22:22:14  ID:KqXo4C+P.net
Cであることに特に意味がないのなら別の言語の検討をすすめる

95
デフォルトの名無しさん[sage]   投稿日:2016/12/16 06:44:53  ID:cbHo8vE5.net
javaも悪くないと思いますよ。

96
デフォルトの名無しさん[sage]   投稿日:2016/12/16 08:53:37  ID:hCzygT3G.net(2)
>92
プログラミングを習得した延長線上に何を作りたいか決まってる?
コメント1件

97
デフォルトの名無しさん[sage]   投稿日:2016/12/16 08:59:07  ID:2kpKp/Uz.net
>92
作りたいプログラム(今ならアプリケーションというのかな)の
イメージが先にないとアドバイスしにくい時代なのよ。

まずコンソールに hello, world を表示して、続いて標準入出力、
ソートやらリンクド・リストやらのアルゴリズムを習得して…
という順序を踏んでも、「マウスをクリックすると何かしてくれる」ような
今様のプログラムには少しも近づかないんだな、これが。
コメント1件

98
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:22:43  ID:R8KZSjOU.net(3)
>96
ゆくゆくはカメラを使って画像処理的なものをしてみたいと思ってます
具体的にはまだ決まってませんが…
コメント1件

99
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:23:43  ID:R8KZSjOU.net(3)
>97
なるほど
将来的にやりたいことをしっかり考えたうえで何を学ぶべきか考えたほうがいいんですね!

100
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:30:19  ID:R8KZSjOU.net(3)
>93
なるほど!
参考になりますm(__)m
コメント1件

101
デフォルトの名無しさん[sage]   投稿日:2016/12/16 09:52:11  ID:hCzygT3G.net(2)
>98
じゃあとりあえずGUIが必要だから
そこらへんからかな?
コメント1件

102
デフォルトの名無しさん[sage]   投稿日:2016/12/16 11:19:48  ID:O1fw7E0o.net
>101
わかりました!
ありがとうございます!

103
デフォルトの名無しさん[sage]   投稿日:2016/12/18 22:40:31  ID:rTzEq7cO.net
c++でGUIな何かを作るときどうやるのが普通?どうやるのがおすすめ?
趣味嗜好全開でいいから教えてくれ
コメント1件

104
デフォルトの名無しさん[sage]   投稿日:2016/12/18 22:46:05  ID:eNcCSvTp.net
ビルド時間とバイナリサイズが気にならないならwxWidgets

105
デフォルトの名無しさん[sage]   投稿日:2016/12/18 22:56:35  ID:TyHJy95g.net
真面目にその条件なら.NETだけどそれなら言語はC#でやった方がよいと思う
自分は自分用のWIN32APIを使ったGUI用のライブラリ作ったけど完全に時代遅れだとは思ってる

106
デフォルトの名無しさん[sage]   投稿日:2016/12/18 23:56:09  ID:psse/iGW.net
wxWidgetsよさそうやね
クロスプラットフォームってのがいい

107
デフォルトの名無しさん[sage]   投稿日:2016/12/19 08:41:19  ID:K+bb4qm0.net
vcを使うという事ですか

108
デフォルトの名無しさん[sage]   投稿日:2016/12/20 08:43:24  ID:/4ZK922w.net
>103
ターゲットのOSとかPC/ケータイとかライセンスとか軽さとか見比べて
GUIフレームワークを選ぶ

Qt は重いけどマルチプラットフォームかつ見た目がいいから人気
Windowsのみなら C# が迷わなくて済むけどね
時代遅れを気にしないなら VC+MFC の情報は多いw
他にもいろいろある

109
デフォルトの名無しさん[]   投稿日:2016/12/24 19:03:48  ID:Xnn//JuE.net(3)
FILE *fp;をグローバル変数にしてたら落ちまくって、ローカル変数にしたら落ちなくなった現象は何でですかね?
グローバルかローカルか関係ない気がするんですけど。
Windows7、Visual Studio 2015
コメント1件

110
デフォルトの名無しさん[]   投稿日:2016/12/24 19:04:08  ID:Xnn//JuE.net(3)
これで4時間近くハマった。

111
デフォルトの名無しさん[sage]   投稿日:2016/12/24 19:11:41  ID:0UyY/BKM.net
グローバルな FILE *fp の近く(若いアドレス)に置かれた
グローバルな配列の範囲オーバーじゃないかしら。
コメント3件

112
デフォルトの名無しさん[sage]   投稿日:2016/12/24 20:06:31  ID:TihFoldF.net
>109
ファイルの開くのから閉じるのまでが一関数に収まってて、他から呼び出してないなら関係ないと思うけど
閉じ忘れとか?

113
デフォルトの名無しさん[sage]   投稿日:2016/12/24 20:27:17  ID:DNE92dFu.net
fileno とか ferror は確認した?

114
デフォルトの名無しさん[sage]   投稿日:2016/12/24 20:34:23  ID:y7L7nGQ6.net
fp をグローバルにおいたソースで 別のローカル変数をグローバルに置いたら
その変数で副作用起こすんじゃね?

(>111 と同じく範囲突破しての書き込みを疑ってる)

115
デフォルトの名無しさん[sage]   投稿日:2016/12/24 21:00:46  ID:yr6q9nVG.net
fpがどんな値になろうと最悪でもエラー検出するだけだから
落ちるのはまともにエラー判定してないせい

116
109[sage]   投稿日:2016/12/24 21:14:49  ID:Xnn//JuE.net(3)
>111-115
ありがとうございます。

>111さんのおっしゃる通り、メモリの問題でした。
fopenからfreadの間で、
読み込みバッファをmallocで確保してmemsetでゼロクリアしている部分があり、
このクリアするサイズが確保したサイズを上回っていました。
なので、fopen直後のエラーチェックでも問題が起きてないのに落ちていたようです。

//私も一度はこれを疑って確認したんですけどね。
//レスもらってから改めて確認したらこのような状況になってました。

根本的な解決ができて良かったです。

117
デフォルトの名無しさん[sage]   投稿日:2016/12/25 01:18:26  ID:vsDUBYtf.net
気付くだけ立派だわなぁ

118
デフォルトの名無しさん[sage]   投稿日:2016/12/25 07:00:04  ID:iLmpV78q.net
mallocで確保した領域の溢れがグローバルな変数を壊すってのは
ちょいと解せない気もする。

DOSの頃なら互いに影響しあうことも普通だったろうけど、
最近のOSだと別に管理してそう。
内部の詳しいことは知らないけど。
コメント1件

119
デフォルトの名無しさん[sage]   投稿日:2016/12/25 09:26:05  ID:SibbJTGE.net
>118
お前はもう少し勉強してから書き込むべき

120
デフォルトの名無しさん[sage]   投稿日:2016/12/25 09:43:40  ID:CGvp0k11.net
エミュとかアドレスを固定してるけどどうやってんの?
コメント1件

121
デフォルトの名無しさん[]   投稿日:2016/12/25 16:56:04  ID:xlX3oF2t.net(2)
質問です
エラーになってしまいます
教えて下さい
C++11です

int n=0;
string hage="s"+n+".png";
コメント1件

122
デフォルトの名無しさん[sage]   投稿日:2016/12/25 17:03:23  ID:YVZO5C9V.net
"s"と".png"はconst char*型なので+は無理

123
デフォルトの名無しさん[]   投稿日:2016/12/25 17:09:24  ID:xlX3oF2t.net(2)
そうなんですか…
ありがとうございました


124
デフォルトの名無しさん[sage]   投稿日:2016/12/25 22:48:16  ID:oxH1mE2q.net
>120
最初に、すべてのアドレス分のメモリを確保すれば?

その先頭アドレスを、エミュレータの先頭アドレス・0 にすればいい
コメント2件

125
デフォルトの名無しさん[sage]   投稿日:2016/12/26 01:40:19  ID:Us2MOZON.net
>121
標準で用意されているのはstringとstring/char/char*間のみ(operator+)
なので+するのをintでなくstringにすればいける
C++11ならto_stringがあるから次ので問題ない
string hage = "s" + to_string(n) + ".png";

細かい書式設定とかしたいならsstreamかsnprintfあたりで
コメント1件

126
デフォルトの名無しさん[sage]   投稿日:2016/12/26 08:42:54  ID:w1n6Bp69.net
>124
それじゃ起動毎に変わるんじゃね?

127
デフォルトの名無しさん[sage]   投稿日:2016/12/26 09:21:17  ID:5lDUjv3x.net
起動毎にホスト上でのメモリ配置が変わっても
エミュレータの駆動機構で >124 のように
エミュレーションする対象の仮想コードのアドレッシング → ホスト環境の実メモリ
の変換テーブル経由なら問題は発生しないべ
コメント1件

128
デフォルトの名無しさん[sage]   投稿日:2016/12/26 12:36:41  ID:bq11e3Cp.net
>125
ありがとうございます!
あとでやってみます

129
デフォルトの名無しさん[sage]   投稿日:2016/12/26 16:52:23  ID:vHVIx8+p.net
ASLRのことなら、無効にする事が出来る

130
デフォルトの名無しさん[]   投稿日:2016/12/27 00:09:30  ID:hMHSnQwo.net
>127を分かりやすく言うと配列みたいなもんだ。
int foo[5];
と宣言すれば、起動毎に確保されるアドレスは違うが、
例えば3番目のアドレスには必ず&foo[3]でアクセスできる。
これと同じ。

131
デフォルトの名無しさん[]   投稿日:2016/12/28 09:29:29  ID:jHXCJg+4.net
OggVorbisの使い方を教えてください。
動的リンクライブラリとしてリンクして、
WAVEデータをリアルタイムでOggVorbis形式(CBR)に変換したいです。
VS2015です。
一応ググりましたがどこから手を付けてよいか分かりませんでした。

132
デフォルトの名無しさん[sage]   投稿日:2016/12/28 11:23:40  ID:BmYU7N0Q.net
https://xiph.org/doc/
ここから必要な文書を探して読んで理解するのが本筋

133
デフォルトの名無しさん[sage]   投稿日:2016/12/31 16:11:48  ID:8v6iajLL.net(2)
ある本の解答例ですが実行すると先頭文字が消えます。これではダメなんでしょうか?
void str_toupper(char *str)
{
while (*str)
*str++ = toupper(*str);
}
コメント2件

134
デフォルトの名無しさん[sage]   投稿日:2016/12/31 16:20:34  ID:ADMXNhyN.net(2)
*str++ = toupper(*str);

これ鼻から悪魔コード
インクリメント演算子で操作された変数が副作用完了点までに複数回参照するのは動作未定義

*str = toupper(*str);
str++;
と分離しないとまずい
コメント2件

135
デフォルトの名無しさん[sage]   投稿日:2016/12/31 17:17:13  ID:Z7Smo6OK.net
*str++ = toupper(*str); でダメなら
*str = toupper(*str++); で動くんじゃない?

……って真に受けるなよ。別の悪魔が出てくるだけだからな。
たとえ期待通りの動作になったとしても、たまたまだからな。
コメント1件

136
デフォルトの名無しさん[sage]   投稿日:2016/12/31 17:24:22  ID:xodGK7fu.net
ポインタを直接インクリメントするのはどうにも性に合わん

137
デフォルトの名無しさん[sage]   投稿日:2016/12/31 17:38:17  ID:nERH8viD.net
通る道なのでやさしくね

138
デフォルトの名無しさん[sage]   投稿日:2016/12/31 18:30:26  ID:K1FrsN4c.net
>133
その本がダメなコードの例としてそれを挙げてるならいいけど、正解としてそれを書いてるのなら、著者の能力とか校正の正確さとか不安になる。
コメント1件

139
133[sage]   投稿日:2016/12/31 19:18:21  ID:8v6iajLL.net(2)
>138
正解例です
>135
下でダメだったので正解を見たら上になってて、そうかとそうかと思ったのですが…
>134
ありがとうございます
初心者なので更に勉強してみます
コメント1件

140
デフォルトの名無しさん[sage]   投稿日:2016/12/31 20:02:29  ID:RP5GqFRc.net
本の題名晒してもいいと思う...

141
デフォルトの名無しさん[sage]   投稿日:2016/12/31 20:11:53  ID:ADMXNhyN.net(2)
古かったとして、古い規格だとしても処理系依存
(こっちのコンパイラはこうなるけど、あっちのコンパイラでは別の結果になるよ) なので、
正解コードとするのはよろしくない

142
デフォルトの名無しさん[sage]   投稿日:2016/12/31 20:17:55  ID:q3l2oU5w.net
なぜダメなのか何がダメなのか理解しとかないと

143
デフォルトの名無しさん[sage]   投稿日:2017/01/01 01:32:25  ID:LgRst/uw.net(2)
>139
まじすか ちょっとひどいですね。 著者が知りたいです。

144
デフォルトの名無しさん[sage]   投稿日:2017/01/01 12:42:18  ID:/LG195GI.net
str_toupperでググると正しいコードはあるけど >133 は見つからないなあ。結局なんて本?

145
133[sage]   投稿日:2017/01/01 14:53:59  ID:OFpbxODd.net
解きながら学ぶC言語(2006年第5刷)ですが、新版見てみたら >134 のように修正されてました

146
デフォルトの名無しさん[sage]   投稿日:2017/01/01 17:19:11  ID:LgRst/uw.net(2)
望洋先生すか あちゃー

147
デフォルトの名無しさん[sage]   投稿日:2017/01/04 01:18:25  ID:frbRBuKj.net
副作用完了点が2つ以上あると鼻から悪魔
コメント5件


148
デフォルトの名無しさん[sage]   投稿日:2017/01/04 01:40:21  ID:8dyTsCQL.net(3)
んなこたーない

149
1/2[]   投稿日:2017/01/04 02:39:58  ID:9INFfbdp.net(3)
このサイトを参考にコードを書いているのですが、レスポンス中に無反応になります。
助けてください。

http://qiita.com/edo_m18/items/41770cba5c166f276a83

このコードとの差異は以下の通りです。
----------------------------------------------------------
read_size = SSL_read(ssl, buf, buf_size);の前に
memset( buf, 0, buf_size );を挿入

write(1, buf, read_size);を
printf("%s",buf);に変更

close(sock);の後に
printf("OK.\n");を挿入

拡張子をcppとし、C++としてコンパイル。
----------------------------------------------------------

この変更したコードのprintf("%s",buf);で不具合が生じます。
不具合パターンは以下の2通りです。
・ 恐らく受信したHTMLの最終部分と思われる</body></html>を出力後、2行ほどの空行、そして0という数字が出力された後、無反応になる。
・ レスポンスヘッダやHTMLコードの途中で無反応になる。
無反応時にはEnterキーもCtrl+Cも効きません。
しばらくすると、効くようになります。
但し、printf("OK.\n");によるOKが出力されませんので、異常終了している可能性が高いです。
コメント1件

150
2/2[]   投稿日:2017/01/04 02:40:11  ID:9INFfbdp.net(3)
環境は以下の通りです。
OS: CentOS 6.4
コンパイラ: GCC 4.4.7
接続先: https://www.youtube.com/

その他、無反応中にnetstat -tanpコマンドで確認すると、
このアプリケーションはESTABLISHEDとなっています。
また、自宅サーバーのHTTPSのサイトへアクセスした場合、HTMLの最後のほうの</body>が出力された後に数秒の間があり、
その後、</html>が出力されて正常に終了します。
この数秒の間も気になります。

よろしくお願いします。

151
デフォルトの名無しさん[sage]   投稿日:2017/01/04 03:14:24  ID:sO2gccKh.net
>149
> printf("%s",buf);に変更

%sは文字列のアドレスを引数として受けてそれを出力する
C言語で文字列とはNUL終端されたバイト列だが
SSL_readは文字列ではなく只のバイト列を扱うからNUL終端なんてしていない
そのために受信した文字列以上のおそらくbufの領域を越えて偶然にゼロに
出くわすまでprintfが出力しているんだろう

付け加えると、サーバーから送られてくるバイト列中にゼロが含まれていると
文字列として扱おうとしたprintfはそこまでで終わりと見做してしまう
例えば2ちゃんはたまにそんなHTMLを返してくることがあっていい加減な作りの
自作アプリなんかが途中までしか表示しないとかいう不具合を出す
コメント1件

152
149[sage]   投稿日:2017/01/04 03:47:33  ID:9INFfbdp.net(3)
>151
ありがとうございます。
初歩的なミスでお恥ずかしい。
バイナリデータとしてファイルに出力したところ正常に動作しました。(ファイルの内容にも問題ありませんでした)
恐らくマルチバイト文字の途中か何かで切れていたのでしょう。

153
デフォルトの名無しさん[sage]   投稿日:2017/01/04 08:50:07  ID:hKIlPOcN.net
マルチバイトなんか関係ない
> write(1, buf, read_size);を
> printf("%s",buf);に変更
すんなって事だよアホウ

154
デフォルトの名無しさん[sage]   投稿日:2017/01/04 09:47:31  ID:87+T0pXS.net
もしくは1.1sだな

155
デフォルトの名無しさん[sage]   投稿日:2017/01/04 09:53:13  ID:dvUWMEVx.net(3)
printf("%.*s", read_size, buf);  なら少しだけ
それでも read_size に至る途中に \0 あったら駄目だし
標準出力に送りたいんなら fwrite(buf, read_size, 1, stdout); こうなるかな

156
デフォルトの名無しさん[sage]   投稿日:2017/01/04 09:54:39  ID:dvUWMEVx.net(3)
元質問みてなかった わーすーれーてー

157
デフォルトの名無しさん[sage]   投稿日:2017/01/04 12:32:23  ID:xue+qv3N.net(2)
「んなこたーない」
っていつも書き込みする人がいるけど
もっと具体的な回答してほしい。

「んなこたーない」って答えるくらいだから何かしらの反論や回答持ってるんだろうけど
もっと具体的に言ってくれなきゃ分からない。
コメント3件

158
デフォルトの名無しさん[sage]   投稿日:2017/01/04 12:37:37  ID:FLMu+DIB.net
そういうのはとりあえず否定したいだけだからスルーでいいよ
回答なんか持って無いと思うし
コメント1件

159
デフォルトの名無しさん[sage]   投稿日:2017/01/04 13:56:51  ID:x5I82FL9.net
0x00がないと、どこまでもぉ って事だけで。

160
デフォルトの名無しさん[sage]   投稿日:2017/01/04 15:05:14  ID:CkccjIZ7.net
俺はとりあえずこんなのを提案する()


do {

memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size-1);
printf("%s",buf);

} while(read_size > 0);



do {

memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size);

for(int i=0; i < read_size; ++i){ printf("%c",buf[i]); }

} while(read_size > 0);

161
148[sage]   投稿日:2017/01/04 15:11:07  ID:8dyTsCQL.net(3)
>157
さすがにこれは説明要らんだろうと思うよ・・・。

「副作用完了点が2つ以上」って、 str++; str++; こんなのでアウトってことだからね。

162
デフォルトの名無しさん[sage]   投稿日:2017/01/04 17:51:37  ID:ku1IYB1y.net
んなこたーない

163
デフォルトの名無しさん[sage]   投稿日:2017/01/04 18:08:39  ID:issqqmbF.net
do while()って嫌いだから使わん

164
デフォルトの名無しさん[sage]   投稿日:2017/01/04 18:10:34  ID:dvUWMEVx.net(3)
マクロのおまじないでも?

#define FOO() do { あーだこーだ } while(0)

165
デフォルトの名無しさん[]   投稿日:2017/01/04 18:15:56  ID:pxTed+R/.net(2)
>147
言いたいことはわかる気がするが、その文面は明らかに間違っているでしょ。

エスパーすると、
「副作用完了点と副作用完了点の間で、同一の変数を複数回変更する」
と、鼻から悪魔、かな?

166
デフォルトの名無しさん[]   投稿日:2017/01/04 18:17:44  ID:pxTed+R/.net(2)
まだ甘いか。
「ある副作用完了点と、次の副作用完了点の間で、同一の変数を複数回変更する」
かな?

167
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/01/04 18:21:17  ID:83LRywdJ.net
gotoで地獄へ行くのをdo/break/whileに書き換えることができる。
...
goto hell;
...
goto hell;
...
hell: ...
return 0;
↓↓↓
do {
...
break;
...
break;
...
} while (0);
...
return 0;

168
デフォルトの名無しさん[sage]   投稿日:2017/01/04 19:49:00  ID:wOLmnoYC.net
>157
人としての最低限の知能を持ち合わせて調べ直せば本人なら気付くレベルの時しか言っていないのでいつも本人からの訂正レスを待っているのだが、
何故か絶対に自分の発言を撤回したがらないようだ

169
デフォルトの名無しさん[sage]   投稿日:2017/01/04 21:37:54  ID:lUhJzh+Z.net
言われた方は言われた方で同じこと思ってるんだろ。だから具体的に指摘しなきゃ話が進まない。

170
デフォルトの名無しさん[sage]   投稿日:2017/01/04 22:12:54  ID:zg5YylVI.net
ピンポイントで間違い指摘されてんだから自分こそ根拠を述べろよ。
「副作用完了点が2つ以上」なんてどこにもねーんだから。
わかないよ〜ホレホレって荒らしたいだけ?

171
デフォルトの名無しさん[sage]   投稿日:2017/01/04 22:45:56  ID:by3GIgBn.net
>157
さすがに >147-148 だと >147 の方に説明責任があると思う

172
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:27:27  ID:6PKdRVzk.net
MISRA-C研究会が書いている、MISRA-C 2004(C90) の本をみっちり、勉強しろ!

研究会のメンバーでさえ、規格に詳しい人がいないのだから、
日本人では、規格に詳しい人はいない

トヨタでも、MISRA-Cの遵守率が5%しかない。
こういう素人が作る、医療機関・産業機械は怖くて使えない。
アプリのバグで、すぐに人が死ぬ

コンパイラを作る方も、あやふやな解釈をしているから、
紛らわしい書き方を避けて、かなり安全に、コーディングしないと危険

極端に言えば、1文1文、分離して書くこと。
バグが多く出る箇所は主に、マクロ・複合文・型違いの3つ


173
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:45:39  ID:xue+qv3N.net(2)
> 勘違いしてないか?
とか
> 日本語おかしくないか?
とか言ってあげれば>147も自分の間違いに気づけたんじゃないかなって思う。
コメント2件

174
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:48:11  ID:NgyPecWp.net
お前らちょっと温泉でも行ってこい

175
デフォルトの名無しさん[sage]   投稿日:2017/01/04 23:48:33  ID:8dyTsCQL.net(3)
>173 ちっとも具体的じゃないが、それでいいの?正直なにが違うのかわからん。
(日本語としてはまったく問題ないしな。)
コメント1件

176
デフォルトの名無しさん[sage]   投稿日:2017/01/05 00:16:26  ID:kU82p3Tw.net
> >147
> 副作用完了点が二つ以上存在すること自体は問題ないだろ。
> 複数の副作用完了点で同じ変数を変更、参照するんのが問題なんだよ。
> 安易な気持ちで書き込みすんな。一生ROMってろ。

ネラーならこれくらい言えないとな。

>175
「んなこたーない」だけだと単に否定したいだけの書き込みみたいで、荒らしなのか普通の指摘なのか曖昧。
>158みたいに受け取る人もいるし。
>173は具体的じゃないけどまだましなほうでしょ。

177
デフォルトの名無しさん[sage]   投稿日:2017/01/05 07:15:07  ID:Tn1lGUp3.net(2)
副作用完了点が2つ以上あると鼻から悪魔
 ↓
× んなこたーない
○ 勘違いしてないか?

理由:「んなこたーない」だけだと単に否定したいだけの書き込みみたいで、荒らしなのか普通の指摘なのか曖昧

178
デフォルトの名無しさん[sage]   投稿日:2017/01/05 07:20:28  ID:IruuUmgl.net
一応技術板なので「んなこたーない」って言われたら鼻から悪魔の例を出せばすむ話
まあ例を考えてる時に自分の間違いに気づくと思うが...

179
デフォルトの名無しさん[sage]   投稿日:2017/01/05 07:35:58  ID:Tn1lGUp3.net(2)
嵐かどうかは別として間違いの指摘かどうか曖昧でわからない奴はヤバい

180
デフォルトの名無しさん[sage]   投稿日:2017/01/05 09:10:38  ID:yWb7mDiI.net(4)
if (*str++ && *str++ && *str++)
&& と if の条件式の終わりは副作用完了点だけど問題を起こすコードではない
※ 役にたつコードかはしらんw

181
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:34:50  ID:nSwRuxqn.net(3)
大学の授業で、client.cというファイルとserver.cのファイルを渡されて
このプログラムを解析して、何でも良いから通信するプログラムを作れと言われたんですが
何をやればいいのかさっぱりです。
サーバとクライアントでファイルが2つに分かれてるってことは
プログラミングのテストをするにも2台PCを持ってないとできないってことでしょうか
何でもいいのでアドバイスください。。。
コメント2件

182
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:37:47  ID:Xc98514b.net
>181
PC 1台でも出来ます
コメント1件

183
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:44:42  ID:yWb7mDiI.net(4)
server のプログラムを実行しておいて
接続先を 127.0.0.1 (または localhost) にした client のプログラムを実行すれば桶

後は実行OSの事情次第(FWの警告をスルーする等)

184
デフォルトの名無しさん[sage]   投稿日:2017/01/05 11:51:25  ID:33EuaIzL.net
>181
client.exe server.exe生成
→server.exeを起動し通信待機
→client.exeを起動し通信開始
でいいよ

185
デフォルトの名無しさん[]   投稿日:2017/01/05 11:55:16  ID:nSwRuxqn.net(3)
>182-184
親切にありがとうございます。
Linux環境でプログラムしているのですが
server.cをコンパイル&実行すると待機中のせいか何なのかわからないのですが
コンソール上で他のコマンドが打てなくなってしまうので2台PCが必要なのかと迷っていたのですが、1台でもできるのですね。
どうやったら待機中でもclientのコンパイル済みファイルを実行することができるのでしょうか。。
コメント2件

186
デフォルトの名無しさん[sage]   投稿日:2017/01/05 12:00:04  ID:CkAWate/.net
んなこたーない
って前々から他のC++スレでも使われていたけど、
自分からは何も根拠を示さず、ただ周りからの反論を煽りたいだけのレス
みたいな受け取られ方が少なからずされていたように感じるんだけど。

コミュニケーションって難しいな。

187
デフォルトの名無しさん[sage]   投稿日:2017/01/05 12:06:51  ID:yWb7mDiI.net(4)
>185
bash だったら
末尾に & つけて呼び出すとバックグランドで実行するみたいよー
# server [enter]
 : 待機中でだんまりさんw

# server & [enter]
 : すぐ次の入力待ちになる server は裏で実行中
#
コメント1件

188
デフォルトの名無しさん[sage]   投稿日:2017/01/05 12:25:39  ID:nSwRuxqn.net(3)
>187
できました!
ありがとうございます助かりました

189
デフォルトの名無しさん[sage]   投稿日:2017/01/05 13:10:33  ID:Goea0txf.net
nohup をつけるともっと幸せになれるよ

nohup server &

190
デフォルトの名無しさん[]   投稿日:2017/01/05 13:26:13  ID:NumGywN/.net
馬鹿がnohupなんか付けたらいつまでもプロセス残るだろ
不完全なサーバーアプリケーションのプロセスをいつまでも残すということは
セキュリティ的に問題外

191
デフォルトの名無しさん[]   投稿日:2017/01/05 14:20:26  ID:wksprrkU.net
0xFFFFFFの変数がif(n > 0)で真になるんだがなんだコレ?
クソムカツクな死ねよ
コメント2件

192
デフォルトの名無しさん[sage]   投稿日:2017/01/05 14:25:53  ID:yWb7mDiI.net(4)
64bit (2の補数の)符号付で 00FF FFFF は正なんだけど
48bit の符号付整数での比較を望んでいるんだろうか?

193
デフォルトの名無しさん[sage]   投稿日:2017/01/05 15:39:10  ID:60LIuvs1.net
48bitでも32bitでも正ですが


194
デフォルトの名無しさん[sage]   投稿日:2017/01/05 17:24:14  ID:5KDyH/yc.net
>191
何だこれと言われても言語仕様としか言いようがない
auto n = 0xFFFFFF;
if (n>0)//必ず真

195
デフォルトの名無しさん[sage]   投稿日:2017/01/05 18:52:01  ID:sOp8JEWl.net
逆になぜ偽になると思ったのかが知りたいな。

196
デフォルトの名無しさん[sage]   投稿日:2017/01/05 18:58:22  ID:25Qby3+x.net
auto n = 0xFFFFFF;
*reinterpret_cast<int*>(&n) > 0
コメント1件

197
デフォルトの名無しさん[sage]   投稿日:2017/01/05 19:26:42  ID:ivHnG5Le.net
int が 24bit ってダメなんだっけ?

198
デフォルトの名無しさん[sage]   投稿日:2017/01/05 19:41:33  ID:/zQeSTVL.net
あー あほしたー bit数を数え間違ってるし

199
デフォルトの名無しさん[sage]   投稿日:2017/01/05 21:38:57  ID:AK28m3f5.net
>196のオツムのレベルは>191と同等

200
デフォルトの名無しさん[sage]   投稿日:2017/01/05 23:28:47  ID:sjDvcQUe.net
>185
別の端末・別の仮想デスクトップなどを、起動すればいい

201
デフォルトの名無しさん[]   投稿日:2017/01/08 01:15:08  ID:+QuxnNhY.net(2)
■ 質問概要
ファイルに書き込んでも反映されない。

■ 環境
CentOS 6.4
GCC 4.4.7

■ 質問詳細
fopenに"r+"を指定して開いたファイルに、fputsでテキストデータを書き込んでも反映されません。
fcloseしていないことが、恐らく原因だと思います。
このアプリケーションは起動時にfopenでファイルを開いて常駐し、
アプリケーション終了時にfcloseするように開発しており、fcloseすると反映されます。
常駐型のアプリケーションで逐次ログ出力するため、
書き込むたびにファイルを開いたり閉じたりしないようにしています。
fcloseしなくても読み取りだけはできるようにしたいのです。
Apacheの挙動を見ると、ログファイルがこうした動作になっているようです。
(Apacheのソースは読んでいません、ログファイルを操作しようとした際の挙動などからによる推測です)
どうすればいいでしょうか。

調べたところ、fflushで希望の動作ができそうですが、
使い慣れてないものを使うのは副作用が怖く、
また、説明に「強制的」等の文言があるため、この文言があるだけでも非常に不安です。
こうした目的でfflushを利用しても問題ないのでしょうか。
そもそもfflushでいいのでしょうか。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/fflush.3.html
コメント1件

202
デフォルトの名無しさん[sage]   投稿日:2017/01/08 01:21:15  ID:Zdr2NPEX.net
大丈夫だから使え
コメント1件

203
デフォルトの名無しさん[sage]   投稿日:2017/01/08 01:24:31  ID:T3Q1+h8z.net
flushは時間がかかるから頻度が高い場合は気をつけて。

204
201[sage]   投稿日:2017/01/08 01:54:37  ID:+QuxnNhY.net(2)
>202-203
ありがとうございます。
時間がかかるんですね。
では、頻度が高い場合はfputsの度ではなく、
一定時間おきにfflushするように実装したいと思います。

205
デフォルトの名無しさん[]   投稿日:2017/01/08 03:35:33  ID:eh6WgorM.net(2)
A = (framecount / 10) % 4

すみません、上記の式の意味を教えてください。
毎度、Aに入る値がしりたいです。

206
デフォルトの名無しさん[sage]   投稿日:2017/01/08 03:39:14  ID:Nqw0FnK6.net
(framecount を 10 で割って) それの 4で割った余り 0〜3 の値になる

framecount
0〜 9 → 0
10〜19 → 1
20〜29 → 2
30〜39 → 3
40〜49 → 0
50〜59 → 1
:
コメント1件

207
デフォルトの名無しさん[]   投稿日:2017/01/08 03:43:39  ID:eh6WgorM.net(2)
>206
こんな深夜に即レス、感謝
ありがとうございます!

208
デフォルトの名無しさん[sage]   投稿日:2017/01/08 04:24:28  ID:c5pY166L.net(2)
>201-204
普通は、ファイルを閉じる際、自動的にflushされる

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

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

Linux I/O のお話 write 編
http://d.hatena.ne.jp/naoya/20070523/1179938637
コメント2件

209
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:20:03  ID:OpAcES4h.net(3)
char buffer[256];
scanf(%s,buffer);
printf(
コメント1件

210
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:28:02  ID:OpAcES4h.net(3)
すみません、誤送信してしまいました
質問させてください。

char buffer[256];
scanf(%s,buffer);
printf("finish---_n");
という記述で、文字入力をした後、何回リターンキーを押しても
finishが表示されない、つまりscanfが終了しないような状態になっているのですが
何か特別な条件でscanfが終了しないことってあるものなのでしょうか?
ちなみに、コードのscanfの行だけコメントアウトすると普通にfinishが表示される状態です。
あと、新規で.cファイルを作って短いコードにしてコンパイルしても問題なく動いてくれています。
コメント1件

211
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:43:58  ID:nyR751xv.net(5)
>210
問題が再現できる最少コード書いてみて
コンパイル通るコード
コメント1件

212
デフォルトの名無しさん[sage]   投稿日:2017/01/08 11:52:30  ID:OpAcES4h.net(3)
>211
先日も少し教えてもらったのでまた聞きに来てるのが恥ずかしいのあ
ですが、サーバとクライアントでの通信のプログラムです。

server.c
http://codepad.org/epmTQJ0
client.c
http://codepad.org/uhR4zEL3

gcc -o s server.c
gcc -o c client.c
./s&
./c
で実行しています。
サーバ側のscanfで止まってしまうみたいなのですが
サーバ側のscanfをコメントアウトすると通るみたいです。

213
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:07:20  ID:nyR751xv.net(5)
server側がnot foundだわ
リンク確認してみて
コメント1件

214
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:15:37  ID:9g4d0om9.net
>213
アップし直しました
http://codepad.org/ye5GDqp8
確認不足ですみません;;

215
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:35:39  ID:nyR751xv.net(5)
Wait for Connection...Connected.
s1---------
C->S: %s
Server:

実行結果はここで止まって
s2---------
まで進まないって事?
コメント1件

216
デフォルトの名無しさん[sage]   投稿日:2017/01/08 12:38:46  ID:Cjw+tP2S.net
>215
そうですね
Serverの後にscanfがあるので入力してみると

Server: uuu
aaaaa
iiii
uuu

とかになって、Enterキーを打っても次に進んでくれません

217
デフォルトの名無しさん[sage]   投稿日:2017/01/08 13:15:24  ID:nyR751xv.net(5)
送受信で変数を別々にしてみて
scanf -> sendはbuffer1
recv -> printfはbuffer2
みたいに

38, 39 40行目にブレークポイント置いてやってみて
コメント1件

218
デフォルトの名無しさん[sage]   投稿日:2017/01/08 13:46:50  ID:uGSXn6++.net(2)
サーバをフォアグラウンドにしてから入力すればいいだけな気がする。
いったんCtrl-zでクライアントを停止して「bg」でバックグラウンドで再開、
「jobs」でサーバのジョブIDを調べて「fg %[ジョブID]」してから入力すれば、
反応するんじゃないかな。
コメント1件

219
デフォルトの名無しさん[sage]   投稿日:2017/01/08 15:47:42  ID:/TmTqYIS.net
>217
ありがとうございます
やってみましたがどうもうまくいかなさそうです
>218
ありがとうございます。
いちおうやってみたのですが、ぼくがりしょしんしゃすぎてこうどなれすすぎてりかいできません(^q^)
バックグラウンドとフォアグラウンドの使い分けが良く分からないです。

手順を整理すると、
1. サーバをバックグラウンドで開始
2. クライアントをフォアグラウンドで開始
3. クライアントを停止
4. クライントをバックグラウンドで再開
5. サーバをフォアグラウンドで開始
6. クライントをフォアグラウンドで開始
ということでしょうか???頭がパーン!!
コメント1件

220
デフォルトの名無しさん[sage]   投稿日:2017/01/08 16:06:06  ID:nyR751xv.net(5)
>219
ブレークポイントが39で止まる
→続行して入力しても40のブレークポイントに来ない
こんな状況なの?
コメント1件

221
デフォルトの名無しさん[sage]   投稿日:2017/01/08 16:09:35  ID:uGSXn6++.net(2)
難しいようなら、&で起動するのはやめて、ターミナルを二つ起動して
片方でサーバを、もう片方でクライアントを実行するほうが楽だと思う。
コメント1件

222
デフォルトの名無しさん[sage]   投稿日:2017/01/08 16:24:16  ID:7aUjJ3jB.net
同意

223
デフォルトの名無しさん[sage]   投稿日:2017/01/08 17:02:49  ID:C9GVPqMv.net
>208
それレイヤーが違う話だよ

224
デフォルトの名無しさん[sage]   投稿日:2017/01/08 17:48:30  ID:bwuU6ymI.net
質問者の提示したURLに書かれている注意事項すら読まない奴を相手にレスするとは

225
デフォルトの名無しさん[sage]   投稿日:2017/01/08 19:21:35  ID:d7tAym4Y.net
>220
そんな感じでした
>221-222
ターミナル2つ起動したら簡単にできました。。
ターミナルって2つ開いて操作したりするものだったんですね
Linux初心者すぎて分かってませんでした
助かりましたありがとうございます

226
デフォルトの名無しさん[sage]   投稿日:2017/01/08 22:54:37  ID:c5pY166L.net(2)
端末も複数、起動できる

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

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

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

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?

それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった
コメント1件

227
デフォルトの名無しさん[sage]   投稿日:2017/01/11 13:06:08  ID:X1FDgEas.net
>208といい>226といい、わざと嘘を書いてるのか?

228
デフォルトの名無しさん[]   投稿日:2017/01/12 04:36:13  ID:8CizHZGj.net
MSVCはいつまで__cplusplusの定義199711Lのままなんだ

229
デフォルトの名無しさん[sage]   投稿日:2017/01/12 07:09:10  ID:edOk7o4H.net
変えると暴動が起きるこら変えない
とライブラリ開発者のSTL氏が言っていた

230
デフォルトの名無しさん[sage]   投稿日:2017/01/12 12:09:34  ID:xegpw56Z.net
1だと思ってた

231
デフォルトの名無しさん[sage]   投稿日:2017/01/15 00:31:14  ID:7/DzGkQz.net(2)
別ファイルで作成した関数を使用するときは、そのヘッダーファイルの
インクルードだけでなくプロトタイプ宣言も必要ですか?
インクルードだけでもコンパイルは通るし実行も出来るのですが、
そういう警告が出てくるので気になりました

232
デフォルトの名無しさん[sage]   投稿日:2017/01/15 00:34:44  ID:H7ag5TAh.net
警告文をコピペしてくれると話が早いような

233
デフォルトの名無しさん[sage]   投稿日:2017/01/15 00:51:14  ID:e3PYrJk6.net
そのヘッダーファイルの中でプロトタイプ宣言はされているんじゃないのか
警告の原因は別のことだろ

234
デフォルトの名無しさん[sage]   投稿日:2017/01/15 01:02:35  ID:7/DzGkQz.net(2)
インクルードするファイルを間違えてたみたいです
お騒がせしました

235
デフォルトの名無しさん[sage]   投稿日:2017/01/19 22:46:56  ID:knltoro2.net
新しくクラスとそれに関連した処理などを実装するとき
ヘッダー側でクラスの定義、ソースファイル側にクラス内のメンバ関数の実装部などを書きますよね
その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか? たとえば

//ヘッダー側です
class A{
private:
 int num;
public:
 int ReturnNum(void){
  return num;
 }
};

処理はたった一行ですけどこの場合もint ReturnNum()の実装部はソースファイル側にint A::ReturnNum()のように移すべきですか?
ネット上のプログラムをいくつか見てみたらこのようにメンバ変数をただ返すだけの処理ならヘッダー側に書いてあるものも少なくなかったのでどっちが好ましいんだろうと気になりました
コメント1件

236
デフォルトの名無しさん[sage]   投稿日:2017/01/19 23:08:04  ID:ipEwSksA.net
プログラムは普通すべて「ソースファイル」に書くものです
「ヘッダー」に書くのはコンパイラー開発者だけです

237
デフォルトの名無しさん[sage]   投稿日:2017/01/19 23:11:24  ID:ydMYZ/gE.net
クラスもヘッダに書きますけどぉ

238
デフォルトの名無しさん[sage]   投稿日:2017/01/19 23:55:32  ID:A0Yl7Ujc.net
> その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか?
別にどんな場合でもソース側に書くというわけではない

ヘッダに書くのもソースに書くのも一長一短はあり絶対的にどっちがいいというものではない
君が違いを理解し何を重視するかを意識すれば
君にとってどっちが好ましいかは自然とはっきりする

239
デフォルトの名無しさん[]   投稿日:2017/01/20 00:23:32  ID:7sj2OAGi.net
なんか禅問答が始まったかと思ったわ

240
デフォルトの名無しさん[sage]   投稿日:2017/01/20 01:12:20  ID:/ixeQkYS.net
短いメソッドなら、ヘッダに、inline 指定して書くと、
関数化せずに、inline にしてくれる可能性が高い

まあ、言語では保証していないけど。コンパイラ依存
コメント1件

241
デフォルトの名無しさん[]   投稿日:2017/01/20 05:11:02  ID:vaOLIJJw.net
クラス定義で定義されたメンバ関数は暗黙にinlineになるね。
(『プログラミング言語C++第4版』p.464 16.2.8 クラス内関数定義)

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


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

class SomeClass {
public:
  int a();
private:
  int a_;
}

inline int SomeClass::a() // 明示的にinline指定
{
  return a_;
}

と書く方法も載ってた。 >240 は後者の説明だったのね。

242
デフォルトの名無しさん[sage]   投稿日:2017/01/20 07:10:06  ID:Nvso2zBq.net
>235
本体側に書くのが原則 特にシステムが大きくなる場合
よほどの理由がある場合(インライン化して高速化するなど)はヘッダに書くこともある

243
デフォルトの名無しさん[sage]   投稿日:2017/01/20 08:09:40  ID:B05iL6IP.net
『〜のが原則』
『理由がある場合〜こともある』
俺の会社のルールは世界普遍的 思考

244
デフォルトの名無しさん[sage]   投稿日:2017/01/20 16:53:52  ID:abKD9bRi.net(3)
inlineにするのはほとんどその時の気分みたいな?
なんかマクロみたいだな。inlineにすっかみたいな。
コメント1件

245
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/01/20 17:10:04  ID:XdmbS/hB.net
>244
関数呼び出しのオーバーヘッドの回避と、定数畳み込みなどの最適化が期待できる場合にインライン化する。
コメント2件

246
デフォルトの名無しさん[sage]   投稿日:2017/01/20 17:38:00  ID:abKD9bRi.net(3)
>245
そんな感じ


247
デフォルトの名無しさん[sage]   投稿日:2017/01/20 20:04:23  ID:1c/0Zcpc.net
>245
インラインにしても劇的に速くなった経験が無いんですが、コツは有りますか?

248
デフォルトの名無しさん[sage]   投稿日:2017/01/20 20:57:25  ID:pNkrp0ep.net
効果が出るのは
・小さい
かつ
・短時間に非常に多数呼び出される
関数だけだよ。
しかも、まず劇的ではない。

249
デフォルトの名無しさん[]   投稿日:2017/01/20 21:15:10  ID:esT1VQmf.net(3)
inlineキーワードはヘッダに実装書くときなどに使用するものでインライン展開を狙った最適化の為に書くものではない
コメント2件

250
デフォルトの名無しさん[sage]   投稿日:2017/01/20 21:15:23  ID:abKD9bRi.net(3)
もしかしてコンパイラの方で展開してるとか はないかなぁw

251
デフォルトの名無しさん[sage]   投稿日:2017/01/20 21:57:28  ID:aetIobRP.net
>249
インライン関数の話の途中でinlineキーワードの関数の話を始めて、いきなりどうした

252
デフォルトの名無しさん[sage]   投稿日:2017/01/20 22:07:56  ID:CICAdfuU.net
>249
上にもあるけどヘッダに実装書いたら暗黙でインライン指定されるから、そこにinlineキーワードを使用するのは無意味
やはりinlineは最適化のためでしょう
コメント1件

253
デフォルトの名無しさん[sage]   投稿日:2017/01/20 23:11:34  ID:LsENUQp+.net(2)
ベクトルとか行列のライブラリを使った時は全部インラインにしたな
1/60秒にかなりの回数呼ぶし
ライブラリとかもインラインで書かれてる

254
デフォルトの名無しさん[sage]   投稿日:2017/01/20 23:12:36  ID:LsENUQp+.net(2)
×使った ??作った

255
デフォルトの名無しさん[]   投稿日:2017/01/20 23:27:28  ID:esT1VQmf.net(3)
>252
んなわけない
コメント1件

256
デフォルトの名無しさん[sage]   投稿日:2017/01/20 23:34:20  ID:ITfb1kXg.net
>255
んなこたーない

257
デフォルトの名無しさん[]   投稿日:2017/01/20 23:36:05  ID:esT1VQmf.net(3)
ヘッダに書いたら暗黙でinlineって
#includeの機能しらんとしか思えないんだが

258
デフォルトの名無しさん[sage]   投稿日:2017/01/21 00:40:48  ID:dThE4/1u.net
ちょと混じっちゃったね。
関数を定義されたヘッダーが複数のソースに呼ばれちゃったら、実体が
いっぱい出来ちゃうもんね。

259
デフォルトの名無しさん[sage]   投稿日:2017/01/21 01:48:12  ID:RmTA4cQd.net
江添はなんて言ってる?

260
デフォルトの名無しさん[sage]   投稿日:2017/01/21 07:06:45  ID:5NCJ8rOL.net
forceを信じるのだ

261
デフォルトの名無しさん[sage]   投稿日:2017/01/21 08:35:23  ID:P1/rV56D.net
インライン関数はODR回避のためだと思っていた
C++17(予定)のインライン変数もそんな感じ
コメント1件

262
デフォルトの名無しさん[sage]   投稿日:2017/01/21 11:00:41  ID:wrzS/cSB.net
ODRって何?

263
デフォルトの名無しさん[sage]   投稿日:2017/01/21 11:17:05  ID:J7ipYv9j.net(2)
単一定義則 One Definition Rule の略語

264
263[sage]   投稿日:2017/01/21 19:43:36  ID:J7ipYv9j.net(2)
「単一定義規則」の方が検索にかかりやすい言葉かも。

265
デフォルトの名無しさん[sage]   投稿日:2017/01/22 08:28:10  ID:5o7PrILb.net
>261
そうそう。最適化目的でinline付けても普通無視されるからね。

266
デフォルトの名無しさん[sage]   投稿日:2017/01/22 14:37:23  ID:hBhrTyQG.net

267
デフォルトの名無しさん[]   投稿日:2017/01/24 12:50:54  ID:ZplzBBh2.net(2)
Windows上で、APIを使わずに、コマンドプロンプト上だけで結果が
ほしいような、C言語のプログラムを作るのに便利な開発環境はありますか?
VIsualStudioは重すぎてあまり使いたくありません。
どうぞよろしくお願いします。
コメント2件

268
デフォルトの名無しさん[sage]   投稿日:2017/01/24 13:20:58  ID:qjTW56fl.net(2)
msys2

269
デフォルトの名無しさん[]   投稿日:2017/01/24 13:39:24  ID:ZplzBBh2.net(2)
msysって、どういうものですか?
コメント1件

270
デフォルトの名無しさん[sage]   投稿日:2017/01/24 13:58:35  ID:qjTW56fl.net(2)
>269
コンパイラツールチェインとターミナルとライブラリ管理のパッケージツールを纏めたものです
エディタは無いし ビルドツールはautotoolsとかcmakeとかを使います
ただ単体ファイルをコンパイルして実行するだけなら
gccを叩くだけなので ご要望に沿うかと

271
デフォルトの名無しさん[sage]   投稿日:2017/01/24 14:14:08  ID:tjYeiy24.net
重いのがイヤなら code::blocks はどうかね
http://demura.net/lecture/12713.html

272
デフォルトの名無しさん[sage]   投稿日:2017/01/24 20:33:35  ID:bAAm8CCs.net
>267
自分もvisual studio が重いのと好きなエディタ使いたいのと、
でもGUIでファイル管理とかコンパイルエラー行へのジャンプをしたかったの自分でそういうツールを作った。TTVC Developer っていうのだけど
ネット上に公開してるけど反応無いので本当に良くできてるかどうかは
わからんが、自分的には便利だとは思ってる

273
デフォルトの名無しさん[sage]   投稿日:2017/01/24 20:39:04  ID:2gaKjsEX.net
俺はqt creator使ってるな
VSよりマシってくらいだが

274
デフォルトの名無しさん[sage]   投稿日:2017/01/24 20:46:07  ID:HHZbO6eg.net
>267
notepad.exe
cl.exe
link.exe

275
デフォルトの名無しさん[]   投稿日:2017/01/24 21:22:57  ID:nvNd8iP1.net
Bash on Ubuntu on Windws

276
デフォルトの名無しさん[sage]   投稿日:2017/01/24 21:41:00  ID:1ohBhH6C.net
あれβとれたっけ?

277
デフォルトの名無しさん[sage]   投稿日:2017/01/27 01:10:08  ID:c6wkRwWW.net(2)
*p++ って 参照してからインクリメントですよね。
某書に*(p++)と等価って書いてあったけど。
ん 同じか

278
デフォルトの名無しさん[sage]   投稿日:2017/01/27 01:47:57  ID:JFq0FevS.net
同じだよ
その括弧かあってもなくても実際にインクリメントがされるタイミングには影響しない

279
デフォルトの名無しさん[sage]   投稿日:2017/01/27 02:43:45  ID:c6wkRwWW.net(2)
すまん 評価してからインクリメントは同じだもんね。
コメント1件

280
デフォルトの名無しさん[sage]   投稿日:2017/01/28 22:24:20  ID:fbuNIeJW.net
>279
いいってことよ

何気に愉快なIDだな

281
デフォルトの名無しさん[sage]   投稿日:2017/01/29 14:28:58  ID:XKehhdE4.net(3)
質問です。
VisualStudio2015でReleaseビルドをしていたところ、生成されたEXEに気になる点がありました

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

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

到達不能なのが明らかな部分は最適化で削除されるものだと思っていたのですが、何かしらの私の不手際でしょうか?
最適化は /O2オプションです
コメント3件

282
デフォルトの名無しさん[sage]   投稿日:2017/01/29 15:19:11  ID:DfD+S+Qh.net
>281
/O4とかは?
コメント1件

283
デフォルトの名無しさん[sage]   投稿日:2017/01/29 15:31:20  ID:2ZaFXkbr.net
オプションによる不確定なものをどうして不手際と思ったのか謎
/O2 /GF-なら残る可能性高いし
コメント1件

284
デフォルトの名無しさん[sage]   投稿日:2017/01/29 17:04:30  ID:XKehhdE4.net(3)
アドバイスありがとうございます

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

>283
「不要なコードを削る」というのは、一番単純で効果が高そうなので、まっさきに確実に全除去してくれるだろうと思い込んでいたためです
この手のコードが最適化で消えないと、ifdefだらけになりそうなのですが、何か対策はないものでしょうか?

285
デフォルトの名無しさん[sage]   投稿日:2017/01/29 18:59:23  ID:K+/fnyLa.net
何かの理由があって残してるという事はないのかな・・・
コメント1件

286
デフォルトの名無しさん[sage]   投稿日:2017/01/29 19:49:35  ID:6wGEJq5M.net
>281
普通に削除されて文字列もなくなるけど?

287
デフォルトの名無しさん[sage]   投稿日:2017/01/29 23:12:58  ID:XKehhdE4.net(3)
>285-286
ご返答ありがとうございます。

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

int main()
{
char text[] = "foofoo";
printf("hogehoge");
if (false) { printf(text); }
return 0;
}

こうすると以下の挙動になります。
このまま: exeにhogehoge, foofooの両方が含まれているのを確認できる
printf("hogehoge");を削除: hogehoge, foofooの両方がEXEから消える
※単に0を返すだけの結果固定関数になるため、変数の割り当てすらしなくなるから?

288
デフォルトの名無しさん[sage]   投稿日:2017/01/29 23:42:21  ID:DuISdTe+.net
VS2015の環境を持っていないんで見当違いかも知れんが…。

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

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


もちろんprintf(&quot;hogehoge&quot;)を呼び出しても
引数になってないtextが読み書きされるはずはないんだけど。
コメント1件

289
デフォルトの名無しさん[sage]   投稿日:2017/01/30 00:05:47  ID:iVXSa+56.net
>288
アドバイスありがとうございます
すいません。最小コードといいつつincludeをきちんと書いておりませんでした
#include <stdio.h>を最初に書いております
cstdioに変えてみて、各種パターンやってみましたが、変化は見られませんでした

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

printfが、中でスタック消費量でも利用しているのかな…と馬鹿なことを考えて
char text〜をグローバル空間に出してみましたが、foofooは消えずです
コメント1件

290
デフォルトの名無しさん[sage]   投稿日:2017/01/30 13:26:01  ID:NFw8h2uH.net
>289
グローバル変数にするのは最適化されにくくなるだけ。
とりあえずこれで

#include <stdio.h>
int main(){
printf("hogehoge");
if(false){
printf("foofoo");
}
return 0;
}

データセグメントが消えるかどうかは最適化の
目的じゃないと思うが、"foofoo"が残るか見てみると

VS2015
cl /Ox /Fa hoge.cpp きえない
cl /O1 /Fa hoge.cpp きえた
cl /O2 /Fa hoge.cpp きえた

GCC-3.4.5
gcc -S hoge.cpp きえた

まあ所詮VC

291
デフォルトの名無しさん[sage]   投稿日:2017/01/30 17:50:38  ID:X+M9ocjS.net
つまり>281は嘘つきってこと?

292
デフォルトの名無しさん[sage]   投稿日:2017/01/30 19:47:42  ID:p0U51Ig/.net
exeの中身まで気が回りませんわ

293
デフォルトの名無しさん[sage]   投稿日:2017/01/30 22:08:56  ID:mpXbeHjF.net
exeにビルド時のフルパスが埋め込まれてるとイラっとする

294
デフォルトの名無しさん[]   投稿日:2017/01/30 22:20:13  ID:XMGcU10o.net
デバッグビルドなら普通でしょ

295
デフォルトの名無しさん[sage]   投稿日:2017/01/31 02:46:33  ID:SZ8YrWi+.net
リリースビルドにして、最適化オプションを指定すれば?

296
デフォルトの名無しさん[sage]   投稿日:2017/01/31 09:17:11  ID:r8Cb1+5o.net
デバッグ情報を含めなければいいだけだしな

297
デフォルトの名無しさん[sage]   投稿日:2017/02/01 01:15:31  ID:lC8eLy+G.net
あるクラスに引数で渡されるオブジェクトのconstではない参照を持ちたいんですけどどのようにやればいいでしょうか
ポインタはなるべく使いたくないのですが
class A {
public:
void setParam(Param&);
private:
Param& m_param;
}
状況としては
あるクラスBがクラスAみたいなParamの参照を持つクラスを複数持っていて
クラスBがvector<Param>でParamの実体を持っているという感じです
コメント1件

298
デフォルトの名無しさん[sage]   投稿日:2017/02/01 01:25:10  ID:V+KME3Sb.net(2)
ライフタイムと循環参照のもたらす悪夢を
全部避けられるように熟考しながら
shared_ptr / weak_ptr をどうぞ
Welcome to C++ nightmare!!
コメント1件

299
デフォルトの名無しさん[]   投稿日:2017/02/01 01:36:32  ID:nwC60mRJ.net
shared_ptrの何が難しいのか判らん。
shared_ptr程度で悪夢とか言ってたらswiftも使えなくない?

300
デフォルトの名無しさん[sage]   投稿日:2017/02/01 02:15:37  ID:V+KME3Sb.net(2)
まぁ良く調べて使ってねってのを脅し効かせた程度です 
他の言語で参照カウント型のsmart_ptr解ってるなら 確かに大丈夫

301
デフォルトの名無しさん[sage]   投稿日:2017/02/01 12:17:29  ID:RxSebrTI.net(3)
Windows10でBluetoothを使ったCOM通信を行いたく、
プログラムのほうはCOMポート通信のつもりで書き、
OSの設定でBluetoothに仮想COMポートを追加しました。

Androidとは問題なく接続・通信できたのですが、
Windows10同士ではうまくいきませんでした。
これは仮想COMポート作成するときに、どちらのPCも「受信」(相手側が接続を開始する)にしていたからだと思い、
片方を「送信」に変更しようとしました。
しかし、この場合は接続先PCを指定しなくてはならないのですが
対象PCが選択リスト内に出てこなくて作成することができません。
ペアリングはできているにもかかわらずです。

どうすればWin10PC同士でBluetoothを介したCOMポート接続・通信ができるでしょうか?

302
デフォルトの名無しさん[sage]   投稿日:2017/02/01 12:30:13  ID:HL/HxBhd.net(2)
直接の解はわからないけど、ぐぐって見つかったので確認
ポート開くとき "\\\\.\\COM○○" (○は数字 \はエスケープ込み)
って開いてる?

ポート番号が1桁の場合に限り "COM○"でも開けるらしいけど、
そのコードの延長で 2桁渡すとそれは開けないから
コメント1件

303
301[sage]   投稿日:2017/02/01 12:49:42  ID:RxSebrTI.net(3)
>302
あ、はい。それはやってます。

今、わかったのですが、
一旦ペアリングを解除して、改めて「送信」COMポートを追加しようとすると、
先程までペアリングしていた対象PCが選択できるようになりました。

しかし今度は「選択されたデバイスでシリアルポートサービスが実行されていません。」と出て作成されません。
相手側に「受信」のCOMポートは作成済みなのですが…。

304
デフォルトの名無しさん[sage]   投稿日:2017/02/01 13:25:07  ID:HL/HxBhd.net(2)
http://kokufu.blogspot.jp/2014/02/windows-bluetooth-spp-server.html
これとかの雰囲気だと
「受信」で作った側のPCのソフトを先に立ち上げて接続待ちにして(SPPサーバー)
「送信」で作った側のPCを後追いで接続 かなぁ
力になれなくてすまん
コメント1件

305
301[sage]   投稿日:2017/02/01 14:06:25  ID:RxSebrTI.net(3)
>304
いえいえ!
色々と調べていただいて参考になりました。

どうもシリアル接続サービスをサポートしていないようです。
今回の条件ではあまり好ましくないのですが、
WiFiを使ったソケット通信で妥協することにします。

ありがとうございました。

306
デフォルトの名無しさん[sage]   投稿日:2017/02/01 14:21:22  ID:+8V+I8xy.net
>298-300
ありがとうございます
帰ったら勉強してみます

307
デフォルトの名無しさん[]   投稿日:2017/02/01 20:39:39  ID:3j6uP7e4.net
>297
参照をメンバで持ちたい時は、コンストラクタでの初期化以外は無理。

class A {
public:
A(Param& x):m_param(x){}
private:
Param& m_param;
};

308
デフォルトの名無しさん[sage]   投稿日:2017/02/02 01:04:42  ID:CAgg+EtY.net(2)
shared_ptr,weak_ptrのことで質問なのですが
自クラス2つを引数に取る+演算子をオーバーロードしているクラスMatrixを使って
func(std::weak_ptr<Matrix> m1, std::weak_ptr<Matrix> m2){
mat = m1 * m2;

}
みたいにやりたいんですが、オペランドに一致する演算子がないと言われます
shared_ptr,weak_ptrに入れた場合どのようにしてオーバーロードされた演算子を利用できますか?
コメント1件

309
デフォルトの名無しさん[sage]   投稿日:2017/02/02 01:27:35  ID:FXYEZ0RW.net
>308
weak_ptr から shared_ptr を作って、それを通して参照すればいい
・・・んだけど、それ weak_ptr::expired() な場合にどうするつもりなん?
コメント1件

310
デフォルトの名無しさん[sage]   投稿日:2017/02/02 02:04:10  ID:CAgg+EtY.net(2)
>309
ありがとうございます
weak_ptrを使っている理由は
funcはあるクラスのメンバ関数で、引数で渡されたポインタの所有権をクラスが持たないこと示すためにweak_ptrを使っているのですが
weak_ptr::expired()な場合は想定していません
コメント1件

311
デフォルトの名無しさん[]   投稿日:2017/02/02 02:21:14  ID:ExAPXdhA.net
>310
なんか根本的に勘違いしてる感が
const referenceの関数見たら中でポインタ持ち続けちゃう心配とかしてんの?

312
デフォルトの名無しさん[sage]   投稿日:2017/02/02 02:21:18  ID:EB2HJN86.net
スマートポインタはポインタのように振る舞うものだから
*や->でポインタの指す値にしなければならないよ

313
デフォルトの名無しさん[sage]   投稿日:2017/02/02 10:51:03  ID:335RX4F5.net
VS2015で.objを.libに変換してリンクできなくて悩んでいます
そういうことはできないのでしょうか?


複数のC++ファイルをビルド→.objが複数できる

新しいEXEプロジェクト作る→main()を用意→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで正常な.exeできる(exeサイズ10MB)
 include方法は<Object Include="abc1.obj" /> <Object Include="abc2.obj" />・・・

新しいスタティックライブラリプロジェクト作る→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで.libができる(libサイズ100MB)
→新しいEXEプロジェクト作る→main()を用意→追加のライブラリで.libをリンクする→ビルドで動かない.exeできる(exeサイズ1MB)

動かない.exeのビルド時はリンカーエラーなど出ません
exeサイズが期待しているよりも小さく、実行時に例外で強制終了します
コメント1件

314
デフォルトの名無しさん[sage]   投稿日:2017/02/02 12:49:56  ID:cH1kwi7M.net
例外を具体的に
コメント1件

315
デフォルトの名無しさん[sage]   投稿日:2017/02/02 13:18:13  ID:Nq0thOwX.net
>314
> ハンドルされない例外がスローされました:読み取りアクセス違反。
> xxxxx が nullptr でした。
xxxxxはポインタ変数

exeサイズが小さいからリンクできてるように見えてリンクできてないのかなとは思うけど
libの追加方法を#pragma comment(lib,"")にしてもうまくいかずでどうしたらいいものか

316
デフォルトの名無しさん[sage]   投稿日:2017/02/02 18:40:08  ID:qO0hDPsp.net
>313
> vcxprojを編集して複数の.objをincludeする
なんか色々勘違いしてないか?
コメント2件

317
デフォルトの名無しさん[]   投稿日:2017/02/02 18:48:07  ID:S7kpFPUA.net
>316
そういう実験してるんでしょ。
それを他人に聞いて何か返ってくると思ってるのが間違ってる感があるけど。
コメント1件

318
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:11:39  ID:Eu4e1EaI.net(2)
>316
objからlibを作って動くならそれがいいのだけどその方法が分からない
lib.exeでobjからlibを作って使っても同じ状況

319
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:16:04  ID:WkIFQVuy.net(2)
>317
普通とは違うことをしているなと思ったが、実験しているのか
vcxprojを編集してソースコードではなくobjを用いるVSプロジェクトを作りたいのかな

320
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:18:03  ID:qhXDtbED.net
.c, .cpp から .lib 作るプロジェクト -(A)
そいつをリンクしつつ、 .c, .cpp から実行ファイルを作るプロジェクト -(B)
(参照設定とか依存関係とかで (A) を使うぜ俺 って指定する)
コメント1件

321
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:38:57  ID:WkIFQVuy.net(2)
こんな感じだろ
ソースからobj生成: VSプロジェクトでなくていい
VSプロジェクト
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからず)
3. 上のlibからexe作るVSプロジェクト (exeが例外でNG)
コメント1件

322
デフォルトの名無しさん[sage]   投稿日:2017/02/02 19:51:53  ID:Eu4e1EaI.net(2)
>321
まさにその状態
>320の(A)が作れればいいけど、objファイルは数百プロジェクトの600ファイルぐらいあるから試そうにも数日かかりそうで避けたい
今は全プロジェクトまとめたソリューションあるけどリビルドだけで1時間以上かかる。簡単にexe作れるようにしたいというのが原点

323
デフォルトの名無しさん[sage]   投稿日:2017/02/02 20:22:53  ID:k638XiO/.net
そこまで行ったらDLLに分けるだろう

324
313[sage]   投稿日:2017/02/03 13:56:09  ID:3xPmzf3n.net(2)
4番をやってみましたが結果OKでした
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからないが、4がOKで作れてる可能性高い)
3. 2のlibからexe作るVSプロジェクト (exeが例外でNG)
4. 2のlibからobjを抽出して、そのobjからexe作るVSプロジェクト (結果OK)

作業の前提条件として下の2つは意味が同じと思っているのですが、違いがあるのでしょうか?
cppをコンパイルしてobjにし、objをリンクしてexeを作る
cppをコンパイルしてobjにし、objをlibに変換してからリンクしてexeを作る
コメント1件

325
デフォルトの名無しさん[sage]   投稿日:2017/02/03 13:56:30  ID:OeN1TpCU.net
Ubuntu16.04,gcc5.4.0で,書籍を参考に下記のプログラムを
コンパイル(gcc program.c -lalut -s -o program)したところ,
「'nullptr' was not declared in this scope」というエラーになりました
何が間違っているのか教えてください

---program---
#include<AL/al.h>
#include<AL/alc.h>

int main() {
//OpenAlの初期化
//デバイスを開く
ALCdevice* device = alcOpenDevice(nullptr);

//コンテキストを生成
ALCcontext* context = alcCreateContext(device, nullptr);

//生成したコンテキストを操作対象にする
alcMakeContextCurrent(context);

//OpenALの後始末
//操作対象のコンテキストを解除
alcMakeContextCurrent(nullptr);

//コンテキストを破棄
alcDestroyContext(context);

//デバイスを閉じる
alcCloseDevice(device);
}

326
デフォルトの名無しさん[sage]   投稿日:2017/02/03 14:06:26  ID:S9UE3yae.net
nullptrはC++11からの機能だからですね
"gcc" -> "g++ --std=c++11"を使ってください

元のコンパイルは-lalutを指定していますが
そのプログラムならOpenALだけで大丈夫なので 下記で通ります
ライブラリをpkg-configに探させてるだけです

g++ --std=c++11 program.c `pkg-config openal --libs` -o program
コメント1件

327
デフォルトの名無しさん[sage]   投稿日:2017/02/03 14:55:43  ID:xVLuMTde.net
>324
一般論で言えば同じはず。
ファイルサイズが小さいのなら正常にリンクできてない。
使ってない関数やクラスをリンクしてるわけじゃないよね
コメント1件

328
デフォルトの名無しさん[sage]   投稿日:2017/02/03 15:42:48  ID:3xPmzf3n.net(2)
>327
使ってるのも使ってないのもある

libの追加方法は二通り試したけどどちらもビルドエラーはでないけど実行時NG
どちらもlibの追加を省略すると外部シンボルが見つからないエラーでビルドが通らない

プロジェクトのプロパティの「追加の依存ファイル」から→実行時NG
ソースファイル中に「#pragma comment(lib,"")」から→実行時NG

329
デフォルトの名無しさん[]   投稿日:2017/02/04 00:14:20  ID:z/XsYQOx.net
何もしていない普通の一般人の自宅に隠しカメラを取り付け
それをネットでリアルタイム配信

仲間という人間に対する盗聴盗撮生ネット配信の会

しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる

そんなことが今この国では行われています

330
デフォルトの名無しさん[sage]   投稿日:2017/02/04 05:54:43  ID:/r5Uxr2+.net
libでリンク解決してもダイナミックリンクにしてれば実行時にパス内に見つからずにエラー
スタティックリンクにしないと
コメント1件

331
デフォルトの名無しさん[sage]   投稿日:2017/02/04 09:51:58  ID:GdM1I4zb.net(2)
久々にプログラミングしようと思うんですけど
USBカメラがあるからそれを使って監視カメラにしたいんだが
ピクセルデータが取れればあとは簡単だと思うんだけど、その前に
この適当に昔買ったバッファローのUSBからデータ取り出す事って可能なんですか?
コメント1件

332
デフォルトの名無しさん[sage]   投稿日:2017/02/04 10:24:35  ID:94H9RTyk.net
>330
lib作るときのプロジェクトタイプはスタティックライブラリにしているけど、それとは別に設定であるのでしょうか?

>331
「usbカメラ キャプチャ c++」で検索すると色々な方法が見つかるよ。よほど変なカメラ出ない限り仕様は同じだから使える
コメント1件

333
デフォルトの名無しさん[sage]   投稿日:2017/02/04 10:55:19  ID:GdM1I4zb.net(2)
>332
ありがとうございますだ

334
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:25:32  ID:uqEM2LY/.net(2)
int a = 0;
int *b = &(1+a);
これが出来ないのはなぜですか?
1+aの計算結果というのはメモリ上のどこかにあると思うんですが
コメント3件

335
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/02/04 21:28:28  ID:sK4bvJ1n.net
>334
CPUのレジスタには物理アドレスが無い。
コメント1件

336
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:31:18  ID:3pCbKNVT.net
&1 を許すとややこしいことになりそうだ

337
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:38:25  ID:wIflvrKT.net
>334
計算結果はレジスタに入っててメモリには入ってないんじゃない?

338
デフォルトの名無しさん[sage]   投稿日:2017/02/04 21:52:37  ID:uqEM2LY/.net(2)
>335-337
なるほど、勘違いしてました
ありがとうございます
コメント1件

339
デフォルトの名無しさん[sage]   投稿日:2017/02/05 19:35:43  ID:ktep0Dpi.net
>326
遅くなりすいません
できました
ありがとうございました

340
デフォルトの名無しさん[sage]   投稿日:2017/02/05 22:43:20  ID:F2ePDpTS.net
>337
レジスタがメモリじゃないかのようなアホレスだな

341
デフォルトの名無しさん[sage]   投稿日:2017/02/05 23:03:58  ID:wagcFIA6.net
レジスタのアドレスって・・・

342
デフォルトの名無しさん[sage]   投稿日:2017/02/06 01:31:32  ID:DI3VdQ+9.net
アドレスのないレジスタはCでアクセスできないからな
アセンブリでしてねになるからね

343
デフォルトの名無しさん[]   投稿日:2017/02/06 03:41:00  ID:oG8S/cPb.net(2)
って言うかレジスタ関係なくね?
右辺値に対してアドレス取ろうとしてるから駄目なわけで。

344
デフォルトの名無しさん[sage]   投稿日:2017/02/06 05:58:55  ID:GvVdGH4O.net
>334 の質問に対して「右辺値」を出すのは大げさじゃないかな。
もちろん正しいんだけど、詳細に踏み込みすぎというか、
その話はもっと理解が深まってから、というか。

「過去に自分がこの疑問を持ったときに、どんな説明をされたら
すっきり腑に落ちて先に進めただろうか」と思い返しながら回答してるんだろう。
コメント1件

345
デフォルトの名無しさん[sage]   投稿日:2017/02/06 08:21:18  ID:87jFG7WV.net
そもそも >338 で本人納得してるのに
> レジスタがメモリじゃないかのようなアホレスだな
とか
> 右辺値に対してアドレス取ろうとしてるから駄目なわけで。
とかは知ったか自慢にしか見えない
コメント2件

346
デフォルトの名無しさん[sage]   投稿日:2017/02/06 08:58:46  ID:L0zP1ki7.net
間違った説明で相手を納得させておいて開き直りとはこれいかに

347
デフォルトの名無しさん[sage]   投稿日:2017/02/06 13:17:28  ID:WLH8uv6+.net
>345
本人の納得は無関係
その二つどっちも誤り
コメント1件

348
デフォルトの名無しさん[sage]   投稿日:2017/02/06 20:21:28  ID:VJg+IRhi.net(2)
>345
> その二つどっちも誤り
でもどう誤ってるかは書けないんだよね w
コメント1件

349
デフォルトの名無しさん[sage]   投稿日:2017/02/06 20:22:09  ID:VJg+IRhi.net(2)
>348>347 宛だったわ

350
デフォルトの名無しさん[]   投稿日:2017/02/06 20:58:58  ID:oG8S/cPb.net(2)
>344
でもさ、レジスタって言語と関係ないじゃん?

351
デフォルトの名無しさん[sage]   投稿日:2017/02/06 21:52:01  ID:w07g0Jpo.net(2)
registerは予約語なのに無関係は無いわ

352
デフォルトの名無しさん[sage]   投稿日:2017/02/06 22:13:36  ID:rtwfNknd.net
>registerは予約語なのに無関係は無いわ
規格のどこを読んだら「register」キーワードと「レジスター」との関連が読みとれるんだか

353
デフォルトの名無しさん[sage]   投稿日:2017/02/06 23:29:15  ID:w07g0Jpo.net(2)
規格厨には理解しろと言っても無理だ

354
デフォルトの名無しさん[sage]   投稿日:2017/02/06 23:45:37  ID:+fmEnPzx.net
>int a = 0;
>int *b = &(1+a);

っていうのが今intになってるからレジスタがどうとか言えるけど
intじゃなくて自分で定義したクラスとかだったらどうなんだって話だな
レジスタだからアドレスが取れないっていう説明はアレすぎないかい?
そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
コメント1件

355
デフォルトの名無しさん[sage]   投稿日:2017/02/06 23:48:30  ID:tIYhS76V.net
一生懸命だなあw

356
デフォルトの名無しさん[sage]   投稿日:2017/02/07 00:11:08  ID:STnejiJM.net
俺が思うにさ
最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
普通にありふれているわけじゃないですか
で、それらの変数のアドレスを取得するように
コードを書き換えたら、コンパイルエラーになるんですか?ってね
その場合ちゃんとコンパイラはメモリに実体を作るような動作になる
だからレジスタ云々はオプティマイズの話であって本質的に全く関係ないだろうと
レジスタに配置されているからアドレス取得できませんって意味不明で
だったらメモリに実体を作ればいくらでもアドレス取得できるだろって話なんだよ

どちらかというとこれは変数の寿命の関係でそうなっているんだよ

357
デフォルトの名無しさん[sage]   投稿日:2017/02/07 00:12:13  ID:vsDAW+dO.net
初心者向けの簡易な説明に外野がつまらない茶々入れて大騒ぎするなよ。

358
デフォルトの名無しさん[sage]   投稿日:2017/02/07 00:25:30  ID:pfKer2X+.net
>最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
>普通にありふれているわけじゃないですか

本当にありふれてるのか?

359
デフォルトの名無しさん[]   投稿日:2017/02/07 00:48:05  ID:PI0qtNzz.net
winsock(UDP)を使ったプログラムを作っています。
ほぼできたのですが、数100回繰り返すと徐々に通信が
遅くなっていきます。
通信するたびに、オープンとクローズを繰り返しているのですが、
その辺に原因がありそうでしょうか・・・。
コメント1件

360
デフォルトの名無しさん[sage]   投稿日:2017/02/07 02:25:04  ID:e2fTv1VF.net
メモリを解放していないから、使用メモリがドンドン大きくなっていくとか?

プロセスの使用メモリを、チェックすれば?

361
デフォルトの名無しさん[sage]   投稿日:2017/02/07 07:22:03  ID:ff698yUf.net(2)
>354
> そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
その自由さのために言語仕様でできないようにしてるだけでしょ

362
デフォルトの名無しさん[sage]   投稿日:2017/02/07 07:23:26  ID:ff698yUf.net(2)
>359
再現性あるならどこが遅くなってるかを調べたら?

363
デフォルトの名無しさん[sage]   投稿日:2017/02/07 07:43:41  ID:AbeSLyAt.net
>その自由さのために言語仕様でできないようにしてるだけでしょ

根拠は俺の「こうだったらいいな」
この理屈で行くとアドレスをとれる変数は
レジスタに乗せてはいけないことになるな

364
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:15:58  ID:bjgueVwS.net
register云々してるやつはCかC++か区別して書け
コメント1件

365
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:47:58  ID:+LdvU0fQ.net(2)
class A
{
 public:
  int xxx;
  void yyy();
};

class B : protected A  ←protectedのままにしたい
{
 public:
  void yyy() {  __super::yyy();  }
};

B bbb;
bbb.xxx = 0;   ←アクセスできない
bbb.yyy();    ←使える

xxxをclassBの内部を変えることでアクセスできるようにする方法ない?

366
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:52:35  ID:Ex9Qk6T0.net
public:
using A::xxx;
コメント1件

367
デフォルトの名無しさん[sage]   投稿日:2017/02/07 11:57:42  ID:+LdvU0fQ.net(2)
>366
おお!yyy()もそれでいけるね。サンクス

368
デフォルトの名無しさん[sage]   投稿日:2017/02/07 19:45:06  ID:R+lISOuU.net
>364
register変数のアドレスを取る話をしてるわけじゃないのに
いきなりどうした

369
デフォルトの名無しさん[sage]   投稿日:2017/02/08 19:54:01  ID:zyGgo9zG.net
俺,register使ったことないが
register int a = 0;
int *b = &a;
とすると、b経由で割り当てられたCPUレジスタにアクセスできるのか?
コメント1件

370
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:15:16  ID:x9WXoVQQ.net(2)
cではregister指定された変数のアドレスは取れない
c++では取ってもいいが、取ると普通はレジスタではなくメモリ割り当てになる

そもそもregister指定しても必ずレジスタ割り当てになるわけではない
今のコンパイラの多くはregisterを無視してるらしい

371
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:21:15  ID:6Dg3FALd.net(2)
>369
それ面白いけど実装がめちゃくちゃ大変だし、そもそもメリットないだろ

372
デフォルトの名無しさん[]   投稿日:2017/02/08 20:38:12  ID:Z1e//95W.net(2)
C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ

373
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:41:11  ID:039KZGQ+.net
register int a = 0;
int *b = &a;
これで b が a を格納してるCPUレジスタをポイントすると、
b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。

int& b = a;
という具合に参照で受ければ何とか…。
コメント2件

374
デフォルトの名無しさん[]   投稿日:2017/02/08 20:43:52  ID:Z1e//95W.net(2)
>373
そんなの普通の変数だって未定義動作じゃん
コメント2件

375
デフォルトの名無しさん[sage]   投稿日:2017/02/08 20:47:07  ID:6Dg3FALd.net(2)
>373
> b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。
ax 指してたら bx を指すようになる
dx 指してる時に b++ したらお約束の鼻から悪魔でいいだろ

376
デフォルトの名無しさん[sage]   投稿日:2017/02/08 21:02:48  ID:x9WXoVQQ.net(2)
なんでx86前提なんだよ
実際出来ないんだから議論の意味ないが、出来たとしても実装依存だろ
コメント1件

377
デフォルトの名無しさん[sage]   投稿日:2017/02/08 22:06:39  ID:r8a3b7fC.net
>374
おい馬鹿
int aho{};
int *p{&aho};
p++;
これが未定義動作などと規格のどこに書いてある?
コメント1件

378
デフォルトの名無しさん[sage]   投稿日:2017/02/08 22:23:33  ID:t4XC3Oio.net
p++ が動作未定儀か否かとは関係ない話だと思うが

ポインタの指し先を求めず、ポインタの演算と差分
 int a;
 int* p = &a;
 int* q = p + 1;
 q-p;

で 実体の要素数+1 までは正しく差分が取れることを保障している ってどっかであった記憶
コメント1件

379
デフォルトの名無しさん[]   投稿日:2017/02/09 02:31:40  ID:lnTHGhne.net(2)
>377
>378
んなこた知っとるわ。どのレジスタを指すのかって言ってんだからポインタの先を参照する事前提だろ?
そうじゃなきゃ単に無理やり割り当てたアドレスに+1にすればいいだけ。指し示す先に何があるかなんて関係ない。
コメント1件

380
デフォルトの名無しさん[sage]   投稿日:2017/02/09 03:48:37  ID:WRm++DjL.net(3)
int i;
int *ip=&i;
ip+1はほんとにあるんかい?
いやあるんだろうけどw

381
デフォルトの名無しさん[sage]   投稿日:2017/02/09 06:05:01  ID:4sYnDBFk.net
同等なレジスタを32個とか内蔵してて番号で区別する
RISCチップだと不自然でもない気がしてきた。
コメント1件

382
デフォルトの名無しさん[sage]   投稿日:2017/02/09 06:22:52  ID:ZHuRANtU.net
>379
>374 については?
普通の変数だって(指し先参照してないのに)未定儀動作とか言っちゃってるんですけど

383
デフォルトの名無しさん[sage]   投稿日:2017/02/09 06:42:00  ID:RO+sEjyT.net(2)
>376
> なんでx86前提なんだよ
お前の言うように実装依存なんだから例に決まってるだろ
68k なら d0, d1, ... ってもっと分かりやすいし他のプロセッサでも適当に決めりゃいいだけ
てか、ネタに突っ込むならもっと面白い奴にしてくれ

384
デフォルトの名無しさん[sage]   投稿日:2017/02/09 07:01:49  ID:RO+sEjyT.net(2)
>381
for(register int* r = &_r0; r < &_r32; r++){
*r = 0;
}
で、全レジスタがクリアできるとか便利かも
で r が _r3 辺りに割り当てられててバグるところまでがセットだよな w

385
デフォルトの名無しさん[sage]   投稿日:2017/02/09 12:57:20  ID:DuGTx+Z0.net
レジスタってそう多くないから別に…
SPARCのレジスタウィンドウ合わせて128個とかならまあ

386
デフォルトの名無しさん[sage]   投稿日:2017/02/09 14:24:27  ID:ZeoIDdik.net
つ ゼロページレジスタ

387
デフォルトの名無しさん[sage]   投稿日:2017/02/09 16:59:44  ID:m9bylyVb.net(2)
register int a = 0;
int *b = &a;
としたとき、Cではアドレスが取れないって話だったが、C++では取れる
が、次期規格でregisterは無視されるようになる・・・って話だよね

ま、仮にアドレスを取ったとしても何も問題ないように思うが
というのも、CPUの演算は通常レジスタに対してしかできないし
一方でアドレスが取れるのはメモリにあるものだけなので
普通の変数もレジスタとメモリの間を最新の値が行ったり来たりしているのが通常で
コンパイラは矛盾が起きないようなコードを吐き出すように出来ている
だからregister指定要らないよねって話になってるだろう

そもそも、可能な限りレジスタに配置する、というのがあいまいで
レジスタは有限個なのでregister指定しても必ずしもレジスタのみに配置されるかどうか
分からないしCPUにもよる
ここで、アドレスを取ったらレジスタのみに配置することが出来ないのだから
register指定であっても、「可能な限りレジスタに配置する」が出来ないということで
普通の変数扱いということで問題ない

388
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:03:46  ID:XjHAaCWU.net
>次期規格でregisterは無視されるようになる・・・って話だよね

文盲は去れ
長文で荒らすな

389
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:18:48  ID:m9bylyVb.net(2)
>372 名前:デフォルトの名無しさん[] 投稿日:2017/02/08(水) 20:38:12.66 ID:Z1e//95W [1/2]
>C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ

は噓ということ?

390
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:24:14  ID:WRm++DjL.net(3)
registerってのを使わなきゃいんでないのw

391
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:31:18  ID:aUQtcCRM.net
規格なんて知らんがレスから想像するとこうじゃないのか?

今の規格は「可能ならレジスタに割り当てろ」で、実際のコンパイラは無視してるのが多い
事実上機能してないから次期規格では仕様変えてregister変数やめる

392
デフォルトの名無しさん[sage]   投稿日:2017/02/09 17:50:34  ID:55oKC5Ju.net
C++ではすでにregisterは無視されてて、17からはエラーになるってことだろ

393
デフォルトの名無しさん[]   投稿日:2017/02/09 18:47:17  ID:lnTHGhne.net(2)
C++11の時点でdeprecatedになってて
C++17で書いたらエラーになる
キーワードはいつか規格で何かに再利用するかもしれないから予約したまま(ユーザーが関数名などに使用出来ないまま)。
コメント1件

394
デフォルトの名無しさん[]   投稿日:2017/02/09 19:03:26  ID:QPpApk6a.net

395
デフォルトの名無しさん[sage]   投稿日:2017/02/09 20:05:28  ID:IuYXl6Zl.net
>393
registerについては、再利用の可能性というより、混乱の元だから今後は誰も触れてくれるなってところかな。

396
デフォルトの名無しさん[sage]   投稿日:2017/02/09 20:34:41  ID:wAatsUnZ.net
今、キーワードとして問題ないからそのままにしておくってことだろ
一旦キーワードでなくしてしまうと将来また使いたくなった時に大混乱するから

397
デフォルトの名無しさん[sage]   投稿日:2017/02/09 20:46:05  ID:WRm++DjL.net(3)
C++17なんてもあるのか。 ついてけんわぁ

398
デフォルトの名無しさん[sage]   投稿日:2017/02/10 12:36:17  ID:yPTk9ivW.net
register使うなら今のうち

399
デフォルトの名無しさん[sage]   投稿日:2017/02/10 16:29:47  ID:gDFEqThI.net
C++17以降のregisterは、ガチャガチャチーン!とbeep音を鳴らします

400
デフォルトの名無しさん[sage]   投稿日:2017/02/11 17:45:33  ID:B6KA1QDA.net
Mingwのgccでこんなのためしたら結構はやくなるのね。C++だと速度変わらんかったけど。
#include <windows.h>
#include <stdio.h>
int main(void) {
register int i;
DWORD t;
t = GetTickCount();
for(i=0 ; i <100000000 ; i++);
printf("%d\n",(int)(GetTickCount()-t));
return 0;
}
コメント1件

401
デフォルトの名無しさん[sage]   投稿日:2017/02/11 17:50:28  ID:o1zrWG0U.net(2)
registerネタどんだけ続けるんだ

402
デフォルトの名無しさん[sage]   投稿日:2017/02/11 18:02:59  ID:Ka66uAeU.net
>int main(void) {
> register int i;

変数を先頭で宣言しないと精神の安定が保てない病気
コメント1件

403
デフォルトの名無しさん[sage]   投稿日:2017/02/11 18:27:32  ID:2x1BPms4.net(2)
っくっだらないとこでも叩いておかないと精神の安定が保てない病気

404
デフォルトの名無しさん[sage]   投稿日:2017/02/11 18:51:03  ID:jl0P82O4.net
インデントや{}のスペース・改行でも自分のやり方と違うと喚きそうだなw
コメント1件

405
デフォルトの名無しさん[sage]   投稿日:2017/02/11 19:53:33  ID:7HNC8OW9.net
>404
違和感がでるよね。
会社でこれがうちのスタイルって強制され、それになじむと
そうじゃないスタイルのものは気持ち悪いって感じるようになった

>for(i=0 ; i <100000000 ; i++);
最近のコンパイラはまじめにやらないで、コンパイル時にiは使ってないあるね
処理省くニダってして実行コード生成してなさそうな気がするが。

406
デフォルトの名無しさん[sage]   投稿日:2017/02/11 19:59:07  ID:nnf0vKBy.net
K&R2 あたりにあわせておけば問題ないのでは?
というか,K&R2 から大幅に変えさせられるのは苦痛だな

407
デフォルトの名無しさん[sage]   投稿日:2017/02/11 21:18:53  ID:vquAI+Jk.net
21世紀にもなってK&Rとか何の冗談
変化が苦痛な老人はすっこんでて
コメント1件

408
デフォルトの名無しさん[sage]   投稿日:2017/02/11 21:22:09  ID:e+WRwiZx.net

409
デフォルトの名無しさん[sage]   投稿日:2017/02/11 21:51:35  ID:o1zrWG0U.net(2)
21世紀に相応しいスタイルを是非教えてくれ

410
デフォルトの名無しさん[sage]   投稿日:2017/02/11 22:42:56  ID:2x1BPms4.net(2)
可能な限りC/C++使わない
それが21世紀スタイル
コメント1件

411
デフォルトの名無しさん[sage]   投稿日:2017/02/11 22:58:24  ID:nOWXV3w9.net
>410
おいおい、でも、それが正しいな。

412
デフォルトの名無しさん[sage]   投稿日:2017/02/12 02:53:21  ID:guRObziH.net
正しいけど"可能な限り"の範囲がまだまだ足りない
組み込みの世界はC言語が強過ぎて未だにC++すら使えない環境がざらにあるしな

413
デフォルトの名無しさん[sage]   投稿日:2017/02/12 08:33:11  ID:XNCDxJ48.net(3)
>407
C/C++ くらいなら,K&R2 に準拠にさせてよー C#, Java も,とはいわないからさー
コメント1件


414
デフォルトの名無しさん[]   投稿日:2017/02/12 08:43:31  ID:MRPxQTsD.net
>413
C++を入れるなよ
コメント1件

415
デフォルトの名無しさん[sage]   投稿日:2017/02/12 10:10:03  ID:nF2JpTw9.net
結局C言語で全て済んでしまうからね。他は趣味。はっきりわかんだね

416
デフォルトの名無しさん[sage]   投稿日:2017/02/12 14:01:05  ID:XNCDxJ48.net(3)
>414
いっしょだよ,C++ も普通に K&R2 に似せて書くのが一番いい

417
デフォルトの名無しさん[sage]   投稿日:2017/02/12 15:47:27  ID:CF268nsq.net
>402 の「ブロック先頭で変数を定義するのは時代遅れ」ていう
指摘を受けての流れじゃないかな。

最初の使用の直前まで変数定義を遅らせることができる、
というC++での改良や、それを取り込んだC99以降で
わざわざK&R2版の書き方に制限されるのは困るという話。

おそらく、K&R2に似たスタイルが良いという主張も
「新しく追加された便利機能は使った上でK&R風のスタイル」
という意図なんだと思う。
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2017/02/12 15:59:10  ID:rZ/K+l3Q.net
>400はiの宣言を先に、tよりも先にすることで、何を試したのかってのをわかりやすくしてんだろ
K&Rなんかにこだわるよりもこういうソースの方がいいわ

419
デフォルトの名無しさん[sage]   投稿日:2017/02/12 17:25:00  ID:XNCDxJ48.net(3)
>417
当然だ

420
デフォルトの名無しさん[sage]   投稿日:2017/02/13 00:11:12  ID:ebN6PGVD.net
使う直前に変数を宣言してるとたまにgoto出来ないerrorが出るのが面倒くさい

421
デフォルトの名無しさん[sage]   投稿日:2017/02/13 11:51:26  ID:M86uydzz.net
ブロックの違う同名変数の取り違えでトラブってるのを見てから
宣言位置が不揃いなのもよくないと思うようになった

422
デフォルトの名無しさん[sage]   投稿日:2017/02/14 01:24:51  ID:xlM9Sf4d.net
それは宣言位置の問題じゃなくて、1ブロックが大き過ぎることが原因じゃないか?

423
デフォルトの名無しさん[sage]   投稿日:2017/02/14 08:51:02  ID:SrPWZnE2.net
スコープ違う同名の変数を書いたら間違えた
 ↓
宣言位置をスコープの先頭に揃えておけば俺はきっと気づけたんだ!

これがバカの思考
コメント1件

424
デフォルトの名無しさん[]   投稿日:2017/02/14 09:10:51  ID:MfKEp5BT.net(2)
お前等が宣言位置を先頭に揃えておかなかったから俺が間違えたんだ

とまでいかなければまだ許せる。

425
デフォルトの名無しさん[sage]   投稿日:2017/02/14 09:11:22  ID:H0Zx0irg.net(2)
スコープ違う同名の変数を書いたら間違えた
 ↓
次から気をつけよう!
 ↓
またミス

>423はこのタイプ

426
デフォルトの名無しさん[]   投稿日:2017/02/14 09:16:00  ID:MfKEp5BT.net(2)
423じゃないが間違えたことないな
どうやったら間違えるのか教えて欲しいくらい

427
デフォルトの名無しさん[sage]   投稿日:2017/02/14 09:25:27  ID:he6YB8dM.net
多分ブロックごとコピペしてたまたまエラーが出なかったんだろ

428
デフォルトの名無しさん[sage]   投稿日:2017/02/14 09:37:58  ID:tRUBGDEd.net
世の中には1関数が1000行を超える糞コードが存在するからな
そんな糞コードに後から修正入れようとすると信じられないようなミスも起こる

429
デフォルトの名無しさん[sage]   投稿日:2017/02/14 10:07:10  ID:H0Zx0irg.net(2)
関数の長さと糞さは別だな
無理に短くしてあちこち飛ぶコードの読みにくさったらありゃしない
コメント1件

430
デフォルトの名無しさん[]   投稿日:2017/02/14 10:25:24  ID:ze+N1Rxh.net
短いからといって読みやすいはとは限らないが、
長いと読みにくいのは確実なので無関係ではないな

431
デフォルトの名無しさん[sage]   投稿日:2017/02/14 12:52:20  ID:8LvI494R.net
>429
1行目と2行目で矛盾してるぞ

432
デフォルトの名無しさん[sage]   投稿日:2017/02/14 15:01:49  ID:Y4N6R9g2.net(2)
短く を目標にはしないが、長いと
どうしても何かの力を感じてw
短くしたくなるわなぁ

433
デフォルトの名無しさん[sage]   投稿日:2017/02/14 15:19:01  ID:t9BEI7G/.net
必死にprivate関数で小分けにしてた頃を思い出すわ
気にしなくなってprivate関数の存在価値がよく分からなくなった

434
デフォルトの名無しさん[sage]   投稿日:2017/02/14 15:31:24  ID:Y4N6R9g2.net(2)
privateとその長さは関係ないと思うが

435
デフォルトの名無しさん[sage]   投稿日:2017/02/14 17:04:37  ID:lntB2yLX.net(3)
俺も429派かなぁ
特に再利用するようなものでもないのに関数に小分けにしてもあまり意味がないし
仮に1000行あったとしても、制御構造が単純で上から下へ逐次実行するだけだったり
プログラムの読みにくさと関数の長さは根本的に関係ないと思う
関数の長さに関係なく単純に、
仕様が複雑で、ややこしいことしている箇所は、やはりややこしい
難しいアルゴリズムを使っている個所は、やはり難しい

436
デフォルトの名無しさん[sage]   投稿日:2017/02/14 17:07:50  ID:lntB2yLX.net(3)
そうはいっても100行を超える関数はさすがに書いたことないけどな
クラスビューとかでジャンプできなくなるから作業性に問題が出る

437
デフォルトの名無しさん[sage]   投稿日:2017/02/14 17:12:21  ID:lntB2yLX.net(3)
100行と書いたけど、それは1000行のまちがいだ
100行を超える関数は普通に書くことがあるな
新しいC++になってからラムダが関数内関数の代わりに使えるようになったから
こういったものを駆使すると長い関数を書いても比較的に問題が出にくくなったってのはある
メソッドにするとクラス空間が汚れるから関数内関数の方がよい場合も多々

438
デフォルトの名無しさん[sage]   投稿日:2017/02/14 19:47:15  ID:vv2eSSm9.net
100行超える関数はほとんど書かないけど、
100行超えるコメントはしょっちゅう書くな。

439
デフォルトの名無しさん[sage]   投稿日:2017/02/15 01:17:06  ID:xbLGAB7Z.net
名付けに困らないくらいの単位で処理を纏めて上にポイだな
無名ネームスペース大活躍

再利用しなくても処理を分けとくとバグを潰しやすいし

440
デフォルトの名無しさん[sage]   投稿日:2017/02/16 04:06:20  ID:6VkTpxSR.net(2)
ラムダ 入門 で検索しても簡単なサイトが見つかりません。
どこか良いサイトか書籍はありませんか。

441
デフォルトの名無しさん[sage]   投稿日:2017/02/16 04:13:34  ID:0dItl/ZH.net
入門しなきゃならん奴が使うもんじゃない

442
デフォルトの名無しさん[sage]   投稿日:2017/02/16 04:38:21  ID:6VkTpxSR.net(2)

443
デフォルトの名無しさん[sage]   投稿日:2017/02/16 12:45:23  ID:SkhlZoRn.net
よくわからんもの
ラムダ式、関数オブジェクト

444
デフォルトの名無しさん[sage]   投稿日:2017/02/17 04:01:51  ID:/gNkD5d3.net(2)
#include <iostream>
using namespace std;
int main() {
unsigned char aa=0x31;
cout << hex<<aa <<endl;
return 0;
}
なんで 31 と表示されないのでしょう

445
デフォルトの名無しさん[sage]   投稿日:2017/02/17 05:25:27  ID:Z2r3IJRX.net(2)
たぶん 1 が表示されるでしょ。
aa が char だから出力ストリームでは文字が出る。
数値を出したければ aa を int で定義するか、
cout のところで int にキャストしてやらないと。
コメント1件

446
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:07:08  ID:39ud/5Wb.net
>aa が char だから出力ストリームでは文字が出る

因果関係がよくからないのですがcharだとなぜ文字がでるの?
コメント1件

447
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:22:25  ID:fOTzzkTG.net
>446
渡した値の型によって、それをどう表示するかが異なるように作られているから。
printfという関数で出力する場合は、出力したい値のほかにそれをどういう形式で出力するかという情報を別に与えていたけど、iostreamでは、型で自動的に処理してくれる。

448
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:52:16  ID:+UDZhFA4.net
uint8_tとか使ってるとき嵌るんだよなぁ。

449
デフォルトの名無しさん[sage]   投稿日:2017/02/17 07:53:27  ID:Z2r3IJRX.net(2)
「C++では引数の型や個数が異なる同じ名前の関数をいくつも定義できて
引数の型や個数に応じた別々の動作にできる」
「関数引数の変数値が(Cとは異なり)自動的にはintに格上げされない」
くらいしか説明の文面を思いつかないけど、我ながら分かりにくいな。

coutに対する<<演算子(を実行する関数)が、
charの引数に対しては文字を、intの引数に対しては数値を
出力するよう上手いこと作られている。
ってのは「昔からそう決まっとる」式の押し付けがましい感じだし。

450
デフォルトの名無しさん[sage]   投稿日:2017/02/17 15:18:41  ID:/gNkD5d3.net(2)
>445
ども 書いた後、すぐintでやったらわかった。
"<<" 系の入出力演算子とビットシフトの問題も同じ理由か。

451
デフォルトの名無しさん[sage]   投稿日:2017/02/17 17:04:51  ID:xoJSqgdl.net
VC++の質問です。
フォームのコントロール(ボタンなど)をアンマネージクラスに保持する方法が知りたいです。

// コンストラクタの引数より、ラベルのコントロールをprivateに保存し、setLabelTextでラベルのテキストを変更するクラス
class LineController
{
private:
  System::Windows::Forms::Label^* label_;
public:
  LineControllerSystem::Windows::Forms::Label^% label);
  void setLabelText(System::String^ str); // label_のTextに引数strを設定。
};


最初に表示されるフォームのコンストラクタにて上記のクラスをnewし、そのクラスインスタンスをアンマネージクラスのシングルトンに保存しています。
シングルトンに保存直後に、シングルトン経由でsetLabelTextメソッドを実行した場合は正常label_のTextを変更可能でした。
しかしボタンクリックイベント内にて、同様にシングルトン経由でsetLabelTextをコールするとlabel_へアクセスしたタイミングで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」が発生してしまいます。

本エラーを回避するにはどのような手法をとればよいでしょうか?
追跡参照(%)などを調べているのですが現状解決の糸口が見えません。
シングルトン及び上記LineController自体はできればマネージにしたくないです。。。

452
デフォルトの名無しさん[sage]   投稿日:2017/02/19 11:23:25  ID:2DCCXMeS.net
C++の話題そのものではないのですが
バブルソートとか初歩的なアルゴリズム
を優しく解説している書籍はありませんか。

Amazon見てるのですがもう少し情報がほしいです。
コメント1件

453
デフォルトの名無しさん[sage]   投稿日:2017/02/20 01:05:36  ID:aWzwD2VT.net
>452
ピタゴラスイッチでバブルソートやクイックソートの概念をグラフィカルに紹介してたよ。
それはさておき、本屋の店頭でアルゴリズムとかデータ構造とかがタイトルに含まれる本をパラパラめくって分かり易いのを探すといいかと思う。
コメント1件

454
デフォルトの名無しさん[sage]   投稿日:2017/02/21 00:15:43  ID:OFTvUoLj.net(3)
とあるOSSをとあるシステムに移植していて、
Intel(2013)やGNU(4.9系)ではコンパイルできるのに
そのシステム専用コンパイラではコンパイルできずエラーになります。
ソースコードやヘッダファイルを修正すれば通るだろうというのは経験的にわかっているのですが
どこを修正したらよいかというのを見つけ方がわからないのですが見つけ方のコツみたいなのはあるのでしょうか?
コメント2件

455
デフォルトの名無しさん[sage]   投稿日:2017/02/21 00:32:08  ID:fcoMqi2n.net
エラーメッセージの意味を考えろ

456
デフォルトの名無しさん[sage]   投稿日:2017/02/21 01:18:37  ID:9fQxfYbZ.net(2)
>454
エラーメッセージを見ないことには回答のしようがないと思うぞ

まぁ、専用のコンパイラという言い回しから察するに、C++03程度しかサポートしていない古いコンパイラでも使ってるんじゃないか?
エラーが出ている行の周辺でC++11以降の言語機能か、ライブラリでも使ってんじゃね?
コメント2件

457
デフォルトの名無しさん[sage]   投稿日:2017/02/21 01:18:57  ID:bFUDo/lz.net(2)
>454
ともかく、
そのシステム専用コンパイラ提供しているところに、世界標準のIntel(2013)やGNU(4.9系)ではコンパイル
出来るのにお前のものではできないから出来るようにしたコンパイラをよこせと激しくクレーム
コメント1件

458
デフォルトの名無しさん[sage]   投稿日:2017/02/21 01:32:37  ID:bFUDo/lz.net(2)
>456
C++11いっぱいのコードをC++03に修正するって大変そうだな

459
デフォルトの名無しさん[sage]   投稿日:2017/02/21 06:31:57  ID:OFTvUoLj.net(3)
>456
>457
メッセージは
「オーバーロードされた関数"HOGE"のインスタンスが引数リストと一致しません。」
みたいな感じです
一応C++11準拠でGNU4.9一部互換とされてるコンパイラですが。。。
コメント2件

460
デフォルトの名無しさん[sage]   投稿日:2017/02/21 08:12:09  ID:9fQxfYbZ.net(2)
>459
HOGEが想定している引数型と実際に渡している引数の型を確認
違うやつが犯人

これ以上は情報少なすぎてわからん
コメント2件

461
デフォルトの名無しさん[sage]   投稿日:2017/02/21 15:33:32  ID:rWOcc73c.net
一般論としてどういうことに注意したらいいですかって質問じゃなくて、具体的に解決してもらいたいってことなのかよw

462
デフォルトの名無しさん[sage]   投稿日:2017/02/21 22:19:07  ID:OFTvUoLj.net(3)
>460
intelコンパイラで作ったオブジェクトをnmコマンドで中見て
こうあるべきという形がわかったんであとは頑張ってみる

463
デフォルトの名無しさん[sage]   投稿日:2017/02/21 22:24:52  ID:qEEiXXQS.net
HOGEの中にHAGEが紛れ込んでるんだな

464
デフォルトの名無しさん[sage]   投稿日:2017/02/22 07:28:41  ID:F7TE97aZ.net
>453
有難うございます。
田舎ですので大きな書店には距離があります
が、行ってみます。

465
デフォルトの名無しさん[sage]   投稿日:2017/02/22 11:11:49  ID:T1tKwjPz.net(2)
>459
テンプレートが悪さしてるか const の取りこぼしかデフォルト引数のミスが起きているとエスパー
コメント1件

466
デフォルトの名無しさん[sega]   投稿日:2017/02/22 19:03:10  ID:7bpb3LbA.net
printf("%s",buf);

fputs(buf,stdout);

どっちが好き?

467
デフォルトの名無しさん[sage]   投稿日:2017/02/22 19:20:15  ID:JmFr9wbV.net
違う処理のコードを並べてどっちと言われても
コメント1件

468
デフォルトの名無しさん[sage]   投稿日:2017/02/22 19:49:35  ID:OuXxGo6B.net
>467みたいな人が居るのでprintfかな

469
デフォルトの名無しさん[sage]   投稿日:2017/02/22 20:00:39  ID:G8P7P0/x.net
どっちも最後に使ったの20年ほど前かな
コメント1件

470
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:09:01  ID:T1tKwjPz.net(2)
puts とか使ったことないわ

471
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:30:22  ID:Z0Pf8P/J.net
>469
ログ出力・エラー出力がメインでstdoutはあんまり使わないよな

472
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:36:43  ID:3nEefUGO.net(2)
putsは改行してくれるんで好きだな。fputsも。
コメント1件

473
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/02/22 21:39:49  ID:mKcPOHkg.net
>472
fputsは改行を追加しない
コメント1件

474
デフォルトの名無しさん[sage]   投稿日:2017/02/22 21:51:09  ID:3nEefUGO.net(2)
>473
あ そうだった。 すまん

475
デフォルトの名無しさん[sage]   投稿日:2017/02/23 00:12:45  ID:oHheANLP.net
細かいのを大量に出したいときはprintfは遅い

476
デフォルトの名無しさん[]   投稿日:2017/02/23 18:17:55  ID:2nyak89s.net(2)
class CL{
CL(int _d, string _s) : d(_d), s(_s)
{

}
public:
int d;
string s;

};
int _tmain(int argc, _TCHAR* argv[])
{
CL *cl = new CL(555, "a");←ここでエラー。なんで?
コメント1件

477
デフォルトの名無しさん[]   投稿日:2017/02/23 18:23:14  ID:sZtROie8.net
>476
こんすとらくたがprivateだから

478
デフォルトの名無しさん[]   投稿日:2017/02/23 18:23:56  ID:2nyak89s.net(2)
そういうことかあ
あざす

479
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:15:37  ID:JF3nU8GT.net(2)
生成出来ないクラスってやつね。
コメント1件

480
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:50:10  ID:33+Wu0JT.net
>479
friend なクラスからしか生成しないようにするとかはあるね

481
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:52:15  ID:JF3nU8GT.net(2)
はい そゆ事。

482
デフォルトの名無しさん[sage]   投稿日:2017/02/23 21:53:15  ID:0FbQfq3V.net
staticメソッドで生成するって形の時に使うことが多い
singletonとか

483
デフォルトの名無しさん[sage]   投稿日:2017/02/23 22:20:39  ID:v0zRNZ3l.net
ctorはpri.でメンバーはpub.って
どういうことなんだ?

484
デフォルトの名無しさん[sage]   投稿日:2017/02/23 22:26:42  ID:I6Uc1mEc.net
一つ前のレスも読めない文盲

485
デフォルトの名無しさん[sage]   投稿日:2017/02/23 22:44:21  ID:SD8t1ALL.net
質問
C/C++でランタイムで現在のメモリの状態
とくにプロセスが使える余っているメモリの量って調べ方はありますか?

486
デフォルトの名無しさん[sage]   投稿日:2017/02/24 08:45:12  ID:SswDvM4l.net
環境すら書かないと言うことは
(実質)環境非依存での方法を聞いてるんだろうな?

487
デフォルトの名無しさん[]   投稿日:2017/02/24 08:54:02  ID:See/JzpM.net(5)
そんなもん無いけどな

488
デフォルトの名無しさん[sage]   投稿日:2017/02/24 09:53:13  ID:0sr6h+Re.net
失敗するまでmallocやnewを繰り返せばええんや
コメント2件

489
デフォルトの名無しさん[]   投稿日:2017/02/24 10:43:32  ID:See/JzpM.net(5)
>488
Linuxじゃ失敗しないよ

490
デフォルトの名無しさん[]   投稿日:2017/02/24 10:53:37  ID:See/JzpM.net(5)
もたろん割り当てるアドレス空間自体が足りなくなったとか、予め上限を設定しておいたとかいうケースは覗いてな

491
デフォルトの名無しさん[sage]   投稿日:2017/02/24 11:09:14  ID:9xRtAprE.net(2)
16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。

それはわかる。

逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?
コメント1件

492
デフォルトの名無しさん[sage]   投稿日:2017/02/24 11:41:21  ID:KhjrQy0g.net(2)
基本的にでっかくメモリ確保というプログラムは作った事がないな。
今はSTLでほげほげ追加してくイメージ。

493
デフォルトの名無しさん[]   投稿日:2017/02/24 11:47:17  ID:See/JzpM.net(5)
>491
>16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。
そうとは限らない。一般的なLnuxの環境依存ではmallocを搭載メモリ以上行っても失敗しない
swap含めて1GBしか積んでいない環境で2GB分malloc可能。確保した領域に書き込んだタイミングで記憶する領域が足りなくなったら色々なプロセスが殺される。oom killerと言われてるもの。
>
逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?
実装による。現代的なコンピューターではページ単位(4KB)とかでカーネルからプロセスへすきなアドレスへメモリを割り当てられるから物理的なアドレスが連続している必要はない。
プロセス内に連続したアドレス空間が残っていない場合は失敗する
コメント1件

494
デフォルトの名無しさん[sage]   投稿日:2017/02/24 11:52:16  ID:NAh96dM2.net
仮想メモリというしくみで色々やってくれるようになって
キャパの限界付近ではややこしくなった印象

495
デフォルトの名無しさん[sage]   投稿日:2017/02/24 12:48:55  ID:KhjrQy0g.net(2)
家鯖は6G積んでるけどそれぐらいは行けるね。
てかkvmやってると、9Gコミットされてるもん。

496
デフォルトの名無しさん[sage]   投稿日:2017/02/24 15:10:06  ID:CcmE3pWB.net
>488
それスワップエリアのサイズ計ってるだけ

497
デフォルトの名無しさん[sage]   投稿日:2017/02/24 15:25:25  ID:nwaeFCKh.net(2)
winならGetProcessMemoryInfoなど

498
デフォルトの名無しさん[sage]   投稿日:2017/02/24 17:26:32  ID:9xRtAprE.net(2)
>493
> 物理的なアドレスが連続している必要はない
なるほど、長年の疑問が解消した。
493の読解力に感謝。
コメント1件

499
デフォルトの名無しさん[]   投稿日:2017/02/24 18:02:34  ID:See/JzpM.net(5)
>498
望む答えだったみたいで良かったわ
熱があって若干朦朧とした頭で読み返さずに書き込んだから今読み返すと誤字とか予測変換で要らない単語入ってたり(一般的なLinux環境)とか、カッコの位置が違う(4KBとかの部分)とかあったけど。

500
デフォルトの名無しさん[sage]   投稿日:2017/02/24 18:52:48  ID:dfRROZm/.net
環境依存ならPostMessageのエラーコードかな
俺はあんま理解してないけど

501
デフォルトの名無しさん[sage]   投稿日:2017/02/24 19:06:57  ID:+aOqx8nq.net
Win32なら信頼のPostMessageだな

502
◆QZaw55cn4c [sage]   投稿日:2017/02/24 22:16:12  ID:4ewDjGBZ.net
またその話題ですか‥

503
デフォルトの名無しさん[sage]   投稿日:2017/02/24 23:03:49  ID:TLhS+9k8.net
はよ10年前のソース出せよ
コメント1件

504
デフォルトの名無しさん[sage]   投稿日:2017/02/24 23:06:00  ID:nwaeFCKh.net(2)

505
デフォルトの名無しさん[sage]   投稿日:2017/02/25 07:21:27  ID:98TUEskp.net
なんで2分ちょいで出てくるかね。

506
デフォルトの名無しさん[sage]   投稿日:2017/02/25 08:14:13  ID:QoR/O5Qa.net
自演

507
504[sage]   投稿日:2017/02/25 08:21:08  ID:Jm21gNIW.net
>503>504 だ。すまんなw

508
デフォルトの名無しさん[sage]   投稿日:2017/02/26 18:42:59  ID:stmjd5mD.net
味噌県のクセにコーミソース以外のソースを使う非国民は去れ

509
デフォルトの名無しさん[sage]   投稿日:2017/03/06 07:57:48  ID:NqblWJNK.net(2)
#define ChannelBlend_SoftLight(A,B) ((uint8)((B < 128)?(2*((A>1)+64))*((float)B/255):(255-(2*(255-((A>1)+64))*(float)(255-B)/255))))
このマクロの
(2*((A>1)+64))
この部分なんですが
なんで(A+128)じゃないんですかね?

510
デフォルトの名無しさん[sage]   投稿日:2017/03/06 08:21:33  ID:1XvIZqGa.net
最初の人がコピペで作ったんでしょ。+128に定義し直してるのもあるよ

511
デフォルトの名無しさん[sage]   投稿日:2017/03/06 08:30:32  ID:cJfBjMIV.net
Aが奇数のときの動作が違うね

512
デフォルトの名無しさん[sage]   投稿日:2017/03/06 10:33:08  ID:NqblWJNK.net(2)
A、Bにはuint8を想定してますから、一瞬オーバーフローの関係かなとも思いましたが
そんなことはなく、特に深い意味はなさそうですね
ありがとうございます

513
デフォルトの名無しさん[sage]   投稿日:2017/03/13 00:19:03  ID:ZWBqluXH.net
仮想関数をオーバーライドするときはどう書くのがいい作法?
void vf()
virtual void vf()
virtual void vf() override
void vf() override

514
デフォルトの名無しさん[sage]   投稿日:2017/03/13 06:06:33  ID:IkDDkkqX.net
ハゲ先生によると最後の void vf() override が良いみたい。
『プログラミング言語C++ 第4版』p.592

加えてoverride指定の不整合をチェックするコンパイラオプションだね。
GCCのVersion 5から使える -Wsuggest-override とか。
他のコンパイラについては知らん。

515
デフォルトの名無しさん[sage]   投稿日:2017/03/13 10:43:38  ID:Kr7xjXLG.net
デストラクターに付けてる人はあんま見たこと無いな
class Derived : Base {
public:
 ~Derived() override {}
};

516
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/13 20:30:08  ID:VNPYsRzK.net(2)
Bcc55でtypeofを実現するのは不可能なのかな?

517
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/13 20:57:04  ID:VNPYsRzK.net(2)
古いコンパイラを使ってる人居る?
コンパイラの名前教えて下さい。

518
デフォルトの名無しさん[sage]   投稿日:2017/03/14 23:30:09  ID:wzywZVIy.net
老人がカセットテープデッキ求めたり
熟女モノのエロ本()を求めるような感じ?

519
デフォルトの名無しさん[sage]   投稿日:2017/03/15 01:04:07  ID:R2Ueow1p.net
古いコンパイラと自覚しつつも使ってるような人はこのスレには来ないだろ
時代遅れの遺物の話じゃ通じないし

520
デフォルトの名無しさん[sage]   投稿日:2017/03/17 11:46:00  ID:pwo5j4El.net
何でA、Bを()しないんだ?

521
デフォルトの名無しさん[sage]   投稿日:2017/03/25 21:37:15  ID:IRaGixDk.net
いまだに関数マクロ使ってるようでは
()したところで五十歩百歩

522
デフォルトの名無しさん[sage]   投稿日:2017/03/25 22:37:56  ID:9zWIhzFx.net
>460
>465
宣言とかいろいろ確認してやっぱソースはおかしくないよねってことで
サポートに調べてもらったら理由はわからないけど正しく動作する修正方法がわかったって連絡があって
最終的には詳細は書けないけどコンパイラのバグだった

523
デフォルトの名無しさん[sage]   投稿日:2017/03/26 08:58:38  ID:4rESVRzB.net
ここはお前の日記を垂れる場所じゃない
「サポートによるとコンパイラのバグだった」で済むのに
アレやってコレやってを書くな低能

524
デフォルトの名無しさん[sage]   投稿日:2017/03/27 10:03:34  ID:wSWIgauQ.net
事後報告あると参考になっていいんだけどな
今回は本人以外に状況がわからないから事後報告されてもw

525
デフォルトの名無しさん[sage]   投稿日:2017/03/30 03:06:01  ID:6sTQLdA2.net
http://codepad.org/KMQH3TsZ

ポインタをメンバに持たせた場合のget/setの書き方が分かりません
getの方は、ポインタを返すときに返した先で値を変えられないようにconstを付けたのですが、
sizePlus10のような関数を呼びたい場合に、const_castを付けて呼ぶことになってしまいました
値の変更をするのでsetを通してやるのが良いと思うのですが、何か良い書き方ありますか?

また、setの方は、一括で設定させることはできるのですが、
data->id、data->sizeの値を個別に設定したい場合、何か良い書き方はありますか?
コメントの部分のようにsetメンバ関数を何個も書く方法しか思いつきません
コメント2件

526
デフォルトの名無しさん[sage]   投稿日:2017/03/30 07:50:43  ID:GtG5BmiK.net
getDataの結果を修正したいのだから
杓子定規にgetDataの戻りにconst付けるのを止めればいいのではないか

そう言えばC++17(ドラフト)もstring::dataの戻りが非constに修正されたような
コメント1件

527
デフォルトの名無しさん[sage]   投稿日:2017/03/30 08:08:59  ID:KJlpKUaR.net
memcpy w

528
デフォルトの名無しさん[sage]   投稿日:2017/03/30 10:48:22  ID:JHpE2Dpf.net
>525
一般論として形でただ覚えるのではなくて意味を理解しよう
理解があやしいから設計の一貫性がなく混乱してるようにみえる
・Dataをポインタで所有するのはなぜ
・ゲッター/セッターを使ってアクセスするのはなぜ
・ゲッターで返す値にconstをつけるのはなぜ
・sizePlus10がData*を受けとるのはなぜ

MyClassの設計方針にあわせるならsizePlus10をDataではなくMyClassを受けとるようにして
void sizePlus10(MyClass & mc)
{
Data newdata = { mc.getData()->id, mc.getData()->size + 10 };
mc.setData(newdata);
}
あるいは別の関数を作って
void MyClassSizePlus10(MyClass & mc)
{
Data newdata = *mc.getData();
sizePLus10(&newdata);
mc.setData(newdata);
}

これが変だとか非効率だとか思うなら
MyClassの設計が要求にあってないのでそっちを変更する
コメント1件

529
デフォルトの名無しさん[sage]   投稿日:2017/03/30 20:11:34  ID:irpIFLVN.net
>528
おまえは質問の意図を理解しよう

>525
そのsetgetでいいんじゃない?ただそのgetは俺だったらreferにするな
ついでにsetget両方使えるようにdata* operator->()みたいなの実装かな。というかむしろそっちでアクセスする方向にするな
あとはattachdetach作っておいてm_dataを置換できるにようにしちゃうな
その手のスマートポインタは至るとこで使われてるからこんなとこで聞かずにどっかのライブラリの参考にしたら?

メンバのコピーはpragma pack1でstructしておいてmemcpy
コメント3件

530
デフォルトの名無しさん[sage]   投稿日:2017/03/30 23:27:09  ID:O3+3nsIM.net
>529
>メンバのコピーはpragma pack1でstructしておいてmemcpy

それをすると何がいいことあるのか?

531
デフォルトの名無しさん[]   投稿日:2017/03/30 23:45:25  ID:s+CP+YQd.net
こういえクソみたいな方法を自慢気に語り出す奴が居るところかC++の最もクソな所だよね
コメント1件

532
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/30 23:51:55  ID:2hi+y029.net
デフォルトコピーコンストラクターとか構造体代入とか知らないんだろう。
コメント1件

533
デフォルトの名無しさん[sage]   投稿日:2017/03/31 00:14:17  ID:5j4NF4+Z.net
>532
>構造体代入とか知らないんだろう
ほうほう、それは何ですか?

534
デフォルトの名無しさん[sage]   投稿日:2017/03/31 01:59:49  ID:OFYzpq31.net
やべえなおい糞コードの臭いがプンプンしやがるぜ

535
デフォルトの名無しさん[sage]   投稿日:2017/03/31 02:09:29  ID:DQgqVTGo.net
>526-529
ありがとうございます

今まではとりあえずget/setを書いてgetにはconstを付けとけば良いみたいな認識でしたが、
想定されるクラスの使われ方に合わせて適宜変更するべきでした

MyClassのようなget/setの分け方をすると、
sizePlus10のような関数やsetで不便になってしまうので、
constを付けないget/set共用のものにしてそれを通してアクセスさせるのが適切でした
( getData()でアクセスする場合、Data * const getData() const { /**/ } みたいな )
とても参考になりました

536
デフォルトの名無しさん[sage]   投稿日:2017/03/31 11:52:48  ID:xItn/dk+.net
>531
くそじゃない方法をおしえて
コメント1件

537
デフォルトの名無しさん[sage]   投稿日:2017/03/31 12:09:56  ID:c13jjk6+.net
C#じゃないからないでしょ

538
デフォルトの名無しさん[]   投稿日:2017/03/31 13:26:56  ID:CbPadW0u.net
>536
コピーは=使え
というだけの話

539
デフォルトの名無しさん[sage]   投稿日:2017/03/31 13:38:11  ID:2wgHKgmk.net
>529
> メンバのコピーはpragma pack1でstructしておいてmemcpy
これ俺も理由知りたい

540
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 17:24:06  ID:tvggMnLQ.net(6)
typedef struct MY_STRUCT
{
int ch;
} MY_STRUCT;

MY_STRUCT a,b;
a.ch = 0;
b = a; //代入できる
コメント1件

541
デフォルトの名無しさん[sage]   投稿日:2017/03/31 19:17:35  ID:Xv9Etv1i.net
>529
> おまえは質問の意図を理解しよう

なんか無駄に上から目線だなぁ
って思ったら

> メンバのコピーはpragma pack1でstructしておいてmemcpy

単なる老害だったでござる

542
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:19:25  ID:tvggMnLQ.net(6)
構造体の代入ができなかったのは大昔のことだ。

543
◆QZaw55cn4c [sage]   投稿日:2017/03/31 19:35:02  ID:BClOXWeK.net
>540
それ,K&R1 から堕落したよね
コメント1件

544
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:40:25  ID:tvggMnLQ.net(6)
構造体定義を#include <pshpack1.h>と#include <poppack.h>で囲むのは、スピードよりもメモリー効率を優先するときにする。

545
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:44:56  ID:tvggMnLQ.net(6)
あるいは構造体のレイアウトを分かりやすくするときにパッキングを指定する。

546
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:46:22  ID:tvggMnLQ.net(6)
>543
堕落ではない。進歩だ。
コメント1件

547
デフォルトの名無しさん[sage]   投稿日:2017/03/31 19:49:13  ID:RKtYGe+y.net
> スピードよりもメモリー効率を優先するときにする
20年くらい前まではそういう老人もいたね
今はメモリレイアウトを固定したい時にしか使わないけど

548
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2017/03/31 19:58:28  ID:tvggMnLQ.net(6)
#pragma 直接指定は礼儀が悪い、昔のやり方だ。

549
デフォルトの名無しさん[]   投稿日:2017/04/01 02:25:44  ID:m99QLuku.net
メモリ効率だけの問題なら大抵の場合は順番入れ替えるだけで問題ないしな

550
◆QZaw55cn4c [sage]   投稿日:2017/04/01 07:47:47  ID:1ZzXEpHO.net(2)
>546
サイズが無限にのびるかもしれないものをコピーするなんてだめだよ
昔はね,構造体はポインタを介してしかつかえなかったんだよ
コメント1件

551
デフォルトの名無しさん[sage]   投稿日:2017/04/01 08:31:33  ID:AOt54aKT.net
そうそう
スタックに自動変数とかも言語道断
全部staticじゃなきゃね
コメント1件

552
◆QZaw55cn4c [sage]   投稿日:2017/04/01 13:26:49  ID:1ZzXEpHO.net(2)
>551
スタックに自動変数はあたりまえだよ‥static おじさん,じゃないつもりなんだが‥
構造体はポインタで扱うべきもので,実体をコピーするのはなるたけ避けたいね
C++ では void f(const C &arg) って,可能ならば const と参照の縛りをできるだけいれるよね,余計なコンストラクタを走らせないために

K&R1 は教育的な配慮に優れた実装だと思うんだ‥

553
デフォルトの名無しさん[sage]   投稿日:2017/04/02 14:13:23  ID:SQNmFUeK.net
SOCKADDRが一言
コメント2件

554
◆QZaw55cn4c [sage]   投稿日:2017/04/02 17:06:04  ID:XkKG9LQx.net(2)
>553
手元のソースをみると
clientSocket = accept(serverSocket, (LPSOCKADDR)&clientSockAddr, &addrLen);
とか
if (connect(destSocket, (LPSOCKADDR)&destSockAddr, sizeof(destSockAddr)) == SOCKET_ERROR) {
とか,構造体のポインタを渡しているね
由緒正しき Berkeley socket では,構造体をコピーするなんて教育的ではない書き方は許していないよ

555
デフォルトの名無しさん[sage]   投稿日:2017/04/02 17:31:42  ID:QFdfGGyb.net(2)
つまり>553はK&Rおじさんにも劣る存在

556
デフォルトの名無しさん[sage]   投稿日:2017/04/02 18:21:59  ID:XkKG9LQx.net(2)
K&R1 おじさん,と
K&R2 おじさん
は区別したまえ,若造

557
デフォルトの名無しさん[sage]   投稿日:2017/04/02 19:26:19  ID:QFdfGGyb.net(2)
どっちも時代遅れの老人でしょ
K&Rなんて昔存在したという噂でしか知らない
万葉集とか古事記みたいなもの?
コメント1件

558
デフォルトの名無しさん[]   投稿日:2017/04/02 20:22:15  ID:II71H9Zi.net
func1(a, b)
  int a;
  long b;
{
}

559
デフォルトの名無しさん[sage]   投稿日:2017/04/02 22:22:37  ID:JMz4l+Qd.net
> &destSockAddr,
> sizeof(destSockAddr)

由緒正しきBerkeley Socketも昔はこういう書き方したな
コイツは進歩が20年前で止まってるのか
今この書き方する奴は死刑でいい
コメント1件

560
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:11:21  ID:zmcqSa2a.net
便乗で申し訳ないが、値渡し、参照渡し、ポインタ渡し、の話で
ポインタ渡しといっても、C++の場合はナマポは嫌われて、スマポを使いましょう
ってことになっていると思うんだけど、これはどう渡すのが普通?
スマポを値渡しするのか、参照渡しするのか
はたまたスマポを剥いで、ナマポで渡すのか
個人的に統一しきれないっつーか
所有権やら生存期間やらリソース管理やらが関係してくるなら
スマポで渡すI/Fじゃないとまずいだろうし
逆にそういうのが関係ないなら、スタック上の自動変数を渡したいとかも考えると
ナマポで渡すI/Fのほうが都合が良かったり、どーなんだろ
一度ナマポに戻すと二度とshared_ptrに変換できないって制限がね
言語側でなんとかせずに、ライブラリで解決しようとした弊害かな
ちょうどよいバカよけなんかも知らんが
コメント1件

561
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:13:25  ID:6tq4Ne3Z.net
参照一択

562
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:24:57  ID:xNqaI0VS.net
>スマポを値渡しするのか、参照渡しするのか
>はたまたスマポを剥いで、ナマポで渡すのか
スマポの値渡しと生保は使い分けが必要だが、スマポの参照渡しだけはアホの所業。
とスコットメイヤーが言っていたような

563
デフォルトの名無しさん[]   投稿日:2017/04/02 23:43:46  ID:yhAnz0vw.net
>560
shared_ptrはその名の通り所有権を共有する場合のみ使うもの
で、そういう場合は値渡しでもいいよ。中でmoveすれば
所有権を共有しないなら、nullptrを許容するならナマポそうじゃないなら参照
あんまり無いけど所有権を渡した先に移動させるならunique_ptr

564
デフォルトの名無しさん[sage]   投稿日:2017/04/02 23:58:32  ID:TsXu0WT4.net
所有権渡したくないならunique_ptrで持っている呼び出し元がgetでナマポを渡すかdereferenceして参照渡すかだな

565
デフォルトの名無しさん[sage]   投稿日:2017/04/03 00:00:55  ID:Jbp2gIKE.net
ナマポで渡してもshared_ptrを再取得する方法はあるだろ
まあ前提がいるが

566
デフォルトの名無しさん[sage]   投稿日:2017/04/03 00:34:15  ID:qQvnlfYK.net
うむむ、なるほど
ポインタらしき物にこれだけ多くの種類があってI/Fで縛ってしまうのは
一見面倒そうで、最近の流行というか静的型言語的には
型安全と見るべきなんだろうかしら
安易なGC言語より良いかもしれん、単純に情報量は多い
また一つC++が好きになった
うっかり循環参照したら怖いとか
コンパイラのバージョン違いでSTLやmallocの実装に
差異が有ることを前提に組まなきゃならないとか、玉にキズもあるけれど

567
◆QZaw55cn4c [sage]   投稿日:2017/04/03 06:55:53  ID:VwtRd/3a.net(3)
>559
C/C++ で生書きするなら今もおなじだよ

568
デフォルトの名無しさん[sage]   投稿日:2017/04/03 07:40:50  ID:dyU+EMvQ.net
型に対してじゃないのに括弧つけるの?

569
デフォルトの名無しさん[sage]   投稿日:2017/04/03 08:48:24  ID:WaUkCV9r.net
そこはインデントや{}の位置が人によって違ったりするアレだろ

570
◆QZaw55cn4c [sage]   投稿日:2017/04/03 19:32:41  ID:VwtRd/3a.net(3)
>557
K&R2 は C89 準拠だよ‥C89 が時代遅れだというけれども,いろんなことは C89 のときからやってきていて,C99 で追認された,というだけだよ
コメント1件

571
デフォルトの名無しさん[sage]   投稿日:2017/04/03 20:29:22  ID:5hra1L5C.net
>570
あいわかった
お前は今後「K&R1おじさん」(略して「K&Rおじさん」)な
どうせ定数defineや関数マクロまみれなんでそ
コメント1件

572
◆QZaw55cn4c [sage]   投稿日:2017/04/03 21:53:46  ID:VwtRd/3a.net(3)
>571
略しないほうがいいよ‥
K&R2 おじさん=C89 はまっとうなCer, K&R1 おじさんは時代遅れ,この二つは全然違うよ
コメント1件

573
571[sage]   投稿日:2017/04/03 22:02:42  ID:ldINtwle.net
>572
つまりお主(K&R1おじさん)は
K&R2おじさんが自分と一緒くたにされることを
申し訳ないと感じてるのだな!?

(>543)
> それ,K&R1 から堕落したよね

(>550)
> サイズが無限にのびるかもしれないものをコピーするなんてだめだよ

(>552)
> K&R1 は教育的な配慮に優れた実装だと思うんだ‥

574
デフォルトの名無しさん[sage]   投稿日:2017/04/03 22:14:40  ID:Vb9tETQW.net
voidを返す関数には感心したな

生成されるコードは大して変わらないかも知れんけど

575
デフォルトの名無しさん[sage]   投稿日:2017/04/04 01:00:11  ID:jC2xfRDP.net
関数プロトタイプを除けば、K&R1で十分かもしれないな
voidを返す関数? int でいいんだよ
コメント1件

576
デフォルトの名無しさん[sage]   投稿日:2017/04/04 15:11:19  ID:AeH3x9f/.net
戻り値をどうするかはcallerの勝手だからな

577
◆QZaw55cn4c [sage]   投稿日:2017/04/04 19:47:09  ID:xNF4clmU.net
>575
確かに関数プロトタイプは有用だね,これがないと結構ミスるかもしれないね
void を返す関数?int でいいんだよ

578
デフォルトの名無しさん[sage]   投稿日:2017/04/04 20:27:50  ID:/PIYb7TP.net
int funca01(...);
int funca02(...);
int funca03(...);

579
デフォルトの名無しさん[sage]   投稿日:2017/04/04 23:08:17  ID:YUY8Mb54.net
老人は意味とか概念を理解しようとしないから嫌
「bool? intでいいだろ」
「forループ?本質はgotoと同じ」
「enumなんてintでいいだろ」
ホントもう存在が害悪
コメント2件

580
デフォルトの名無しさん[sage]   投稿日:2017/04/05 00:33:27  ID:DVg/5L4N.net(2)
>550
何が「昔はね」だよw
Qちゃんその当事Cなんて触ってなかったろ?
アンタ最近(たかだか数年?)プログラミングで遊び出しただけの人でしょ
コメント1件

581
デフォルトの名無しさん[sage]   投稿日:2017/04/05 02:38:54  ID:ZJf7oEgw.net
>579
「static const intなんてenumでいいだろ」
こうですね

582
デフォルトの名無しさん[sage]   投稿日:2017/04/05 04:30:52  ID:ni2ET+sb.net
奴らは#defineだ

583
デフォルトの名無しさん[sage]   投稿日:2017/04/05 08:14:48  ID:Bh5NPBNH.net
マジックナンバー直書きでしょ

584
デフォルトの名無しさん[sage]   投稿日:2017/04/05 08:19:06  ID:qVk1sCwA.net
K&Rだと〜
c89だと〜
過去の異物がまだ現役だと信じて話してけるのがうざい
コメント1件

585
デフォルトの名無しさん[sage]   投稿日:2017/04/05 09:06:55  ID:ncDYJBnp.net(2)
それ言うならC自体が。
いまさらC++と互換性のないCを選ぶ理由がない。
コメント2件

586
デフォルトの名無しさん[sage]   投稿日:2017/04/05 10:35:04  ID:k0RY104y.net
>585
C++と互換性のないCってどんなの?

587
デフォルトの名無しさん[sage]   投稿日:2017/04/05 19:40:11  ID:IM5122PI.net
ベターC的な所全般だな
範囲forとか2進リテラルとかスレッドライブラリとか参照とか
Cにはnullptrすら無いし細かいところでは条件演算子が右辺値とか
ようするに別言語
オーバーロードに対するtgmathとかもう糞の臭いしかしない

588
◆QZaw55cn4c [sage]   投稿日:2017/04/05 19:44:22  ID:bDXscs5n.net(5)
>585
たしかに,C99 の数々の改悪は C++ との互換性を考慮していない悪手の連発,ほとほと困ってしまう

>584
C++ とほどほどの交換性のある C89 が最良だよ

589
◆QZaw55cn4c [sage]   投稿日:2017/04/05 19:46:32  ID:bDXscs5n.net(5)
>580
「K&R1 は構造体は基本的にポインタでしか扱えない」制限なんて,使ってもいなかったらわからないだろう?

590
580[sage]   投稿日:2017/04/05 20:02:06  ID:DVg/5L4N.net(2)
え?Qちゃんてサンデープログラマじゃないの?
職業プログラマでもないし
プログラミング暦せいぜい10年未満だと思ってた
コメント1件

591
◆QZaw55cn4c [sage]   投稿日:2017/04/05 20:07:28  ID:bDXscs5n.net(5)
>579
>「forループ?本質はgotoと同じ」
そんなことはいわないとおもうよ,K&R1 の時代から for はあるしね
きがつくと for(;;) { } と break だけで書いてたりするのはあるかもね,while 使いにくいとか,do while なんかマクロの中でしかつかわない,とかさ

enum?
#define でいいとおもうよ‥

592
◆QZaw55cn4c [sage]   投稿日:2017/04/05 20:08:45  ID:bDXscs5n.net(5)
>590
サンデーだよ
でも長いサンデーなんだ‥

593
デフォルトの名無しさん[sage]   投稿日:2017/04/05 21:26:45  ID:Kw8eDt7v.net
ニートじゃ分からんことも多いのでは

594
◆QZaw55cn4c [sage]   投稿日:2017/04/05 22:05:58  ID:bDXscs5n.net(5)
たしかにそのとおりだが,K&R2 = C89 こそ必要十分,ということはわかるよ

595
デフォルトの名無しさん[sage]   投稿日:2017/04/05 22:10:26  ID:mGFW5fgT.net(2)
そういうこと言ってるとそのうち技術についていけなくなるよ
コメント1件

596
デフォルトの名無しさん[sage]   投稿日:2017/04/05 22:22:23  ID:ncDYJBnp.net(2)
C99やC11って、新しい技術とかそういうんじゃないじゃん。

597
デフォルトの名無しさん[sage]   投稿日:2017/04/05 22:40:44  ID:mGFW5fgT.net(2)
規格

598
デフォルトの名無しさん[sage]   投稿日:2017/04/06 10:47:58  ID:jz0x7tjm.net
企画ものは好きじゃないからな

599
デフォルトの名無しさん[sage]   投稿日:2017/04/06 16:35:26  ID:w+UX2Wix.net
ころころ変わるんだから最新もクソも無いわけだが

pakomamaはガチらしいな

600
◆QZaw55cn4c [sage]   投稿日:2017/04/06 20:02:44  ID:Uar4T1Gl.net(2)
>595
別についていけなくてもいいよ,その殆どは自分には要らないものだから
それはそうと,これは!とおもう新しい技術って最近はどんなものがあるの?

601
デフォルトの名無しさん[sage]   投稿日:2017/04/06 20:16:13  ID:kFToYptL.net
まず、C#のasyncだのawaitだのはC++にも欲しいところ
というか、取り入れる方向で議論していたような
どのみちQZには使いこなせない機能だから知らなくてもよいけど
知れば発狂することだろう
コメント1件

602
◆QZaw55cn4c [sage]   投稿日:2017/04/06 20:21:15  ID:Uar4T1Gl.net(2)
まずC#をやらないとね‥でも Java に走ってしまった‥Java に同じようなのはないの?

603
デフォルトの名無しさん[]   投稿日:2017/04/06 22:33:11  ID:Ao1zg6OQ.net
>601
coroutineの事なら根本的な所が違うから勘違いしないようにな

604
デフォルトの名無しさん[sage]   投稿日:2017/04/07 20:08:34  ID:cdWiLUH2.net
馬鹿の特長:目的/機能の違いと実現するための実装の違いの区別がつかない

605
デフォルトの名無しさん[sage]   投稿日:2017/04/08 12:56:12  ID:TFmwEDa6.net
C#のawaitはGUIのスレッドを意識出来るので有用だが
C++のawaitはただ裏で走らせるだけの機能的には劣化版な気がしてならない
コメント2件

606
デフォルトの名無しさん[sage]   投稿日:2017/04/08 13:14:20  ID:bfo0YVHI.net
>605
c++で標準的なgui使うとすると何になるの?

607
デフォルトの名無しさん[sage]   投稿日:2017/04/08 13:49:52  ID:xnWSKOe7.net
>605
そりゃ C++ と C# のポリシーの違いだろ

608
デフォルトの名無しさん[sage]   投稿日:2017/04/09 22:32:13  ID:nTEmq1X3.net
C使ってる人で変数宣言を途中に書く人いる?
やめた方がいい?

609
デフォルトの名無しさん[sage]   投稿日:2017/04/09 23:00:21  ID:gthRNL4S.net
むしろそうして欲しいかな
勿論ブロックスコープは意識してる前提で

610
デフォルトの名無しさん[sage]   投稿日:2017/04/14 09:11:56  ID:ezi5K97R.net
初期のCはブロック先頭しかコンパイルが通らない
コンストラクタも型推論もないのに途中に置くメリットが少ない
初期化漏れというモンスターの隠れ家になりやすい
コメント3件

611
デフォルトの名無しさん[sage]   投稿日:2017/04/14 10:33:55  ID:L6e5ZQwW.net(2)
一応Cで書くときは関数ブロック直後に書いてるけど、それはそれでforで使うiとかを使い回す事になるから、C++みたくプログラマの良識を信じて(ブロックを意識して変数宣言すると信じて)、好きな場所で宣言出来た方が正解なんだろうな。

612
デフォルトの名無しさん[sage]   投稿日:2017/04/14 10:35:17  ID:L6e5ZQwW.net(2)
出来た方がと言うか、今は出来るんだから、した方が正解に訂正。

613
デフォルトの名無しさん[sage]   投稿日:2017/04/14 12:59:25  ID:Hdztr2ik.net
出来ることと乱用していいことはイコールでない
一瞬だけの一時変数を直前で宣言するのならありだけど
関数全体で使うなら頭で宣言すべきだし、そもそも中間で宣言するような長い関数は
短くなるよう見直すべき

614
デフォルトの名無しさん[sage]   投稿日:2017/04/14 13:04:43  ID:xSRtCFhF.net
魔法の言葉
ケースバイケース

615
デフォルトの名無しさん[sage]   投稿日:2017/04/14 19:32:18  ID:UiWlchtO.net
スコープは可能な限り狭く

おじいちゃんの遺言

616
デフォルトの名無しさん[sage]   投稿日:2017/04/14 19:38:55  ID:PNQsiXg9.net
初期化漏れはブロック先頭でしかかけない方が起こしやすいだろう

長い範囲で使う変数でも、変数ははじめて使うところで宣言した方が分かりやすいしバグも減る。

617
デフォルトの名無しさん[sage]   投稿日:2017/04/14 20:04:35  ID:Z/bjVn5R.net(2)
初期化忘れ防止はどこで宣言したってあんま関係ないというか
大差ないだろうな実際
必要になった時点で宣言するってことでよいと思う
さもないと上手くいかない場合もあるし
いちいち使いもしない「ダミーの値」で初期化するのは馬鹿らしいし
余計にバグりそう

618
デフォルトの名無しさん[sage]   投稿日:2017/04/14 20:13:31  ID:Z/bjVn5R.net(2)
auto result = func();
まぁこういう風にしたいわな

int result = 0;
・・・
result = func();
↑その「0」って初期化値は何なんですか、何を意味した「0」なんですか
では0の代わりに1で初期化したらどうなるんですか
この初期化値の意味は一体何なんですか
ってことになるしな
結局「0」とか「1」とかの初期化値はダミーでありプログラム上なんの意味もなかったりするし
逆に初期化値に意味がある場合もあるから余計にややこしくなる
bool flag = false;
if( func() )
{
  flag = true;
}
これらを区別したいから必要になった個所で宣言に一票
コメント1件

619
デフォルトの名無しさん[sage]   投稿日:2017/04/14 21:45:43  ID:spQE74XB.net
老人の「昔は良かった」を見て顔真っ赤にして論破しようとマジレス
みっともない

620
デフォルトの名無しさん[sage]   投稿日:2017/04/14 23:47:26  ID:9eRQSDOY.net
必要なものを必要なときに宣言する
それだけの話

621
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:16:54  ID:RtikNDCG.net(2)
>618
>この初期化値の意味は一体何なんですかってことになるしな

勝手に無駄な初期化しておいてどれだけ頭が悪いんだぜ
ぜんぜややこしくない
お前が馬鹿なだけ

622
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:26:22  ID:Af1/s0zG.net(3)
もともとが
初期化忘れを防ぐためには関数の先頭で宣言〜
への反論だったからだぜ

623
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:41:32  ID:RtikNDCG.net(2)
>622
日本語もわからないチンパンは無理して
コンピュータ使わなくても
祖国でオナニーしてればいいんだぜ

624
デフォルトの名無しさん[sage]   投稿日:2017/04/15 09:50:31  ID:Af1/s0zG.net(3)
君の疑問がどこにあるのか本当にわからないからどうでもよい

625
デフォルトの名無しさん[sage]   投稿日:2017/04/15 10:02:51  ID:Af1/s0zG.net(3)
それでもヒントとして>610への反論だったということだけは言っておこうか
「途中で宣言すると初期化もれしやすい」という風なことが書いてあるが
逆に>610は何故、先頭で宣言したら初期化漏れしにくい、と考えたか
どういったコードを想定しているかってことだな
要するに>610はブロックや関数の先頭だけ見れば初期化漏れしていることが直ぐわかると便利だね
って言いたいんだろうけど、それはどういうコーディングルールの元に言えることか
ということだな

626
◆QZaw55cn4c [sage]   投稿日:2017/04/16 17:51:30  ID:3PeEvH/A.net
for(int i = ...; ; ) が書けるようになったのは素直にありがたいな,と感じている
コメント1件

627
デフォルトの名無しさん[sage]   投稿日:2017/04/23 23:52:45  ID:IUq/7GPJ.net
>626
脳の進化が20年前で止まったチンパンはc89でも使ってろ
コメント1件

628
デフォルトの名無しさん[sage]   投稿日:2017/04/24 20:45:20  ID:et30sNFg.net
うきー

629
>627
C99 or later で便利になったことなんて,そんなにないんだよね‥

630
デフォルトの名無しさん[sage]   投稿日:2017/04/25 06:08:12  ID:X14wy5zc.net
数値計算とか特殊用途なライブラリ追加ってイメージ。
そりゃ、手間の割に汎用性がなかったら対応コンパイラも出てこないわ。

631
デフォルトの名無しさん[sage]   投稿日:2017/04/25 22:55:58  ID:EbISA0IE.net
インライン関数も行コメントもboolもrestrict も無しで
どうやってプログラム書いてんのか想像もつかない
snprintf無しとか無理ゲーだろ
コメント1件

632
デフォルトの名無しさん[sage]   投稿日:2017/04/26 02:18:40  ID:Kw1ZNGm3.net
restrict無しが想像つかないってどういうことだろ

633
デフォルトの名無しさん[sage]   投稿日:2017/04/26 09:07:13  ID:bRGeq+mw.net
restrict使ったことないなあ
大きく最適化されるの?

634
デフォルトの名無しさん[sage]   投稿日:2017/04/26 09:13:52  ID:rDz6/6sg.net
最適化はあんま気にしてなくて意味的なものかな
memcpyとmemmoveみたいな

635
デフォルトの名無しさん[sage]   投稿日:2017/04/26 09:20:57  ID:A4NmaPdj.net
そう言う機能はメーカー独自実装でC99決まるずっと前からスタンダードだったから、C99って実感が無い。。。

636
デフォルトの名無しさん[sage]   投稿日:2017/04/26 11:36:23  ID:O9yeoh6Z.net
>631
いやいやそれはさすがに想像力足りなくね?

snprintf無しは無理ゲーなのは同意するが
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
土曜プレミアム・世にも奇妙な物語'17 春の特別編 ★5 (442)フジ実況
世界ふしぎ発見!【世界を旅する BENTO】 (942)TBS実況
【マターリ】世にも奇妙な物語'17 春の特別編★1 (968)フジ実況
サタデーステーション ★1 (880)テレ朝実況
世界一受けたい授業 ★3 (887)NTV実況
めちゃ2イケてるッ!★2 (994)フジ実況
炎の体育会TV Part.3 [無断転載禁止]&#169;2ch.net (732)TBS実況
プラネットアース 第5集「高山 天空の闘い」★4 (937)NHK実況
このスレッドが人気です(ニュース系)
【軍事】フランス海軍の強襲揚陸艦「ミストラル」が佐世保基地に入港 日本、英国、米国の部隊を乗せ初の4カ国共同訓練へ ★6 (392)ニュー速+
【調査】40代、35%が「貯蓄ゼロ」★2 (909)ニュー速+
【軍事】フランス海軍の強襲揚陸艦「ミストラル」が佐世保基地に入港 日本、英国、米国の部隊を乗せ初の4カ国共同訓練へ ★5 (1000)ニュー速+
【サッカー】徳島サポーターがボールボーイに水かけ! ★2 (1000)音楽・芸能ニュース
【サッカー】<ボールボーイを小突いて一発退場>徳島DF馬渡「感情がバッと出てしまった…」試合後ボールボーイに謝罪 (1000)音楽・芸能ニュース
【芸能】ダウン症の息子、進路どうすれば 奥山佳恵さん悩む選択 (496)音楽・芸能ニュース
【サッカー】<ボールボーイを小突いて一発退場!>徳島DF馬渡「感情がバッと出てしまった…」試合後ボールボーイの元へ向かい謝罪★2 (428)音楽・芸能ニュース
【軍事】北朝鮮が弾道ミサイル1発を発射し失敗 東京メトロなど一時運転見合せ★13 (1003)ニュー速+
プログラム板の人気スレ
オブジェクト指向って自然な文法だな 3 (575)
Excel VBA 質問スレ Part47 (705)
次世代言語議論スレ[Go Rust Kotlin Scala]第4世代 (150)
ねねっちと一緒にプログラムを勉強するスレ第2話 (600)
C言語なら俺に聞け 139 (862)
【統計分析】機械学習・データマイニング15 (158)
スレ立てるまでもない質問はここで 147匹目 (420)
くだすれPython(超初心者用) その33 (351)
推薦図書/必読書のためのスレッド 81 (905)
C++相談室 part130 (276)
ふらっと C#,C♯,C#(初心者用) Part127 (408)
C#, C♯, C#相談室 Part94 (64)
Pythonのお勉強 Part52 (873)
Git 15 (672)
Visual Studio 2015 Part8 (715)
Visual Studio 2017 Part2 (139)
Xamarin Part3 (845)
Swift part10 (462)
Java入門・初心者質問スレ Part.3 (140)
Ruby 初心者スレッド Part 59 (1000)
C# vs Java どっちが好き? その3 (194)
クラス名・変数名に迷ったら書き込むスレ。Part27 (948)
HSP総合スレ【part 10】 [無断転載禁止](c)2ch.net (302)
プログラミング言語 Rust 2 (817)
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (643)
Androidプログラミング質問スレ revision53 (220)
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 (636)
Androidプログラミング質問スレ revision53 (212)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 正常取得 - 6件 - 取得完了