スレを勃てるまでもないC/C++の質問はここで 23 [転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2015/01/04(日) 22:51:08.99ID:BvikwYSt過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
18 http://hibari.2ch.net/test/read.cgi/tech/1291571263/
19 http://hibari.2ch.net/test/read.cgi/tech/1308106024/
20 http://toro.2ch.net/test/read.cgi/tech/1316013463/
21 http://toro.2ch.net/test/read.cgi/tech/1342285511/
22 http://peace.2ch.net/test/read.cgi/tech/1399911167/
0002デフォルトの名無しさん
2015/01/04(日) 23:21:56.13ID:AZoVKcHR0003デフォルトの名無しさん
2015/01/06(火) 20:38:52.39ID:hpet63Tg質問宜しいでしょうか?
Linux用で変数が変化するまで待機するプログラムはsyscall、SYS_futexで出来ますでしょうか?
出来るならどのように書けば良いのか教えてください
0004デフォルトの名無しさん
2015/01/07(水) 01:03:17.52ID:9/4UCKaTmanとかで見れると便利だなあって思ったんだけどコマンドなんかない?
0005デフォルトの名無しさん
2015/01/07(水) 01:20:06.74ID:IbCBqkxU0006デフォルトの名無しさん
2015/01/07(水) 10:33:44.42ID:Jika4sDCビルドや実行は出来るのですが、何が原因でしょうか?
0007デフォルトの名無しさん
2015/01/07(水) 17:50:37.22ID:DIYY1wPV0008デフォルトの名無しさん
2015/01/07(水) 20:27:25.12ID:ArlGb+1Q何を検索しているんだ?
0009デフォルトの名無しさん
2015/01/12(月) 04:40:49.46ID:Pgt9wbS9たとえばCではmallocで確保した変数をfreeで
解放しないといけないのは理解できます
ですが二重解放をしてはいけないというのが理解できません
理解というよりはどういう仕組みになっているか気になります
なぜ解放してあるかをチェックしないのでしょうか
0010デフォルトの名無しさん
2015/01/12(月) 07:42:35.80ID:0gHWSTX6後でそのメモリ空間が再びmallocされたら、それを誤ってfreeすることになる。
0011デフォルトの名無しさん
2015/01/12(月) 08:29:34.28ID:JDGRgzhV・・・
free(p)
free(p)
の事だろ二重解放って
00129
2015/01/12(月) 10:34:49.47ID:Pgt9wbS9処理系によるとは思いますが、一般的な環境(Unix系、Windows等)ではどうなるのでしょうか
0013デフォルトの名無しさん
2015/01/12(月) 11:16:54.23ID:plV1fcgm0014デフォルトの名無しさん
2015/01/12(月) 12:02:21.69ID:dz9wpGuyたとえばヒープ領域とかヒープメモリで検索するといろいろと出てくるよ
http://www.atmarkit.co.jp/ait/articles/1408/28/news010.html など
余談だけど、むかしfjのC言語グループで
プログラムが終了する際にmallocした領域をイチイチfreeする奴は馬鹿だ、という情報工学の先生がいたなー
こんなセンセーに教育された学生はうちの会社にはいらないw
0015デフォルトの名無しさん
2015/01/12(月) 12:32:51.93ID:plV1fcgmそんな高級なことでなく、C/C++の規定で無効なアドレスに対する動作が決められてないだけだろ。
0016デフォルトの名無しさん
2015/01/12(月) 12:39:09.45ID:plV1fcgmコンパイラは「ファイルが存在しません」「メモリはすでに開放されています」と出そうとしたら可能だろうが
パフォーマンスと互換性からそうしないんだろう。
0017デフォルトの名無しさん
2015/01/12(月) 13:03:16.87ID:Pgt9wbS9なるほど
もしこのように実装されていたら(実際はもっと複雑なんでしょうけど)
一度目の解放後に双方向リストのリンクが変わっていたり、
確保していたアドレスに別の変数のメモリを確保していたら、
もう一度解放するとリンクが滅茶苦茶になる可能性がありますね
>>13, >>15-16
そういう可能性もありますか…
自分でも調べてみます
ありがとうございました
0018デフォルトの名無しさん
2015/01/12(月) 13:39:05.94ID:dz9wpGuy> 存在しないファイルをオープンしたとき、Cはエラーメッセージを出してくれない状況と同様かと。
#include <string.h>
char *strerror(int errnum);
#include <errno.h>
errno
エラーメッセージを出すように組まなきゃ出ないのは当たり前だが
0019デフォルトの名無しさん
2015/01/12(月) 15:35:19.43ID:GOoAet7Lどこが間違っているか教えていただけるととても助かります
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define max 1000 //最大繰り返し回数
#define eps 1.0e-5 //収束条件
double f1(double x);
double f2(double x);
double f3(double x);
double df(double x,int pf,int j);
void newton(void);
int main()
{
newton();
return 0;
}
void newton(void)
{
int(*pf[])() = { f1, f2, f3 };
int i,j;
double a=1, na;
printf("equation NO.\n");
printf("0: 3cos(x2)-sin(x)\n");
printf("1: x3-x2-x-3\n");
0020デフォルトの名無しさん
2015/01/12(月) 15:36:39.01ID:GOoAet7Lprintf("which equation:");
scanf("%d", &j);
if ((j < 0) | (j > 2)) return 0;
for (i=0;i<max+1;i++) {
na = a - (*pf[j])(a)/df(a,pf,j);
if (fabs(na - a)<eps) break;
a = na;
if (i== max) {
printf("収束しませんでした。\n");
exit(1);
}
}
printf("解は%fです\n", na);
}
0021デフォルトの名無しさん
2015/01/12(月) 15:37:16.70ID:GOoAet7L{
return 3*cos(x*x)-sin(x);
}
double f2(double x)
{
return x*x*x - x*x - x - 3;
}
double f3(double x)
{
return x*sin(x) + log(x);
}
double df(double x,int *pf,int j)
{
return ((pf[j])(x+eps)-f(x))/eps;
}
0022デフォルトの名無しさん
2015/01/12(月) 16:03:47.42ID:NYq12SDFif (...)
{
fprintf(stderr, "error: equation number is invalid\nplease input 0, 1 or 2\n");
exit(1);
}
0023デフォルトの名無しさん
2015/01/12(月) 16:39:30.74ID:KGNTKkPE0024デフォルトの名無しさん
2015/01/13(火) 09:17:24.80ID:p5zUoyxudouble (*pf[])(double)
じゃないのかな?
0025デフォルトの名無しさん
2015/01/13(火) 13:28:46.37ID:Xd+ASo4R0026デフォルトの名無しさん
2015/01/13(火) 17:23:23.52ID:p5zUoyxuすまん(_ _) 精進するわ orz
0027デフォルトの名無しさん
2015/01/15(木) 05:04:37.22ID:sN1/S68Lファイルの長さを短くするには
どうしたらできますか?
0028デフォルトの名無しさん
2015/01/15(木) 09:03:31.24ID:+X0UBnJQストリームなのにサイズを小さくできるわけないだろいい加減にしろ
強いて言えばftruncate
0029デフォルトの名無しさん
2015/01/15(木) 11:20:21.19ID:lMW8kkLcを警告対策で入れまくっているのですが、こんな長い文字列がソースの中の
至る所にあると目ざわりなので
UP() とか短い名前で定義しなおすみたいな小細工は、馬鹿でしょうか?
お勧めな方法を教えれ。
0030デフォルトの名無しさん
2015/01/15(木) 11:32:12.55ID:mt3DJv6M0031片山博文MZ ◆T6xkBnTXz7B0
2015/01/15(木) 14:57:44.01ID:OiYOltU9//#1
void func(int param) {
...
param = param;
}
//#2
void func(int /*param*/) {
...
}
0032デフォルトの名無しさん
2015/01/15(木) 18:26:35.10ID:lMW8kkLcアドバイスありがとうございました。
#2で行こうかなと思います。これをマクロで
#define コメント(a) /* a */
みたいなのが定義出来たら、
void func(int コメント(param)){
みたいに書けるかなと思ったのですが、こんなマクロは作れないでしょうか?
単なる興味です。
0033デフォルトの名無しさん
2015/01/15(木) 18:45:31.21ID:Fnh8Qa/J0034デフォルトの名無しさん
2015/01/15(木) 23:25:56.38ID:7CYyJ2nZ#define コメント(a)
でいいじゃん
0035デフォルトの名無しさん
2015/01/17(土) 13:12:48.82ID:46CXHtx0超余裕w
0036sage
2015/01/19(月) 12:55:39.27ID:0l2kTrnMgdb の pretty printer というやつがどうやってもうまく有効化できん。。
(gcc 4.8.4, gdb 7.8.1)
同じようなことできているひといますか?
0037デフォルトの名無しさん
2015/02/01(日) 07:06:55.66ID:RggaqYXQ問題が有るようなら誘導をおねがいします。
filesrc -> decodebin -> audioconvert -> appsink
appsinkからデータを取り出して弄ってappsrcに入れる
appsrc -> audioconvert(動かないので入れてみた) -> autoaudiosink
で音が出ません(gstreamer-0.10では動いていた)
gst_buffer_map( buffer, &info, GST_MAP_WRITE );
info.dataにデータを入れて(ここまでは入っているようです)
gst_app_src_push_buffer( GST_APP_SRC(appsrc), buffer );
gst_element_set_state( playpipe, GST_STATE_PLAYING );
で再生しています。(bufferが1秒に満たない場合は再生を止めてbufferがたまるまで待ちます)
ネットをあさってみたのですが、どうもbufferがわたっているのか設定が必要なのか再生時に問題が発生しているのか
よく分かりませんでした。なにかヒントを頂けると嬉しいです。
返信レスは遅れると思いますが、よろしくお願い致します。
0038デフォルトの名無しさん
2015/02/03(火) 00:49:09.47ID:O9Z5gBA+<stdio.h>をインクルードして、
getcとputcを使った箇所でエラーが出ました。引数が少ないとか言われたけど、
何を追加するかわからないし、そもそも本の通りにやったのに・・・何故エラー?
linux.c: In function ‘LoadMapData’:
linux.c:37:7: error: too few arguments to function ‘_IO_getc’
Map[x][y] = getc();
In file included from /usr/include/stdio.h:74:0,
from linux.c:1:
/usr/include/libio.h:434:12: note: declared here
extern int _IO_getc (_IO_FILE *__fp);
linux.c: In function ‘SaveMapData’:
linux.c:53:21: error: macro "putc" requires 2 arguments, but only 1 given
putc(Map[x][y]);
//37: Map[x][y] = getc();
//53: putc(Map[x][y]);
0039デフォルトの名無しさん
2015/02/03(火) 01:05:40.03ID:hgFb4HHg本の通りってどんな本使ってんだよ
0040デフォルトの名無しさん
2015/02/03(火) 01:36:23.06ID:QU1jdhIIgetc()の実態が何になってるか見てみて
0041デフォルトの名無しさん
2015/02/03(火) 02:45:00.34ID:O9Z5gBA+http://ohmoriws1.ms.kagu.tus.ac.jp/1997/sotsuken/miyakosi/c03.html
実践 linux システムプログラミング C for Linux って本500P弱あるんだけど
19Pのそれで止まってもう動けない泣きたいww
0042デフォルトの名無しさん
2015/02/03(火) 03:26:42.31ID:QU1jdhII0043デフォルトの名無しさん
2015/02/03(火) 03:46:21.13ID:O9Z5gBA+勉強になります。
これで見れますかね?
http://ideone.com/iRHNDJ
0044デフォルトの名無しさん
2015/02/03(火) 04:06:55.61ID:yGwE0+2uほんとうに本のとおりか?
なおすとすれば http://ideone.com/sPoJJs だがあまり意味の感じられない内容だ
0045デフォルトの名無しさん
2015/02/03(火) 04:33:33.26ID:O9Z5gBA+有り難うございます。できました!!
先を見ると、これを元にどんどん拡張していく感じのようです。
ガンガン進めてみます!
0046デフォルトの名無しさん
2015/02/03(火) 04:38:48.15ID:GMpj9RJ2質問です。
抽象クラス(親クラスとする)を継承した派生クラス(子クラスとする)を
親クラスの型のメンバー変数に子クラス型でnew()し、抽象化して保持してます。
このメンバーをdelete してすぐNULLを代入しても、参照が残ってるみたいで
エラーがでる場合があります。
抽象化しているオブジェクトの削除の、お作法みたいなものってありますでしょうか。
0047デフォルトの名無しさん
2015/02/03(火) 05:04:38.61ID:yGwE0+2u>参照が残ってるみたいでエラーがでる場合があります。
なぜそう判断した?
0048デフォルトの名無しさん
2015/02/03(火) 05:19:50.66ID:yGwE0+2u仮想デストラクタ
0049デフォルトの名無しさん
2015/02/03(火) 05:24:28.94ID:GMpj9RJ2deleteしたはずの親クラスに定義している純粋仮想関数への
アクセスをしているようで、アクセス違反でメモリリークを起こしています。
自分なりに調べて、親クラスのデストラクタをVirtualにするなど今試みていましたが、
だめでした。
http://shnya.jp/moin/C++%E3%81%AE%E8%90%BD%E3%81%A8%E3%81%97%E7%A9%B4#A.2BfRR8i07uYPOVomVwMG5.2FYA-
こちらのサイトの
純粋仮想関数の罠
の項の
しかし……私は嘘をつきました。抽象クラスのインスタンスを構築することはできるのです。
継承された具体クラスを構築している時に、一瞬ですが基底クラスは存在します。 継承されたクラスのコンストラクタが呼ばれる前に、純粋仮想関数が呼ばれた場合、プログラムは不正終了します。
が原因に近しいのはないかと踏んでいますが、具体的な対策が見出せません。
というのが恐らく一番近い原
0050デフォルトの名無しさん
2015/02/03(火) 07:10:28.26ID:GMpj9RJ2親クラスのコンストラクタかデストラクタが呼ばれるタイミングで
仮想関数が呼ばれていると pure virtual method called になるようで、
純粋にその場面では仮想関数を呼ばないように工夫することで解決しました。
>>47さん、お付き合い頂きましてありがとうございました。
0051デフォルトの名無しさん
2015/02/03(火) 09:26:12.35ID:orcEUXbEそもそも親クラスのコンストラクタ・デストラクタが純粋仮想関数を呼ぶように作られているというのが不思議だ。
もしかして最初から作り方を間違えていたのを、直し方を間違えたまま、現象だけ解決してるんじゃないか?
0052デフォルトの名無しさん
2015/02/03(火) 10:08:38.01ID:415X5y7Pコンストラクタ内での仮想関数呼び出しはいつもと同じようには機能しない
c++ コンストラクタ内での仮想関数呼び出し
でぐぐって勉強しとけや
0053デフォルトの名無しさん
2015/02/03(火) 10:27:16.30ID:vbeiF6Sp0054デフォルトの名無しさん
2015/02/03(火) 17:29:43.02ID:QU1jdhII親コンストラクタ
子コンストラクタ
子デストラクタ
親デストラクタ
の順番怪しくないの?
0055デフォルトの名無しさん
2015/02/08(日) 02:05:07.87ID:BueC27lRauto x = func();
と書くのと
auto * x = func();
と書くのは同じなんでしょうか。
下の例のxはポインタのアドレスになってしまうんでしょうか。
0056デフォルトの名無しさん
2015/02/08(日) 02:09:34.75ID:JJBPIwXc0057デフォルトの名無しさん
2015/02/09(月) 12:16:48.66ID:oe5uzBMpそこで宣言するのがx一つならどちらも同じでxはただのポインタ
宣言するのが二つ以上のときに違いがでる
// xとyは同じ型。どちらもポインタ
auto x = func(), y = func();
// エラー
// xはポインタだけどyは違うので初期化できない
// int *x = a, y = b;のときと同じようなこと
auto * x = func(), y = func();
0058デフォルトの名無しさん
2015/02/10(火) 17:29:32.16ID:6CiTLKPy何ですが、この後何を覚えると
良いでしょうか?
0059デフォルトの名無しさん
2015/02/10(火) 17:32:54.26ID:wTvHI6bs0060デフォルトの名無しさん
2015/02/10(火) 17:51:16.45ID:Igj7O7oB0061片山博文MZ ◆T6xkBnTXz7B0
2015/02/10(火) 17:55:47.93ID:ZZYSwCjN0062デフォルトの名無しさん
2015/02/10(火) 18:00:25.33ID:fc6wBG1e0063デフォルトの名無しさん
2015/02/10(火) 19:48:17.76ID:NjPy1BDRmap
あとコンパイラが対応してるなら楽できる便利機能として
auto や range based for あたり
0064デフォルトの名無しさん
2015/02/10(火) 23:20:53.99ID:6CiTLKPyレス有難うございます。
mapって言うのは少し知っているのですが
どういう状況で使ったらどんなメリット
が有るのかよく分かりません。
0065デフォルトの名無しさん
2015/02/10(火) 23:31:36.48ID:Aoer/888そんなもんAWK, Perlにもある。
mapがなかったら…
2本の配列を用意して、一方に文字列(Cなら2次元配列)、もう一方に数字をいれます。
おなじインデックスで、文字列および数値をとりだす。
たいへんだぁ(?)
それでできますが、mapなら
文字列 → 数値
が一発でできる
0066デフォルトの名無しさん
2015/02/10(火) 23:38:54.44ID:Aoer/888find
もう用意されている
イテレータもある
0067デフォルトの名無しさん
2015/02/10(火) 23:42:56.56ID:6CiTLKPy配列のインデックスに文字列が必要に
なる状況が思いつかないのですが、
どんなアプリを作るとそういう状況に
なりますか?
0068デフォルトの名無しさん
2015/02/10(火) 23:49:02.93ID:Aoer/888数字も文字列だ
名前
住所
年齢は、数字(数字を数値に変換すればいいが、数字のままでもいける)
性別は、2値でいい。これも文字列のままでいける
0069デフォルトの名無しさん
2015/02/10(火) 23:56:47.79ID:7yL7ZV6a文字列に限らずデータの対応付けぐらい普通にやるだろ
JSONとか知らない?
0070デフォルトの名無しさん
2015/02/10(火) 23:59:30.85ID:MwNGRsKL文字列じゃなくても連番ではない特殊な数値を関連付けに利用してもいいわけだし
0071デフォルトの名無しさん
2015/02/11(水) 00:14:07.04ID:vLqody7uC++のはキーに任意の型が使える
0072デフォルトの名無しさん
2015/02/11(水) 00:58:31.53ID:D/QOH3350073デフォルトの名無しさん
2015/02/11(水) 01:11:41.68ID:oz4RTyK1配列の中身を検索するときいちいち全部ループで回すのか
0074デフォルトの名無しさん
2015/02/11(水) 04:44:28.19ID:aYb/ZX4Zキー側データにメンバを追加できないとき、あるいは
非破壊的に値を保持したい時などに使う。
0075デフォルトの名無しさん
2015/02/11(水) 04:44:37.16ID:ZlZsHmR5処理速度重視か作成効率かどちらを取るかで考え方が変わるね
Cでとことん処理速度に拘ってた人は抵抗あるかも知れない
CPUやらハードの性能が上がれば、速度なんて後でついてくる位の気持ちになることが大事
0076デフォルトの名無しさん
2015/02/11(水) 04:52:35.15ID:aYb/ZX4Z「ここは高々数件だから配列に入れて検索した方が速いか」とかするとしても、
まずは map や unordered_map で実装しとくのがいいよね。
0077デフォルトの名無しさん
2015/02/11(水) 05:32:39.62ID:X7wVt/FuThis apple is red.
word = "apple"
words[word] += 1
空白区切りで、すべての単語を取り出し、
それらの使われた回数を数える
is, appleは2回
0078デフォルトの名無しさん
2015/02/11(水) 09:09:02.61ID:yrYT/hzdどういうふうに入力されるかわからないしアドバイスしようがないな。
宿題片付けたいだけなら宿題スレへ。
0079デフォルトの名無しさん
2015/02/15(日) 17:50:17.20ID:B1xPkbHYprivate:
Hoge &operator=(const Hoge &hoge){}
};
と
Hoge &Hoge::operator=(const Hoge &hoge){}
は同じなのでしょうか?
互換性があるかどうか調べるためにまず上を宣言してから、
下に書き換えるべくいじくったらこれでエラーが出なくなったのですが
0080デフォルトの名無しさん
2015/02/15(日) 18:35:49.01ID:auAw66hRクラス定義の中でメンバ関数の定義を書けば暗黙的にinlineになる
違いはそれだけなので
> 下に書き換えるべくいじくったらこれでエラーが出なくなったのですが
は気がついていなかったミスが書き換えてるうちに勝手に修正されただけだろう
0081デフォルトの名無しさん
2015/02/15(日) 21:37:37.08ID:cBAJ0xmb0082デフォルトの名無しさん
2015/02/15(日) 22:23:37.30ID:oIrwp9Auすればいいだろ
https://ideone.com/b2UMf5
クラス定義に書いてない変数を
クラス定義の外で定義したいのであれば無理
0083デフォルトの名無しさん
2015/02/15(日) 22:59:17.65ID:cBAJ0xmbstatic 型名 クラス名::変数名のように書いて一気にこなそうと思ったんですが、
その際にストレージクラスは宣言できないって怒られちゃって
当初考えていた通りヘッダの宣言で定義しておくことにします ありがとうございました
0084デフォルトの名無しさん
2015/02/16(月) 12:07:40.11ID:vGSFacHjclose(1);する前に
fclose(stdout);みたいな事がしたいのです。
0085デフォルトの名無しさん
2015/02/16(月) 12:22:35.58ID:DWHkwfYs0086bti
2015/02/16(月) 12:45:55.99ID:KKpFX0J7このリンクからビットコイン購入・販売所bitFlyerにご登録すると
1000円分のビットコインがもらえます!
https://bitflyer.jp/gift/fn0tlipl
話のネタに、とにかく一応もらっておくといいです。
間もなく終了するようです。
0087デフォルトの名無しさん
2015/02/16(月) 13:01:04.61ID:vGSFacHj回答ありがとうございます。
cout.flush();close(1);
で大丈夫でしょうか?
処理の途中で標準出力をクローズしたいのです。
0088デフォルトの名無しさん
2015/02/17(火) 18:52:31.46ID:FQU0SBpodouble d2 = DBL_MIN;
double d3 = 1.0;
とした時に
if(d1==d2)
if(d1==d3)
みたいな比較をしても良いのでしょうか?
0089デフォルトの名無しさん
2015/02/17(火) 20:23:53.31ID:WP6LEt4U0090デフォルトの名無しさん
2015/02/17(火) 22:04:02.88ID:p0gP7/RW0091デフォルトの名無しさん
2015/02/17(火) 22:10:55.98ID:y95d2Nc1if (d1 == DBL_MIN)
の成立が保証されてるかじゃないのか?
0092デフォルトの名無しさん
2015/02/18(水) 00:21:05.39ID:CW9ZV6LJ「DBL_MINはdouble型で表現可能な最小な正数」だから
1.0ではないんじゃね?
ググったけど
2.225074e-308
みたいな値だろ?
等号での比較は「偽」だろうけど比較をする事自体は問題無いよ。
答えになってるかな?
0093デフォルトの名無しさん
2015/02/18(水) 00:23:35.03ID:CW9ZV6LJそんな答えを求めているのかな。
0094デフォルトの名無しさん
2015/02/18(水) 12:24:16.22ID:cxgRNEsa0095デフォルトの名無しさん
2015/02/18(水) 13:16:02.61ID:492Iwxk80096デフォルトの名無しさん
2015/02/18(水) 13:38:50.13ID:9GHJc1N/しても構わないが浮動少数では誤差が出るから正確な答えがでない可能性は高いよ
0097デフォルトの名無しさん
2015/02/18(水) 16:30:13.29ID:UnM/2wIqコンパイラや仕様によって起きるのだろうか 気になる
0098デフォルトの名無しさん
2015/02/18(水) 20:56:44.33ID:wgfycviwdouble d1 = DBL_MIN;
この時点で値が変わってるだろ
0099デフォルトの名無しさん
2015/02/18(水) 21:07:49.24ID:s5Vrc8eg0100デフォルトの名無しさん
2015/02/19(木) 13:19:57.14ID:PwGKmnLr0101デフォルトの名無しさん
2015/02/19(木) 14:34:52.84ID:fdKBoaCS同じ型同士で同じ値を代入しただけなら==でも判定できそうな気がするけど(詳細は知らん)
以下のような場合は判定できないと思った方がよいと思うよ
doubleに代入した時点で厳密に1000ではなくなるから
int i = 1000;
double d = 1000;
if ( i == d )
実際に1000だとうまくいくかは試してない
0102デフォルトの名無しさん
2015/02/19(木) 14:43:34.31ID:7oFSdK4Oどっちもint(1000)がdoubleに暗黙で変換されてるから一緒だろ
0103デフォルトの名無しさん
2015/02/19(木) 15:09:24.04ID:IU8xWBqQ等号が成立しなくなる理由はいくつかあって、
a)循環少数になる場合
b)基数が10でない為正確な数値を表現出来ない事
c)桁落ち
a)は数値で計算してる為の丸め誤差
b)はC++のdoubleなんかの小数点以下の数値の表現の問題。
c)はC++のdoubleなんかの有効桁が固定されている為の問題。
でおそらくb)の説明だよね。
であるなら整数であればたぶん大丈夫なはず。
0104デフォルトの名無しさん
2015/02/19(木) 16:03:16.25ID:MTWKGuO0計算機イプシロンより絶対値の小さい値a,bがあるとして
数学上はa≠bでも、変数に格納して両者を比較するとプログラムの動作ではa=bとなってしまう
だから「==」できっちりと判定できるとは限らない
まぁこれを逆手にとって、たとえば、二つの浮動小数点数の差の絶対値が計算機イプシロンより小さければ
「==」とみなす‥というコーディングをしたりします
0105デフォルトの名無しさん
2015/02/19(木) 16:19:57.40ID:PwGKmnLr整数を扱っているうちは大丈夫、小数点下も同じ値を代入した直後なら多分大丈夫、と
計算機イプシロンのほうはぴんとこないけど。
doubleの内部的な動きがいまいちぴんとこないから、double避けて書いてる…使う用事がないことを祈りつつ
0106デフォルトの名無しさん
2015/02/19(木) 16:30:34.07ID:7oFSdK4OJavaとかC#とかの多くの言語で採用されてる方法だから
固定長の浮動小数点型でこれ以外の方法で実装されてる環境を探す方が難しいぐらい
0107デフォルトの名無しさん
2015/02/19(木) 16:32:53.74ID:MJrK0vGE0108デフォルトの名無しさん
2015/02/19(木) 17:28:23.19ID:GY4p95fnゲームでの座標計算って大抵floatかdoubleじゃね
理由は主に斜め移動などの少数になる演算
キャスト使って全部無理やりintにはできるけど
0109デフォルトの名無しさん
2015/02/19(木) 18:43:58.71ID:x3p0g+OHdouble使うなら基礎知識として浮動小数点誤差は知っておくべき
0110デフォルトの名無しさん
2015/02/21(土) 20:03:43.80ID:l44iTosqメモリの使用量が徐々に増えていくのですが、それをグラフに書きたい
のですが、自分でメモリ使用量調べるのは面倒なので、何か簡単なツールで
特定のプロセスIDを指定したら、そのプロセスのメモリ使用量を
10分ごととかでファイルに保存してくれるようなそんなツール無いでしょうか?
あれば教えてください。
0111デフォルトの名無しさん
2015/02/21(土) 20:06:47.17ID:g1tTND+u0112片山博文MZ ◆T6xkBnTXz7B0
2015/02/21(土) 20:09:37.81ID:swM6o0zc0113デフォルトの名無しさん
2015/02/21(土) 20:28:23.41ID:l44iTosqコツを教えてください。
0115デフォルトの名無しさん
2015/02/21(土) 20:36:49.08ID:MtQcH0ETその質問が出るレベルなら、newをプロジェクトから検索、deleteを検索
数が合ってたら、
Createとreleaseで同じように
でも増えていくメモリの大きさから大体見当つくだろ
0116デフォルトの名無しさん
2015/02/21(土) 20:42:14.17ID:qCqW+14K個人的にはラッパ(new/delete のオーバーロード)できっちり把握する
メモリ以外のリソースも同様に
0117デフォルトの名無しさん
2015/02/21(土) 20:47:14.92ID:78/Ireu00118片山博文MZ ◆T6xkBnTXz7B0
2015/02/21(土) 20:52:12.85ID:swM6o0zc0119デフォルトの名無しさん
2015/02/21(土) 21:35:37.29ID:MtQcH0ET0120デフォルトの名無しさん
2015/02/21(土) 23:32:02.44ID:Ujipb/FI知らない人がいたらどんどん教えていくべき
なお物によっては使えなかったり結局明示的なdeleteに近い処理を書く必要がある模様
0121デフォルトの名無しさん
2015/02/21(土) 23:41:25.44ID:Ujipb/FI0122デフォルトの名無しさん
2015/02/22(日) 00:27:11.07ID:qWw/awpsこの問題がわからないんですが
0123デフォルトの名無しさん
2015/02/22(日) 00:35:44.08ID:0njaRTk3http://peace.2ch.net/test/read.cgi/tech/1408962564/
0124デフォルトの名無しさん
2015/02/22(日) 12:28:56.04ID:2HG+oh7Eみたいな文の :: (コロン2個)って何の意味がありますか?
初めて見たのですが。
0125デフォルトの名無しさん
2015/02/22(日) 12:31:08.64ID:RFHyaT+D意味はよくわかっていません
0126デフォルトの名無しさん
2015/02/22(日) 12:37:32.41ID:2HG+oh7E0127デフォルトの名無しさん
2015/02/22(日) 12:44:15.66ID:vG1FeYAOJAVAの出力処理が長すぎて萎えたんだけどwwww
0128デフォルトの名無しさん
2015/02/22(日) 12:47:28.45ID:J+2bP69K名前解決演算子(name resolution operator)で調べてこい。
C++で_stricmpがグローバル名前空間の_stricmpであることを明示するために使用
int v;
namespace N1 {int v;}
int j = ::v; // 一行目のvを指す
0129デフォルトの名無しさん
2015/02/22(日) 12:47:38.44ID:TRUNFqhM名前空間の指定だよ、この場合はグローバル名前空間を指す
0130デフォルトの名無しさん
2015/02/22(日) 12:52:37.49ID:2HG+oh7Eなるほど分かりました。
ありがとうございます。
0131デフォルトの名無しさん
2015/02/22(日) 13:58:32.00ID:+D+VdwAu一部分のみを見てしまったためわからなくなってしまったという
0132デフォルトの名無しさん
2015/02/22(日) 15:59:14.17ID:i2HJL1En0133デフォルトの名無しさん
2015/02/23(月) 17:05:50.97ID:pMjCWY3Nvoid func(int &i){
i_g = i;
i_g = 777;
i = i_g; // この行無しで
}
void main()
{
int i = -1;
func(i);
printf("i = %d\n", i); // 777
}
これ実行すると、777と出力出来るのですが、[この行無しで]の代入無しでも
同じ結果にすることは可能でしょうか?
つまり、funcの中で,i_gに何らかの値を代入するだけで、main()に戻った時にもその
値がiに戻って来るように出来ますか?
0134デフォルトの名無しさん
2015/02/23(月) 17:10:10.02ID:Su9wFgfTprintf("i = %d\n", i_g);
じゃダメなのか
0135デフォルトの名無しさん
2015/02/23(月) 17:10:11.68ID:zZTzM7Nfint &i=i_g;
i_g=777;
とりあえず、そんな糞コード書く前にポイントとか参照の基礎を学べ
0136デフォルトの名無しさん
2015/02/23(月) 17:17:56.49ID:pMjCWY3Nmainは変更しない前提でお願いします。
0137デフォルトの名無しさん
2015/02/23(月) 17:21:00.06ID:Su9wFgfTどちらにしろiに代入するしか方法はないが
0138デフォルトの名無しさん
2015/02/23(月) 17:26:42.80ID:pMjCWY3N説明不足ですみません。
int i_gではなく
int *p_g
としてfunc内で
p_g=&i
とすれば
*p_gに代入した値はmainに戻せますが
ポインタ変数を使わずに実現出来ますか?
参照だけで出来ますか?
0139デフォルトの名無しさん
2015/02/23(月) 17:27:41.57ID:zZTzM7Nfvoid func(int &i_g){
i_g=777;
}
はい、要件満たしてやったぞ。
0140デフォルトの名無しさん
2015/02/23(月) 17:28:43.79ID:Su9wFgfT0141デフォルトの名無しさん
2015/02/23(月) 17:30:54.02ID:pMjCWY3Ni_gはグローバル変数でお願いします。
0142デフォルトの名無しさん
2015/02/23(月) 17:32:14.07ID:zZTzM7Nfグローバル変数である必要がありません。
0143デフォルトの名無しさん
2015/02/23(月) 17:33:22.68ID:pMjCWY3N私には必要なんです
0144デフォルトの名無しさん
2015/02/23(月) 17:33:31.85ID:Su9wFgfT0145デフォルトの名無しさん
2015/02/23(月) 17:46:15.63ID:zZTzM7Nfポインタにしたとしてどう使うんだよそのグローバル変数は
0146デフォルトの名無しさん
2015/02/23(月) 17:47:44.44ID:RAjknDkeこの行を削らないといけない理由は?
0147デフォルトの名無しさん
2015/02/23(月) 23:57:52.51ID:pMjCWY3Nそんなに深い理由はないのですが、
削っても出来るかなという素朴な疑問でした。
0148デフォルトの名無しさん
2015/02/23(月) 23:59:40.53ID:cWkGfwjm君の頭と貴重な時間を削ってもできるかな
0149デフォルトの名無しさん
2015/02/24(火) 03:22:23.24ID:G4iqMc1Sろくに答えもしない人はたいがい「なんでそんな事をするのか」だから答えなくていいよ
0150デフォルトの名無しさん
2015/02/24(火) 06:25:16.30ID:RxQOhZJD間違っても仕事にすんなよまわりが迷惑するから。
0151デフォルトの名無しさん
2015/02/27(金) 02:32:04.08ID:GOSdj3hNint skip = 4;
auto p = reinterpret_cast<uint16_t (*)[skip]>(data);
printf("%d %d %d\n", p[0][0], p[0][1], p[0][2]); // => 0 1 2
printf("%d %d %d\n", p[1][0], p[1][1], p[1][2]); // => 4 5 6
こうやって変数で配列のサイズを指定するのって、
c++11 でも規格ではなく GCC独自拡張でしょうか?
0152デフォルトの名無しさん
2015/02/27(金) 02:34:29.96ID:Iu53F2aP0153デフォルトの名無しさん
2015/02/27(金) 09:54:11.83ID:MHy9s9iYcでならc99で規格化されてるがc++では(今のところ)コンパイラの独自拡張
0154デフォルトの名無しさん
2015/02/27(金) 10:19:22.37ID:vnP6fImOっ https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable-Length
0155デフォルトの名無しさん
2015/03/09(月) 03:55:55.20ID:oMflzd71char buff2[定数];
if(strcmp(buff2,"++")==0){
buff2 = buff1 +1;
}
という式を書いたのですがbuff2は変更不可能というエラーが出てしまいます。ポインタなのが問題らしいのですがポインタでなくbuff2に入っている文字列の数値を計算して書き換えるにはどう修正すればいいのでしょうか?
buff2の中身が"++"の時はbuff1(数値)に1加えた数値をbuff2に代入するという式を書きたいです。
0156デフォルトの名無しさん
2015/03/09(月) 04:16:20.53ID:UEMwm/ZMポインタとアドレス、配列アドレスと配列バッファを混同してる
buff1とbuff2の値を見て見るべき
ついでにヒントとしてbuff1[0]とbuff2[0]の値もね
0157デフォルトの名無しさん
2015/03/09(月) 04:47:05.93ID:C8nwOi6uint num=atoi(buff1);
num=num+1;
sprintf(buff2,”%d”,num);
0158デフォルトの名無しさん
2015/03/09(月) 05:46:16.97ID:d8cjeDnQif(strcmp(buff2, "++") == 0) {
sprintf(buff2, "%d", atoi(buff1) + 1);
}
0159デフォルトの名無しさん
2015/03/09(月) 07:47:02.31ID:N0bMeNoevector<int>::iterator begin,end;
2行目の::はなんですか??
名前空間に属している事を示す::と、クラスのメソッドである事を示す::しか知らないのですが
iteratorはvectorクラスのどういうものなんですか?
0160デフォルトの名無しさん
2015/03/09(月) 08:00:26.85ID:lCvEf7bM:: はスコープ指定演算子で、iterator は vector のネストされた内部のクラス
0161デフォルトの名無しさん
2015/03/09(月) 08:18:41.90ID:N0bMeNoeご返答ありがとうございました
0162デフォルトの名無しさん
2015/03/09(月) 17:29:38.15ID:b0X+6jZ8みたいなエラーが出ますが、対策としては自前で代入演算子を定義する
など有るみたいですが、そんなことしなくても、const以外のメンバ変数は
普通に代入して、constメンバは何もしないみたいな処理を勝手にやってくれる
ような楽ちんな方法はありませんか?VS2013です。
0163デフォルトの名無しさん
2015/03/09(月) 18:19:22.31ID:Z3OokkBMstatic
0164デフォルトの名無しさん
2015/03/09(月) 18:37:06.07ID:b0X+6jZ8うまく行きました。ありがとうございました。
0165デフォルトの名無しさん
2015/03/09(月) 22:50:27.46ID:AQB4uEfRありがとうございました。おかげで無事できました。
javascript齧ってた程度なのでポインタやアドレスはイマイチわからない……C系は難しい
0166デフォルトの名無しさん
2015/03/10(火) 02:54:49.84ID:J40sdYqtJavascriptも文字列のまま四則演算とか出来ないでしょ。
Cの文字列は色々面倒だからC++のstd::string使った方がいいよ
0167デフォルトの名無しさん
2015/03/10(火) 10:30:47.33ID:Zsa8IBTereturn std::malloc(size);
}
void operator delete(void* p, const char* file, int line) {
std::free(p);
}
こんな感じでnew/deleteをオーバーロードしたとき、
オブジェクト作成は
Hoge* p = new (__FILE__, __LINE__) Hoge;
のように記述できますが、破棄は
p->~Hoge();
::operator delete(p, __FILE__, __LINE__);
のようにしなければならないようで若干面倒です。
こちらも例えば
delete (__FILE__, __LINE__) p;
のように記述する文法は用意されていないのでしょうか?
0168デフォルトの名無しさん
2015/03/10(火) 12:46:26.98ID:Zt65CvSc0169デフォルトの名無しさん
2015/03/12(木) 13:38:06.69ID:bakilSIy0170デフォルトの名無しさん
2015/03/14(土) 00:04:39.33ID:rKRQmeKw受信したパケットを
AA BB CC
みたいな感じで表示させたいです。
また、パケットの先頭から何bitまで抽出するにはどうしたらいいですか?
0171デフォルトの名無しさん
2015/03/14(土) 00:08:03.77ID:OeJNA3gMお前は通信の前に基礎を勉強しろ
0172sage
2015/03/14(土) 07:48:45.98ID:heK9BCvfテキトーなこと教えんな
氏ね
0173デフォルトの名無しさん
2015/03/14(土) 10:29:23.78ID:PbzhoJJPmutable
0174デフォルトの名無しさん
2015/03/14(土) 10:36:07.35ID:ulb+QBESパケット内容をダンプするのが目的なのか、ネットワークプログラミングを学習するのが目的なのか
前者ならWireSharkというツールが既にありますし、後者ならトランスポート層に直接アクセスする必要があるのでSocketでは無理。たぶんドライバレベルの知識が必要でしょう
0175デフォルトの名無しさん
2015/03/14(土) 12:55:42.34ID:PbzhoJJPトランスポート以前でモニタ・加工ってことな。
0176デフォルトの名無しさん
2015/03/14(土) 13:01:04.16ID:rKRQmeKwパケットの 内容をそのままダンプしたいだけですね。
確かにワイヤシャークなどのツールがありますが、勉強のために簡単なものを
自分で作ってみようとおもいました。
0177デフォルトの名無しさん
2015/03/14(土) 13:43:04.34ID:ulb+QBESSOCK_RAWを使えばできそうですね。失礼しました
0178デフォルトの名無しさん
2015/03/14(土) 13:47:33.07ID:ulb+QBES>>176
こちらが参考になるかも
http://www.whiteboard.ne.jp/~admin2/index.php?Linux%20socket%20%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2F%A5%D1%A5%B1%A5%C3%A5%C8%A5%E2%A5%CB%A5%BF%A5%EA%A5%F3%A5%B0%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0
0179デフォルトの名無しさん
2015/03/14(土) 23:00:02.68ID:rKRQmeKwありがとうございました。
0180デフォルトの名無しさん
2015/03/15(日) 05:23:07.02ID:NNq1Z6It0181デフォルトの名無しさん
2015/03/15(日) 06:03:16.60ID:NNq1Z6It0182デフォルトの名無しさん
2015/03/16(月) 17:42:14.07ID:c3Hz1edWどうすれば、良いですか?
//ソケット作成
sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
略
memset(&sll, 0xff, sizeof(sll));
sll.sll_family = AF_PACKET; /* allways AF_PACKET */
sll.sll_protocol = htons(ETH_P_ALL);
sll.sll_ifindex = interface_index;
bind(pd, (struct sockaddr *)&sll, sizeof sll);
htons(ETH_P_ALL)というところの設定を変えたりしました。
0183デフォルトの名無しさん
2015/03/16(月) 19:16:48.91ID:rl2BM/P0ポート開放でググって先に原因と対策を調べるべき
0184デフォルトの名無しさん
2015/03/16(月) 20:35:43.27ID:c3Hz1edWありがとうございます。確かにiptablesの設定で弾いているかもしれませんね。
htons()何ですが、htons(80)と指定することでポート80番にパケットのみひろうと
いう解釈でよろしいでしょうか?
0185デフォルトの名無しさん
2015/03/16(月) 22:20:36.45ID:bhsTaUEkアプリケーションレベルで通信相手を特定するならconnet(2)
どのOSかしらんけど。
0186デフォルトの名無しさん
2015/03/16(月) 22:23:26.66ID:bhsTaUEk0187デフォルトの名無しさん
2015/03/22(日) 17:07:18.49ID:fw6k4Nmyずっとどこかに残ったままですか?
0188デフォルトの名無しさん
2015/03/22(日) 17:13:02.17ID:CvAUvH6J0189デフォルトの名無しさん
2015/03/22(日) 18:01:42.39ID:KcTTsKQ+スマポじゃなきゃメモリーリークになる
0190デフォルトの名無しさん
2015/03/28(土) 16:48:23.64ID:NmdYaBEphttp://www.slideshare.net/herumi/cmovmaxps
ここの資料を見てたら
unsigned int a, b, x;
if( a<=x && x<=b ) {...}
上記の条件式を下記に書き換えれば、(条件)分岐は1回で済む、と紹介されてました。
if( (x-a) <= (b-a) ) {...}
でもこの書き換えって等価なんでしょうか?
たとえば a=70; b=90; x=60; だとおかしいような‥
0191デフォルトの名無しさん
2015/03/28(土) 16:55:40.06ID:zJiPBq010192デフォルトの名無しさん
2015/03/28(土) 16:56:30.64ID:LZ/SArZZ0193デフォルトの名無しさん
2015/03/28(土) 17:00:21.01ID:NmdYaBEpでもつねにxがa以上なら、この部分を記述する必要はないのではないでしょうか?
if( /* a<=x && */ x<=b ) {...}
0194デフォルトの名無しさん
2015/03/28(土) 17:02:43.46ID:zJiPBq01このときx-aが非常に大きい正数(b-aよりも)であると仮定すれば
下も不成立だな。
0195デフォルトの名無しさん
2015/03/28(土) 17:16:02.53ID:zJiPBq01(x-a) <= (b-a)は、-(M-9) < 20で不成立。前者も不成立でこの場合は同じ分岐だな。
つねに一致するにはbとxに条件がいる気がするが。
0196デフォルトの名無しさん
2015/03/28(土) 17:17:46.86ID:NmdYaBEpx<aの時も、そうでない時も、両方のケースを想定している条件式なんじゃないでしょうか。
0197デフォルトの名無しさん
2015/03/28(土) 17:19:36.35ID:NmdYaBEp0198デフォルトの名無しさん
2015/03/28(土) 17:46:19.84ID:NmdYaBEpunsigned intの計算途中で負数になった際の取り扱いを勉強し直します。
レス下さった方々、ありがとうございました。
0199デフォルトの名無しさん
2015/03/28(土) 18:00:54.63ID:p+oUvV+Tリンク先をみてもよくわからなかったが
>if( a<=x && x<=b ) {...}
>上記の条件式を下記に書き換えれば、(条件)分岐は1回で済む、と紹介されてました。
>if( (x-a) <= (b-a) ) {...}
ここだけ抜き出して論じるのであれば、これは明らかにおかしい
なぜって不等式
x - a <= b - a
を解けばいい、両辺 a を足して
x <= b
a と x に関する条件がぬけてしまっている
0200デフォルトの名無しさん
2015/03/28(土) 18:38:44.19ID:NmdYaBEpprintf("%u\n",(x-a));
で4294967286となるので、「変数がunsignedで計算途中で負数が生じた時の挙動」が
追加の条件(情報?)になるのではないでしょうか。
数学的には-10だから両方の条件式は矛盾しますよね。
0201デフォルトの名無しさん
2015/03/28(土) 19:32:54.67ID:LZ/SArZZmod(N+x-a,N) <= mod(N+b-a,N) (ただし 0 <= a,b,x < N)
なので、両辺にaを足しても
x <= b
にはならない。
0202デフォルトの名無しさん
2015/03/28(土) 20:48:16.14ID:p+oUvV+Tほーなるほど‥
0203デフォルトの名無しさん
2015/03/29(日) 00:33:59.85ID:nF1Ol+9bそれは、xがa以上b以下であるかどうかを判定しようとしている式だろうから
a < b が暗黙の前提になっていると思われる。
あとは、>>192 が言うように unsigned ということ考えれば、成立する
a=70, b=90, x=60 の場合、(intが32bitすると)
x - a = 2^32 - 10 = 4294967286
b - a = 20
で false になり、 a <= x && x <= b と一致する。
0204デフォルトの名無しさん
2015/03/29(日) 00:54:33.44ID:nF1Ol+9b直感的に (x - a) <= (b -a) になると思う
-----+----+-----+--------->
a x b
x < a の場合は a - x がラップして b - a より大きくなることを使ってるので
最初の式の第1項は a <= x じゃなければならないね
0205デフォルトの名無しさん
2015/03/29(日) 02:14:17.08ID:PjXq8DMpa>xならb-aが(2の補数などで一回転しない)正数だったら一致。
0206デフォルトの名無しさん
2015/03/29(日) 10:42:27.27ID:L3D4TSkJunsigned int a, x; a=70; x=60; ※intは32bit
だとして
x - a == 4294967286
が成り立つことは規格で保証されているんだろうけど
ネット上で探しても文献が見つけられない
知ってる方がいたらリンクとか具体的記述とか教えてもらえればありがたいです
0207デフォルトの名無しさん
2015/03/29(日) 10:51:01.31ID:Lkr8cLwC#define CURVEP_CORNER (1<<1)
#define CURVEP_LOCKED_Y (1<<2)
フラグの定義ですけど
この二重の不等号みたいなのって、何の意味というか、どんな動作をしますか?
intに格納されるみたいですが。
0208デフォルトの名無しさん
2015/03/29(日) 10:58:28.09ID:gR6bL9ge教科書を入手するとこを推奨する
0209デフォルトの名無しさん
2015/03/29(日) 11:02:43.36ID:PjXq8DMpそんな保証はないはず。
CPUなどハードウェア的に1の補数や2の補数という仕組みがあったり
コンパイラによってもちがったりするだろう。
0210デフォルトの名無しさん
2015/03/29(日) 11:06:38.80ID:PjXq8DMphttp://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE
コンピュータの数値表現 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE
2の補数 - Wikipedia
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0
加算器 - Wikipedia
http://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8
0211デフォルトの名無しさん
2015/03/29(日) 11:15:29.16ID:XfQU9N1Rhttps://www.jpcert.or.jp/sc-rules/c-int30-c.html
嘘に騙されないようにね
0212デフォルトの名無しさん
2015/03/29(日) 11:30:08.22ID:PjXq8DMp騙すつもりはないんだが。
しかしC11(ISO/IEC 9899-2011)だからそれ以前のコンパイラは違うかもしれない。
0213デフォルトの名無しさん
2015/03/29(日) 11:48:18.40ID:PjXq8DMpSuccess is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと
符合なし整数型のオーバーフローは、2の補数になる(wrapする)ことが保証されていて、これは常に活用できることを指摘しておく。
符号つき整数のオーバーフローの振る舞いを定義するコストとしては、これらの最適化が全く使えなくなることがある。
(たとえば、よくある症状としては64bitプラットフォームでのループ内で大量に符号拡張をしなくてはならなくなる。)
ClangもGCCも "-fwrapv" フラッグをサポートしており、これをつけると、符号付き整数のオーバーフローを定義済みの挙動とするようにコンパイラに強制できる。
(ただし、INT_MINを-1で割った場合のみ、依然として未定義となる)
http://blog-ja.intransient.info/2011/05/c-13.html
0214デフォルトの名無しさん
2015/03/29(日) 12:02:18.59ID:GySB0qzL符号なし以上に早くなるようには思えないんだけど
>しかしC11(ISO/IEC 9899-2011)だからそれ以前のコンパイラは違うかもしれない。
ちなみに符号なしでオーバーフローしないってのはC90からすでにあったはず
少なくともC99にはある
JISX3010:2003(C99) P.25 6.2.5 型
符号無しオペランドを含む計算は,決してオーバフローしない。
すなわち,結果を符号無し整数型で表現できないときは,その型で表現しうる最大値より1 だけ大きい数を法とする剰余を結果とする。
0215デフォルトの名無しさん
2015/03/29(日) 12:05:40.70ID:PjXq8DMpCPUの加算や減算の機能に丸投げが最速だろう。リターン値を規定しまうとそのチェックが必要となる。
同様のことはたとえば浮動小数点数でもありえる。詳細は知らないが。
0216デフォルトの名無しさん
2015/03/29(日) 12:09:29.93ID:PjXq8DMp規定通りには動作しないCPUで実行した時、規定通りになるように修正する部分を組み込まないといけないので
遅くなり得るということ。
0217デフォルトの名無しさん
2015/03/29(日) 14:05:28.70ID:GySB0qzL最大でも同じにしかならんくない?
0218デフォルトの名無しさん
2015/03/29(日) 14:18:06.94ID:5KSECsA5>規定通りには動作しないCPUで実行した時、規定通りになるように修正する部分を組み込まないといけない
こういうハードでは、
>符号あり計算のほうが速度が出る可能性はあるってことだな。
0220デフォルトの名無しさん
2015/03/29(日) 15:08:53.09ID:L3D4TSkJ> 規定通りには動作しないCPUで実行した時、規定通りになるように修正する部分を組み込まないといけないので遅くなり得るということ。
いまの話の流れで、ハードウェアの正常動作が保証されないことを含めて
C/C++の規格や動きを議論しても無意味ではないだろうか
フォールトトレラント系の話がしたいのなら話題を明示的に区別するべき
0221デフォルトの名無しさん
2015/03/29(日) 15:16:48.68ID:GySB0qzL符号ありについてはオーバーフローを無視してよければ修正処理が必要ないようなハードウェアなら
という前提か
いったいどんなアーキテクチャなんだ
0222デフォルトの名無しさん
2015/03/29(日) 17:53:11.97ID:PjXq8DMpビッグエンディアンとリトルエンディアン - ソフトウェアエンジニアリング - Torutk
データ交換で困ること
リトルエンディアンとビッグエンディアンの間でメモリの内容を交換する場合は、メモリの内容を正しく解釈するためにはどちらかがバイト順番を並び替える必要があります。
インターネットでは「ネットワークバイトオーダー(ビッグエンディアン)」とすることが多いです。
http://www.torutk.com/projects/swe/wiki/ビッグエンディアンとリトルエンディアン
ARMの浮動小数点演算
Floating Point Emulation (FPE)
浮動小数点命令を含んだコードを生成し、それを浮動小数点演算コプロセッサを持たないハードウェアで実行した場合、未定義命令例外や不当命令例外が発生します。
その例外をキャッチして、浮動小数点演算をソフトウェアでエミュレートし、もとのコンテキストに復帰する方法です。
Linuxシステムでは、ユーザランドで実行されるアプリケーションコードが浮動小数点命令を含んでいた場合、Linuxカーネルが例外をキャッチしてFPEをおこないます。
浮動小数点演算コプロセッサを持っていても、持っていなくても同じコードが使用できるのは、ソフトウェアライブラリを使用する場合と同じですが、
浮動小数点演算コプロセッサを持っているハードウェアの場合、高速に演算を実行できます。
一方で、浮動小数点演算コプロセッサを持っていない場合、毎回例外とコンテキストスイッチが発生するため、非常に遅くなります。
http://www.oidon.net/linux/arm-floating-point
インテルR XeonR プロセッサーとインテルR Xeon Phi? コプロセッサーの浮動小数点演算の違い | iSUS
最も大きな違いは浮動小数点例外の処理です。インテルR Xeon Phi? コプロセッサーのベクトル浮動小数点ユニットはフラグをセットしますが、
浮動小数点例外のトラップはサポートしません。VXCSR レジスターの対応するビットは保護されています。このビットを変更しようとするとセグメンテーション・フォルトが発生します。
http://www.isus.jp/article/mic-article/differences-in-floating-point-arithmetic/
0223デフォルトの名無しさん
2015/03/29(日) 20:06:36.91ID:GySB0qzLこれへのつながりが全く分からんので符号ありと符号なしで何の差がでるのかをもう少し解説してほしい
0224デフォルトの名無しさん
2015/03/29(日) 20:14:32.88ID:PjXq8DMp直接ハードウェアから受け渡しされるデータはリトルエンディアンの可能性もありえるから
それを修正する部分を組み込まないといけないだろ。
0225デフォルトの名無しさん
2015/03/29(日) 20:49:37.61ID:L3D4TSkJデータの流れやCPUのどんなインプリが速度に影響を与える‥とか、そういう内容で説明しないと
無駄にわかりにくいだけだろう
0226デフォルトの名無しさん
2015/03/29(日) 20:53:05.25ID:PjXq8DMpCPUの四則演算を直接利用すると、CPUの四則演算を演算前後で補正かけて利用するとき
前者のほうが高速動作するだろう。
前者はリターン値はハードウェア依存で、後者は言語で規定。
0227デフォルトの名無しさん
2015/03/29(日) 20:54:35.06ID:fSK0AMUw考えてもしかたがないことじゃないか?
0228デフォルトの名無しさん
2015/03/29(日) 21:31:13.91ID:GySB0qzLすまんね なんか一番最初の前提を読み間違えていたようだ
符号付きでもオーバーフローを定義済みの挙動とすると符号無しよりはやくなる
と読んでしまっていた
説明してくれていたのは
仕様で未定義の部分が多ければ、その方が実装の自由度が大きい
だから符号付きはオーバーフロー時の動作はHWが自由にできるから速くできる可能性があるってことね
やっとわかりましたありがとう
0229デフォルトの名無しさん
2015/03/29(日) 22:12:51.04ID:L3D4TSkJ(言語仕様に適合するように)オーバーフロー発生時の処理をソフトでインプリしなければならず
そのオーバーヘッドのために処理速度が遅くなる可能性がある
【符号付き整数データの演算】
CPUが備える命令の実行結果を直接に利用すればよいので処理速度が速い
要点だけで説明すればこういうことが言いたかったのか、と想像
0230デフォルトの名無しさん
2015/03/29(日) 23:14:25.00ID:PjXq8DMpなんとなくunsignedのほうが高速動作するんじゃないかと思っていたが。
ループで0以上しか扱わないのに添字intを使うのもよくあるがこれには言語仕様による根拠があるのかもしれないと思った。
ほとんど場合で影響なくても遅くなりうる可能性があるからなあ。
0231デフォルトの名無しさん
2015/03/30(月) 00:09:04.02ID:Cu+BvQPL可能性だけの話なんて無意味
0232デフォルトの名無しさん
2015/03/30(月) 01:18:06.07ID:vd5gzrat8bitなら、255の次は、0になる
タイマーなどに使うか、特殊なビット演算用で、
普通の4則演算では使わない
配列の[i]インデックスなどには、
普通に、signed intを使う
0233デフォルトの名無しさん
2015/03/30(月) 03:21:22.92ID:AKJsrmANif(i < 0) {・・・}
なんてフェイルセーフ入れてんの?
0234デフォルトの名無しさん
2015/03/30(月) 03:32:57.95ID:Ee2yddLD0235232
2015/03/30(月) 06:06:09.41ID:vd5gzrat0236デフォルトの名無しさん
2015/03/30(月) 06:34:10.29ID:srztvLsH0237デフォルトの名無しさん
2015/03/30(月) 12:23:42.35ID:vamG2xl1新しい質問なの?
0238デフォルトの名無しさん
2015/03/30(月) 23:23:44.69ID:/CgEMBWRint a[256]; char s = -1; unsigned char us = (unsigned char) s;
printf("--\n");
printf("%p <-- &a[ 0]\n", &a[ 0]);
printf("%p <-- &a[ -1]\n", &a[ -1]);
printf("%p <-- &a[255]\n", &a[255]);
printf("--\n");
printf("%p <-- &a[%d]\n", &a[s], s);
printf("%p <-- &a[%d]\n", &a[us], us);
を実行したら
> --
> 0xbf9fd180 <-- &a[ 0]
> 0xbf9fd17c <-- &a[ -1]
> 0xbf9fd57c <-- &a[255]
> --
> 0xbf9fd17c <-- &a[-1]
> 0xbf9fd57c <-- &a[255]
となった
0239デフォルトの名無しさん
2015/03/31(火) 09:41:15.05ID:IugrT7n6流れがよくわからんけど、やりたいのはこう?
main()
{
char a[256];
unsigned char s = -1;
printf("%p a[255]\n", &a[255]);
printf("%p a[-1]\n", &a[s]);
}
/*
* ./a.out
* 0x7fffcd9f0e6f a[255]
* 0x7fffcd9f0e6f a[-1]
*/
0240デフォルトの名無しさん
2015/03/31(火) 11:06:46.46ID:HeIxUMFmその場合
&a[256]はおkだけど&a[-1]は未定義だった気がする
0241デフォルトの名無しさん
2015/03/31(火) 21:15:25.81ID:NYpgTAudリンク先の規格に、
―
〜 結果を符号無し整数型で表現できないときは、
その型で表現しうる最大値より1だけ大きい数を法とする剰余を結果とする。
―
ってありますから、計算結果がオーバーフローしたら、アセンブラレベルでは
Carryを無視して32bitだけを取り出せばよいわけですから(int:32bit時)
そんなに煩雑な処理を追加する必要はないと思います。
CPUによるだろうけど、たかだか数命令くらいではないかな?
例
0xFFFFFFFF + 0xFFFFFFFE = 0x1FFFFFFFD
よって0x100000000を法とする剰余0xFFFFFFFDを返せばOK
0242デフォルトの名無しさん
2015/03/31(火) 21:50:03.26ID:meXl7bV+しかもあくまで可能性の話だけだったので実際存在する処理系やHWでどうだというのは関係ない
まあだからこそ大した意味のない話だったともいえるが
0243デフォルトの名無しさん
2015/04/01(水) 09:00:37.99ID:3aukNigecarryを無視して32bit取り出せばいいcpuは、もともと問題にしてない
上の>>213はそうならないcpuがある場合の話。はっきりい言って無意味
0244デフォルトの名無しさん
2015/04/01(水) 15:21:58.49ID:SQPSJK5O> >>241
> carryを無視して32bit取り出せばいいcpuは、もともと問題にしてない
話が進むと後付けで条件をだしてくる奴?
「もともと問題にしてない」というなら、どのレスの、どの書き込みでそう書かれてるか示してみ
0245デフォルトの名無しさん
2015/04/01(水) 15:29:30.25ID:IHXA7IXr0246デフォルトの名無しさん
2015/04/01(水) 19:16:36.38ID:SQPSJK5O216は「(言語の)規格通りの動作をする(しない)CPU」って書くべきだよな
その後のレス読んで、規定通りに動作しないというH/Wのトラブルの話と思ってたわ
サンクス!
>>241
このオーバーフロー時の動作って
特定のアーキテクチャ(x86とかSPARCとか)の話なの?それとも一般的なCPUの動作?
マシン語に疎くてスマン
0247デフォルトの名無しさん
2015/04/03(金) 04:59:57.72ID:EdqVb1x3データ型の曖昧な規格に悩まされる人がいかに多いかがよくわかる
0248デフォルトの名無しさん
2015/04/06(月) 20:55:14.70ID:TiB43yflcharは8bit、shortは16bit、intは32bit、longは64bit、と明確に決めておくべきだったな。
その上で、コンパイラは全ての型を実装しなくてもかまわない、としておくべきだった。
0249デフォルトの名無しさん
2015/04/06(月) 20:56:14.78ID:GsXEUmUF0250デフォルトの名無しさん
2015/04/06(月) 21:15:01.21ID:MS5/fcmBどんな時に困るの?(´・ω・`)
0251デフォルトの名無しさん
2015/04/06(月) 21:16:07.54ID:GsXEUmUF0252デフォルトの名無しさん
2015/04/06(月) 21:32:07.49ID:PTrbisMT可搬性を確保するのが今より更に面倒になりそう
0253デフォルトの名無しさん
2015/04/06(月) 21:34:16.17ID:Vdk88DGTK&Rではintはマシンの自然な処理サイズとだけ規定されていた
(さらに言えばcharが8bitとも限らない)
そういう歴史の上で書かれたCのソースコードに対して、いきなりintを32bitしか認めないと切り捨ててしまうと
あちこちで互換性の問題が噴出するだろう
ソフト資産継承の点から無理な相談ではないかな?
0254デフォルトの名無しさん
2015/04/06(月) 21:35:00.81ID:1b9kLnNh20年以上も前から存在する言語だからそこらへんはね
0255デフォルトの名無しさん
2015/04/07(火) 09:16:39.14ID:hBeZALFscharとintで処理できない場合って、そんなにあるかな?(´・ω・`)
>>252
まあ、浸透してしまったから仕方ないけど、そんなにCに拘らなくても
いいんじゃないかな?(´・ω・`)
0256デフォルトの名無しさん
2015/04/07(火) 09:22:50.66ID:pdohDM9u0257デフォルトの名無しさん
2015/04/07(火) 13:38:08.70ID:hBeZALFs0258デフォルトの名無しさん
2015/04/07(火) 14:42:12.15ID:Tt/PIfub>>>248
>> その上で、コンパイラは全ての型を実装しなくてもかまわない、としておくべきだった。
0259デフォルトの名無しさん
2015/04/07(火) 17:13:21.18ID:hBeZALFscharとintがないなら、それはCじゃない(キリッよね?(´・ω・`)
0260デフォルトの名無しさん
2015/04/07(火) 17:54:24.00ID:i6pEMRTg>>251-252,256はCが今と違い全ての型の実装有無がコンパイラ依存とした場合に(>>248)困る例は何があるか(>>249-250)
という話への回答でしょ?レス指定したから順番に落ち着いてもう一回レス読み直してみてね?
0261デフォルトの名無しさん
2015/04/07(火) 19:37:42.24ID:djs4Gk4G言うのが流行ってるの?(´・ω・`)
0262デフォルトの名無しさん
2015/04/07(火) 19:52:07.90ID:/U9ZAOiymemset() で double やポインタを初期化しているつもりなのも、十分非現実的だよ
0263デフォルトの名無しさん
2015/04/07(火) 19:57:02.89ID:djs4Gk4G間違っている可能性もあるけど、単純に「まだ、何も入れていない」という状態を
設定していて、いずれは新たな値を上書きする、という意味での初期化なら100%
正しい初期化だよね?(´・ω・`)
0264デフォルトの名無しさん
2015/04/07(火) 19:58:41.36ID:/U9ZAOiyそんな初期化をする必要があるのか?
0265デフォルトの名無しさん
2015/04/07(火) 20:14:26.00ID:djs4Gk4G大抵は経験してるよ?(´・ω・`)
0266デフォルトの名無しさん
2015/04/07(火) 21:03:19.76ID:i6pEMRTg意味のない値にもかかわらず初期化しているように見えてしまう可能性があるので害悪
0267デフォルトの名無しさん
2015/04/07(火) 21:26:52.72ID:/U9ZAOiy0268デフォルトの名無しさん
2015/04/08(水) 00:11:05.08ID:bms3DTdi>その上で、コンパイラは全ての型を実装しなくてもかまわない、としておくべきだった。
これにたいして、特定のコンパイラで
charやintが無ければ動かなくなるから困るというが、
動かなくてかまわないんだよ。
そのマシンでは扱えない型なんだから。
むしろ、むりして動くほうが困る。
intが16bitか32bitか64bitか分かりません、のほうが困る。
どうせ移植性がない。
0269デフォルトの名無しさん
2015/04/08(水) 01:31:11.34ID:qnslIA4Cint64_tとか環境で用意されてるtypedefされた型使うでしょ
0270デフォルトの名無しさん
2015/04/08(水) 07:56:10.79ID:Ll2kXDCrCプログラマとして言えば、その環境で自然なコードが生成されるのが望ましい
からそういう発想にはならない
稀にbit数に依存するコードも書くけど、そうでない場合は圧倒的に多いから
0271デフォルトの名無しさん
2015/04/08(水) 08:17:10.01ID:3GDRMlddもちろんintが16bitのものは対象外 とか前提にすることもあるだろうがつまりちゃんと考慮してるってこと
intのサイズが可変だから移植性がないというのは書いたコードが悪いだけだろう
0272デフォルトの名無しさん
2015/04/08(水) 08:23:05.99ID:rJ1QxPv7intなんか使わないし悩む意味がわからん
0273デフォルトの名無しさん
2015/04/08(水) 10:32:04.08ID:QLYO7z6zANSI(だっけ?)もCの規格化・標準化は行わなかっただろう
0274デフォルトの名無しさん
2015/04/08(水) 18:54:41.74ID:TrrKWYIM0275デフォルトの名無しさん
2015/04/10(金) 06:49:08.30ID:nHOYt1IP0276デフォルトの名無しさん
2015/04/10(金) 17:05:30.82ID:nxaXc56Wクラスのメンバ関数で色々な関数内で頻繁に呼び出して使うようなものがあるとします
その場合、面倒なのでグローバルにしちゃうのは良くないんでしょうか
その都度インスタンス化して呼び出すのか普通なんでしょうか
0277デフォルトの名無しさん
2015/04/10(金) 19:03:54.95ID:6mfRBVMyポリシー次第だけど、純粋な関数ならグローバルでいい
0278デフォルトの名無しさん
2015/04/10(金) 20:11:07.25ID:D6HkliCl純粋という意味がわからなかったですが、オブジェクトをグローバルにしちゃって
メンバ関数を呼びやすくしても、別にいいってことですよね
趣味でやってるのであまり気にしないことにします、ありがとう
0279デフォルトの名無しさん
2015/04/10(金) 20:18:07.34ID:78c5foizフォームを並べてイベントをコピーしようとしているのですが、
元のイベント関数のハンドラが取れず、上手く行きません。
解決策があれば教えてください。
やりたいこと:
チェックボックス等のフォームをデザイナで指定し、イベント関数もデザイナで指定します。
プログラムでこのチェックボックス等を10個ほどにコピーし、並べます。
このときにプロパティ等はコピーできますが、イベント関数がコピーできません。
デザイナで頭1つだけ指定するのは、位置決めが楽だからです。
ついでにイベントもそこに書いて、これをコピーしようとしています。
ところがEventInfo::GetRaiseMethodではnullが返ってきてしまいます。
ハンドラさえ取れれば以下と組み合わせて上手く行くはずです。
https://msdn.microsoft.com/ja-jp/library/ms228976%28v=vs.110%29.aspx
0280デフォルトの名無しさん
2015/04/10(金) 20:18:38.92ID:D6HkliCl申し訳ない勘違いしてました、純粋の意味わかりました
確かに拘らなくてもいいかもしれないですね
0281デフォルトの名無しさん
2015/04/10(金) 20:25:38.08ID:AgT+3q87その都度インスタンス化って事はクラス外の関数からも頻繁に呼ばれてるって事だろうから
その関数を独立させる
0282279
2015/04/11(土) 19:55:43.05ID:rfVEU9W7http://stackoverflow.com/questions/6055038/how-to-clone-control-event-handlers-at-run-time
前から困っている点で、とらいえずいちいち書いて対応していますが、
見ていて汚いので書き直したいと思っています。
気長に待っていますので、どなたか対策をご存じの方はレスよろしくお願いします。
0283デフォルトの名無しさん
2015/04/11(土) 19:58:29.32ID:ijD8XqjAあなたが使ってるのはC++ではなくC++/CLIです
http://peace.2ch.net/test/read.cgi/tech/1268613679/
こちらへ移動を
0284279
2015/04/11(土) 20:54:16.24ID:rfVEU9W7了解しました。>>279,282は取り下げます。
CUDA関連スレかと思っていましたが、中身は完全にVC++のようです。
向こうで質問し直します。ありがとうございました。
0286デフォルトの名無しさん
2015/04/13(月) 23:13:16.49ID:yWe3L8ho0287デフォルトの名無しさん
2015/04/13(月) 23:16:55.31ID:gGrqgMm60288デフォルトの名無しさん
2015/04/15(水) 00:36:50.19ID:9YI/hGho例としては
「あ"あ"あ"」と出力したいという感じです
0289片山博文MZ ◆T6xkBnTXz7B0
2015/04/15(水) 00:41:01.23ID:Be/6smJn0290デフォルトの名無しさん
2015/04/15(水) 00:41:06.52ID:LX/U9UXu0291デフォルトの名無しさん
2015/04/15(水) 00:41:38.59ID:Mlfw56xY0292片山博文MZ ◆T6xkBnTXz7B0
2015/04/15(水) 00:44:13.93ID:Be/6smJn0293デフォルトの名無しさん
2015/04/15(水) 00:53:30.96ID:9YI/hGhoありがとうございます!
助かりました
0294デフォルトの名無しさん
2015/04/15(水) 23:43:39.85ID:Obn4k40R草加/せんべい
相加/相乗平均
-
人間の書き手でも難しい「そうか」の書き分けを難なくこなすATOK2010
素晴らしいじゃないか!
これならあと5年は使えるな
0295294
2015/04/15(水) 23:44:29.44ID:Obn4k40R誤爆しました
0296デフォルトの名無しさん
2015/04/15(水) 23:52:34.27ID:/EekHbuv0297デフォルトの名無しさん
2015/04/16(木) 21:49:21.30ID:9rYj+myM0298デフォルトの名無しさん
2015/04/17(金) 20:22:53.99ID:MoAcY3k3マクロも併用した方がいい場合もあるんでしょうか?
マクロでクラスや関数を作るとDoxygenで見えないのが困るんですよね...
0299デフォルトの名無しさん
2015/04/18(土) 15:33:17.56ID:Cuf4FohB0300デフォルトの名無しさん
2015/04/18(土) 17:25:13.10ID:c7W+WDWiそうなんですか
これからスクラッチ開発するC++はマクロを極力使わないようにします
ありがとうございました
0301デフォルトの名無しさん
2015/04/21(火) 17:10:39.11ID:uO4aFmSl0302デフォルトの名無しさん
2015/04/29(水) 13:39:06.86ID:jpNn2fx2__FILE__、__LINE__とかを仕込むのはマクロじゃないと出来ない
そういう特殊なの除いたらマクロはなるべく使わない方がいい
0303デフォルトの名無しさん
2015/05/15(金) 01:59:34.69ID:xhvpicimhttp://ideone.com/xeOWCM
baseでは何かリソースを管理していて、ctor/copy/move/dtorを手書きしなければならないとします。
caseA(18行目)において、特殊メンバ関数は全てdefaultですが、これらは自動的に基底クラスの特殊メンバ関数を呼び出しています。
これならいいのですが、sthでもctor/copy/move/dtorを手書きしなければならなくなった場合を考えました。
caseB(23行目)では自分で定義を書きましたが、自動的にコンストラクタが委譲されることはなく、基底クラスは全てデフォルトコンストラクタで初期化されています。
それでは困るので、caseC(34行目)では基底クラスのコンストラクタや代入演算子を委譲してあげることにしました。
しかし、caseCでは、基底クラスにmoveで委譲してしまったので、派生クラスが自分にmoveできなくなってしまいました。(47, 53行目)
基底クラスで使われてないメンバ変数がムーブによって破壊されたとは考えにくいですが、
基底クラスの部分がごっそり破壊された後の派生クラスがまともに動くことは期待できませんし、規格によればムーブ後の変数の中身は未定義です。
お知恵をお貸しいただけるとうれしいです。
0304デフォルトの名無しさん
2015/05/15(金) 02:03:53.73ID:kZ3YQu1b0305デフォルトの名無しさん
2015/05/16(土) 02:48:21.46ID:ghTgVRCTN3337 17.6.5.15 Moved-from state of library types
N3337 17.3.26 valid but unspecified state
失礼しました。
0306デフォルトの名無しさん
2015/05/19(火) 19:24:52.24ID:N5/GZYgzクラスファイルにプログラムを書く。 → 後々翻訳とか色々できるようにxmlに文字列を書く。 この認識であっているでしょうか?
0307デフォルトの名無しさん
2015/05/20(水) 21:25:37.12ID:PX1Z5WVWprivate,protected,publicの方が、private変数がどういう役割をしているとかいうのがコメントで書かれてるので理解しやすいとおもうのですが・・・
0308デフォルトの名無しさん
2015/05/20(水) 22:11:13.74ID:2T6/P0Lmそんな流儀があるのか!あるのか?
0309片山博文MZ ◆T6xkBnTXz7B0
2015/05/20(水) 22:23:13.32ID:TMa82PCT外側からブラックボックスなインターフェイスとして見たときは、
publicなメンバーを先に注目した方が分かりやすい。
実装と仕様の分離。
0310デフォルトの名無しさん
2015/05/20(水) 22:43:08.99ID:f7ZuyK4S座標は(−3000,-3000)から(3000,3000)の範囲でランダムで分布されています。
1点の座標の半径10以内にある他の座標は平均をとり、1つにまとめます。
このロジックをクールに作られる方おられますでしょうか。
0311デフォルトの名無しさん
2015/05/20(水) 23:26:07.76ID:BLE7pvKiprivate なものを人目に触れる所に置いとくのはおかしい
0312デフォルトの名無しさん
2015/05/21(木) 01:29:32.85ID:ZhKmhhGS0313デフォルトの名無しさん
2015/05/21(木) 09:19:46.24ID:xlNH4UEyクラスの後方かどうかより、スコープが広い順に書くだろ
0314デフォルトの名無しさん
2015/05/21(木) 10:04:24.42ID:d9D99tddprotected, publicの順にしてるわ
0315デフォルトの名無しさん
2015/05/21(木) 18:17:30.52ID:GUG56MZT派生クラスが一つに定まるじゃないどすか?
virtualの代わりに使うと速くなるみたいな説明しかないのどすけど
基底クラスから一つしか派生できないのならvirtualの代わりに使う意味が
ないと思うのどすが、どんな役に立つのかおしえてください。
0316デフォルトの名無しさん
2015/05/21(木) 18:24:08.91ID:ZnRk/DYk何を勘違いしてるんだ
0317デフォルトの名無しさん
2015/05/21(木) 18:27:56.13ID:GUG56MZT0318デフォルトの名無しさん
2015/05/21(木) 18:37:01.91ID:ZnRk/DYkこういうことじゃないの?
Super1をさらに継承するパターンのことを言ってるのか?
CRTPはコンパイル時に呼び出し先が一意に決まるものにしか使えないぞ
0319デフォルトの名無しさん
2015/05/21(木) 18:43:30.77ID:GUG56MZTvirtualの代わりに使えても意味ないだろといっているのどすよ
0320デフォルトの名無しさん
2015/05/21(木) 18:58:37.73ID:ZnRk/DYkあくまでコンパイル時の静的な多態だから
0321デフォルトの名無しさん
2015/05/21(木) 19:07:24.46ID:WhiRQ/oNATLみたいなやつか。
0322デフォルトの名無しさん
2015/05/23(土) 11:05:41.37ID:oljntYsRint rc2 = func2();
int rc3 = func3();
int rc4 = func4();
int rc5 = func5();
if(rc1 == rc2 == rc3 == rc4== rc5 == 0){
// こういうif判定したいんですが、
// これだとエラーします。
}
最もスッキリした書き方教えて下さい。
0323デフォルトの名無しさん
2015/05/23(土) 11:48:26.58ID:UM9/stbqrc |= func2();
rc |= func3();
rc |= func4();
rc |= func5();
if (rc == 0) { }
0324デフォルトの名無しさん
2015/05/23(土) 14:24:37.13ID:oljntYsR利用させていただきます
0325デフォルトの名無しさん
2015/05/23(土) 20:44:53.50ID:oljntYsRwchar_t c = L'A';
どちらも行けるんですが、どっちが正しいのでしょうか?
0326デフォルトの名無しさん
2015/05/23(土) 20:45:50.21ID:ojXlCtK20327デフォルトの名無しさん
2015/05/23(土) 20:53:26.57ID:oljntYsRレスありがとうございます。
下ですか。上でも同じ結果になるんですが、なぜでしょうか?
良く分かりません。
0328デフォルトの名無しさん
2015/05/23(土) 20:56:52.32ID:ojXlCtK20329デフォルトの名無しさん
2015/05/23(土) 20:59:13.97ID:N5mcUzwLL'A' = 0x0041
0330デフォルトの名無しさん
2015/05/23(土) 23:39:40.09ID:3og+zCpJContext の受け取り方(参照の仕方)を考えると次の 2 つが思いつきました。
1. クラスに const Context* 型のメンバを用意し、適当な場所で SetCtx() でコンテキストをセットする。
つまり、実際の処理を行うメソッドでは自クラスのメンバから Context にアクセスできる。
2. クラスメソッドの引数に const Context& を用意してメソッド内で Context にアクセスできるようにする
選択の基準としてそれぞれのメリット、デメリットを挙げてみました。
1. はデメリット無し?あえて言えば const Context* を保持しているクラスで破壊されるリスクがある?
でもそれって shared_ptr で持たせればリスクではない?
2. はデメリットとしてメソッドにいちいち const Context& を用意しないといけない。
メリットは Context にアクセスできる範囲が狭い。(1.は Context を使用しないメソッドでも
Context にアクセスできる)
1. 2. どちらを選択するかの決め手が分かりません。ご教授頂けたらと思います。
0331デフォルトの名無しさん
2015/05/23(土) 23:42:37.10ID:pR56aZiN0332デフォルトの名無しさん
2015/05/24(日) 07:55:36.02ID:hp4TWV5c解説ありがとうございました。
よく理解できました。
0333デフォルトの名無しさん
2015/05/26(火) 11:49:56.88ID:WpucxMlI0334デフォルトの名無しさん
2015/05/26(火) 16:28:19.71ID:UK6dK39http://peace.2ch.net/test/read.cgi/tech/1428570962/
0335デフォルトの名無しさん
2015/05/27(水) 19:12:21.15ID:YLAut6HOデバッグビルドするとSTLのチェック機能やら他のいろいろな理由で実行速度が遅くなりますよね
デバッグ時でも、プログラムの部分的な箇所については速度の低下を抑えるという方法はありますか?
具体的には、自分の場合、ひとつのファイルからデータを読み込んで処理するのに
Debug版で800ミリ秒、Rlease版で40ミリ秒かかっていて、
ある処理の実行には20個ほどのファイルが必要で20秒程余分に時間がかかります。
なのでこのデータ読み取り部分の速度をデバッグ版でも高めたい、ということです。
0336デフォルトの名無しさん
2015/05/27(水) 19:28:04.63ID:fEfNE1Dn速いかデバッグかの一択。
0337デフォルトの名無しさん
2015/05/27(水) 19:42:11.04ID:nCq7jW/Aint onedan = 1234, shiharai = 10000;
int sa, amari;
/******************************* scanf */
printf("Price? => ");scanf("%d",&onedan);
printf("Payment? => "); scanf("%d",&shiharai);
printf("----\n");
/******************************* balance */
amari = shiharai3 - onedan;
printf("price = %d, ",onedan);
printf("payment = %d, balance = %d\n",shiharai3,sa);
printf("----\n");
ここで amari の部分に sa と入力すべきだったのを間違えてしまいました。
結果として、出力したデータでは、balance = の部分の数字が1555315592
、1563462560と乱数の様に表示されています。
一体何が行われているのか皆目検討もつきません。どなたかよろしくお願いいたします
0338デフォルトの名無しさん
2015/05/27(水) 19:46:26.75ID:fEfNE1Dnメモリ確保時点で必ずしもゼロで初期化されない。
0340デフォルトの名無しさん
2015/05/27(水) 19:49:17.16ID:nCq7jW/A0341デフォルトの名無しさん
2015/05/27(水) 19:50:41.62ID:nCq7jW/A0342片山博文MZ ◆T6xkBnTXz7B0
2015/05/27(水) 19:59:57.94ID:bhmZkUHl領域が使用中かどうかやサイズなどの情報は別のどこかに記録されている。
0343デフォルトの名無しさん
2015/05/27(水) 20:03:26.43ID:nCq7jW/A0344片山博文MZ ◆T6xkBnTXz7B0
2015/05/27(水) 20:12:16.93ID:bhmZkUHlスタック領域は山を積み上げたり崩したりするように何度も再利用されている。
なので、ゴミデータが紛れ込むこともある。
0345デフォルトの名無しさん
2015/05/27(水) 20:14:46.25ID:nCq7jW/A0346デフォルトの名無しさん
2015/05/27(水) 21:18:29.51ID:YLAut6HOたとえば翻訳単位で、追加情報を必要としないということを宣言等できないものですか
必要のないところにチェックを課したり情報を追加したりして、結果人間が不便を被っても
それが当たり前、当然というのはあまり腑に落ちません。
デバッグするにしても、最初から全体を見ていくよりは、
対象を絞り込んでその周辺から徐々に視野を広げていくのが一般的でしょうし、
それに適したやり方っていうのは見つからないものですかね。
0347デフォルトの名無しさん
2015/05/27(水) 21:32:52.03ID:20GZswGlなんだこのクソ言語
0349デフォルトの名無しさん
2015/05/27(水) 21:42:49.68ID:x5rosGcz0350デフォルトの名無しさん
2015/05/27(水) 21:48:58.32ID:jSIsBLLL0352デフォルトの名無しさん
2015/05/27(水) 22:23:37.78ID:jSIsBLLLよくわからん。
0353デフォルトの名無しさん
2015/05/28(木) 00:01:48.28ID:m+TyS5r+直前に使用されてた値がそのまま残ってるだけ
0354デフォルトの名無しさん
2015/05/28(木) 00:12:14.53ID:2DLv23cc0355デフォルトの名無しさん
2015/05/28(木) 00:15:27.48ID:Xmw848ss0356デフォルトの名無しさん
2015/05/28(木) 00:16:06.78ID:AnQe6xX720秒くらいなら気にすんな
0357デフォルトの名無しさん
2015/05/28(木) 00:18:17.88ID:Xmw848ss必要部分だけifとprintfで自前デバッグしたらいい。
0358デフォルトの名無しさん
2015/05/28(木) 00:57:53.24ID:CuNSMS4Uhttps://msdn.microsoft.com/ja-jp/library/fsk896zz.aspx
これでいける
0359デフォルトの名無しさん
2015/05/28(木) 05:37:24.02ID:yUFQMWm3#ifdef x
a(x, #x)
#else
b(x, #x)
#endif
みたいなことってできますか
0360デフォルトの名無しさん
2015/05/28(木) 05:46:43.57ID:HB8xXEuWb(x, #x)なんてできないぞ
0361デフォルトの名無しさん
2015/05/28(木) 06:22:46.40ID:/5YfYo570362デフォルトの名無しさん
2015/05/28(木) 08:01:00.89ID:B9gnu8yAfの引数のスコープは1行分しかないと思うが。
0363デフォルトの名無しさん
2015/05/28(木) 08:02:19.13ID:B9gnu8yA0364デフォルトの名無しさん
2015/05/28(木) 11:45:52.12ID:7WYWs3lt#ifdef MACRO
std::cout << #MACRO << " is defined as " << MACRO << std::endl;
#else
std::cout << #MACRO << " is not defined" << std::endl;
#endif
みたいなことがしたかったんですが無理でしょうか
上記を吐くコードは書けたので問題ありませんが
0365デフォルトの名無しさん
2015/05/28(木) 13:29:51.58ID:RdBy8InI0366デフォルトの名無しさん
2015/05/28(木) 15:10:02.66ID:QEZThiJ2今どうなってんの?
boostとかまだあるん?
0367片山博文MZ ◆T6xkBnTXz7B0
2015/05/28(木) 15:20:57.24ID:BPOchcgZg++やVSでのサポートでC++11がだいぶ普及してきている。
右辺値参照とか初期化リストとかラムダとか。
0368デフォルトの名無しさん
2015/05/28(木) 15:23:25.27ID:AnQe6xX7物が無くなれば物凄くやり易く
なると思う。
0369デフォルトの名無しさん
2015/05/28(木) 15:26:04.02ID:BPOchcgZそれはあり得ない
0370デフォルトの名無しさん
2015/05/28(木) 15:47:31.06ID:otFcwpTVimportやusingが必要な時点であんま変わらんけど、
これらは省略のためで必須ってわけでもないし微妙だな。
0371デフォルトの名無しさん
2015/05/28(木) 16:25:44.63ID:BS3T47760372デフォルトの名無しさん
2015/05/28(木) 16:51:03.32ID:ttn+1yST0373デフォルトの名無しさん
2015/05/28(木) 17:19:15.30ID:CtCSkEBs工程表から材料リストがなくなればものすごくやりやすくなる
???
0374デフォルトの名無しさん
2015/05/28(木) 19:57:17.98ID:uGepSntcとりあえず#defineは改行したらそこで終了な
0375デフォルトの名無しさん
2015/05/28(木) 21:42:18.31ID:gCuhL1rI0376デフォルトの名無しさん
2015/05/29(金) 04:36:20.44ID:QmBB8Gwr\を忘れてるだけじゃないのか
0377デフォルトの名無しさん
2015/05/29(金) 04:43:17.37ID:ru3QOXEMなんてできるの?
0378デフォルトの名無しさん
2015/05/29(金) 08:21:49.91ID:VcfS7+TO0379デフォルトの名無しさん
2015/05/29(金) 15:32:15.71ID:Efq5+4ixclass Item {
public:
static void use();
static void use( Character* target );
static void drop();
};
int main (){
//すべてOK
void ( *pUse1 )() = Item::use;
void ( *pUse2 )( Character* ) = Item::use;
void ( *pDrop )() = Item::drop;
//エラー
std::function< void ( void ) > fUse1 = Item::use;
//エラー
std::function< void ( Character* ) > fUse2 = Item::use;
//OK
std::function< void ( void ) > fDrop = Item::drop;
}
オーバーロードしたstatic変数を代入したいのですが、std::functionに代入できません。
同じ型の関数ポインタには入れられます。
何が間違っているのでしょうか。
0380デフォルトの名無しさん
2015/05/29(金) 18:46:53.04ID:gXnjRwZ6片方名前変えてみたら?
0381デフォルトの名無しさん
2015/05/30(土) 00:26:33.80ID:qC/pm06Qキャストすれば入るよ
ラムダ式はさんでもいいけど
0382デフォルトの名無しさん
2015/05/30(土) 20:34:59.91ID:h4Yx63EKまじでキャストで行ける?
やり方がわからん。
ソースプリーズ
0383デフォルトの名無しさん
2015/05/31(日) 16:10:45.18ID:456RRL4Mconst int N =100;
double* K = new double[2 * N];
for (int n = 0; n < N; n++){
K[2 * n] = -2
K[2 * n + 1] = 1
}
Kは2行N列の配列ですよね?後、下のfor文でどのように数値を格納しているのか教えてください><
0384デフォルトの名無しさん
2015/05/31(日) 16:14:18.96ID:SZ/HavyK0385デフォルトの名無しさん
2015/05/31(日) 16:29:02.30ID:456RRL4Mありがとうございます
続けてお願いします
例えば、三重対角行列の格納なんですけど
for (int i = 0; i < N; ++i){
for (int j = 0; j < N; ++j){
if (j == i - 1) K[j*N + i] = 1.0 ;
if (j == i) K[j*N + i] = -2.0 ;
if (j == i + 1) K[j*N + i] = 1.0;
}
}
これは対角成分が-2、その上下が1になると分かってるんですが、for文の中のK[j*N +i]ってどういう意味なんですか?
0386片山博文MZ ◆T6xkBnTXz7B0
2015/05/31(日) 16:40:31.40ID:t8jPrrOm利用している。一次配列を多次配列のように使うテクニックだね。
0387デフォルトの名無しさん
2015/05/31(日) 17:04:30.79ID:2zIxob7P配列Kのj*N +i番目の要素だろ。
0388デフォルトの名無しさん
2015/05/31(日) 17:41:00.83ID:456RRL4Mありがろうございました、変な勘違いしてました
0389デフォルトの名無しさん
2015/06/07(日) 18:05:23.63ID:lDA49rz+データを同じ詰め方(set)ができる、数種類のクラスがあったとして、
それぞれに共通のI/Fを持たせたい
素直に考えると、それらの親クラスにI/Fを持たせるのだと思うのだけど、
それら複数のクラスより親を作ることができない制約がある
その場合、どこにI/Fを用意して、どこに実装したらいいですか?
当方、C言語に毛が生えた程度の使い方しかしてこなかったので、
仮装関数用意するとかやったことなく、
どうすればスマートなのかなと
0390デフォルトの名無しさん
2015/06/07(日) 18:08:28.47ID:xCcw73lL0391デフォルトの名無しさん
2015/06/07(日) 18:43:03.25ID:IR8285sC中村くんへの丸投げで中村君が高負荷で倒れないか心配になる
0392デフォルトの名無しさん
2015/06/10(水) 21:04:07.34ID:EVVFhxwz委譲したクラスを解放するとデストラクタが呼ばれて
ちゃんと解放される?
0393デフォルトの名無しさん
2015/06/10(水) 23:07:32.55ID:hIQNRZvl0394392
2015/06/11(木) 00:28:55.17ID:phbL6DGJポインタで委譲しても当然同じく解放されるよね?
0395デフォルトの名無しさん
2015/06/11(木) 00:33:38.30ID:ESr81XRP0396392
2015/06/11(木) 00:42:19.12ID:phbL6DGJ0397デフォルトの名無しさん
2015/06/11(木) 00:43:08.55ID:wPKRrOhd0398デフォルトの名無しさん
2015/06/11(木) 03:45:48.27ID:KWkffMj/0399デフォルトの名無しさん
2015/06/11(木) 03:48:02.27ID:daO6fC9u0400デフォルトの名無しさん
2015/06/11(木) 03:49:45.65ID:ESr81XRP0401デフォルトの名無しさん
2015/06/11(木) 04:12:46.18ID:xl+1bn71試してわからないなら聞くのが普通
0402デフォルトの名無しさん
2015/06/11(木) 10:12:44.12ID:MCnGDuRk0403デフォルトの名無しさん
2015/06/11(木) 23:40:16.41ID:phbL6DGJ意味を教えて下さい
0404デフォルトの名無しさん
2015/06/12(金) 09:26:21.74ID:L7aZuwN60405403
2015/06/12(金) 11:29:09.30ID:ZzMiSOW40406デフォルトの名無しさん
2015/06/12(金) 12:55:42.13ID:Qvm3BcbJ0407デフォルトの名無しさん
2015/06/12(金) 16:53:56.75ID:GqZkqTHr0408デフォルトの名無しさん
2015/06/12(金) 21:47:39.48ID:ju6p67Z1宣言と定義はともかく生成というのはなんだろう?instantiate?
0409デフォルトの名無しさん
2015/06/12(金) 21:58:17.50ID:sUePbdZr掲示板で聞くまでもない質問スレじゃないんだぞ
0410デフォルトの名無しさん
2015/06/12(金) 22:35:35.27ID:GqZkqTHr0411デフォルトの名無しさん
2015/06/12(金) 23:44:10.07ID:mLuCQ1ez0412デフォルトの名無しさん
2015/06/13(土) 01:13:45.28ID:05Jv17Sn「じゃあこのスレいらないよね?」ってやつw
いらないから自分で調べてね^^
0413デフォルトの名無しさん
2015/06/15(月) 02:24:44.83ID:YoDUUVOd#include <iostream>
#include "singltonClass.h"
#include "TestClass.h"
int main()
{
singltonClass* test = singltonClass::Instance();
test->setAtai(1000);
printf("%d\n" , test->getAtai());
TestClass &singleton = TestClass::getInstance();
singleton.setAtai(2000);
printf("%d\n" , singleton.getAtai());
return 0;
}
0414デフォルトの名無しさん
2015/06/15(月) 02:27:53.55ID:YoDUUVOd#include "singltonClass.h"
singltonClass::singltonClass()
{
printf("sinngltonClass 生成\n");
atai = 0;
}
singltonClass::~singltonClass()
{
printf("sinngltonClass 解放\n");
}
singltonClass* singltonClass::Instance()
{
static singltonClass* instonce;
return instonce;
}
void singltonClass::setAtai(int atai)
{
this->atai = atai; //ここで落ちる
}
int singltonClass::getAtai()
{
return atai;
}
0415デフォルトの名無しさん
2015/06/15(月) 02:29:40.06ID:YoDUUVOd#include <iostream>
class singltonClass
{
private:
singltonClass();
~singltonClass();
public:
static singltonClass* Instance();
int atai;
void setAtai(int atai);
int getAtai();
};
0416デフォルトの名無しさん
2015/06/15(月) 02:30:11.52ID:TWn3hn91落ちるに決まってんだろ
それにinstonceってなんだよ
0417デフォルトの名無しさん
2015/06/15(月) 02:32:50.12ID:YoDUUVOd#include "TestClass.h"
TestClass::TestClass()
{
printf("TestClass 生成 \n");
atai = 0;
}
TestClass::~TestClass()
{
printf("TestClass 解放 \n");
}
TestClass &TestClass::getInstance()
{
static TestClass instance;
return instance;
}
void TestClass::setAtai(int atai)
{
this->atai = atai;
}
int TestClass::getAtai()
{
return atai;
}
0418デフォルトの名無しさん
2015/06/15(月) 02:35:02.91ID:YoDUUVOd#include <iostream>
class TestClass
{
private:
TestClass();
~TestClass();
int atai;
public:
static TestClass &getInstance();
void setAtai(int atai);
int getAtai();
};
0419デフォルトの名無しさん
2015/06/15(月) 05:30:01.88ID:cIly8SrJこれはどうなったんだ
【初心者歓迎】C/C++室 Ver.94【環境依存OK】(c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1417257762/679
679 名前:デフォルトの名無しさん[age] 投稿日:2015/06/11(木) 23:44:32.66 ID:phbL6DGJ
// main.cpp
#include "TestClass.h"
// TestClass.cpp
#include "TestClass.h"
// TestClass.h
mainでTestClassを生成した場合
main.cppがTestClass.hを認識出来るのは分かるけど
TestClass.cppはどうやって認識しているの?
0420デフォルトの名無しさん
2015/06/15(月) 07:23:10.09ID:YoDUUVOdTestClassは大丈夫なんだけど
singltonClassで値を入れようとするとアクセス違反で落ちる・・・
詳しく理由を教えてほしい
0421デフォルトの名無しさん
2015/06/15(月) 08:00:52.13ID:stx1FStm0422デフォルトの名無しさん
2015/06/15(月) 08:41:04.40ID:P9xXTUaw0424デフォルトの名無しさん
2015/06/15(月) 12:07:59.32ID:x90+VGunstatic singltonClass* instonce これは ぬるぽ
ぬるぽ呼んだら落ちるに決まってるだろ
0425デフォルトの名無しさん
2015/06/15(月) 12:14:08.76ID:x90+VGunstatic singltonClass* instonce = new singltonClass;
0426デフォルトの名無しさん
2015/06/15(月) 12:17:05.18ID:x90+VGunいくら何でも質落ちすぎだろ
0427デフォルトの名無しさん
2015/06/15(月) 12:30:17.60ID:HDA/Cn6G0428420
2015/06/15(月) 13:48:45.29ID:mHyo0Y7DsingltonClass *singltonClass::Instance()
ってなにが違うの? &と*って同じじゃないの?
これが分かれば疑問が解けそう
0429デフォルトの名無しさん
2015/06/15(月) 13:56:54.34ID:HDA/Cn6Gそっちじゃなくて、何を返してるのかだよ
singltonClass instonce;
の &instance と
singltonClass * instonce = new singltonClass();
の instance がほぼ同等
newしてないやつは実体がないだろ。
0430デフォルトの名無しさん
2015/06/15(月) 13:58:49.85ID:P9xXTUaw0431420
2015/06/15(月) 14:25:07.45ID:mHyo0Y7DこのままだとMULLだからnewで生成する必要があるのは分かった
最後に知りたいのが & の意味で
& を外すとエラーになるのが理解できない
あと & と * って同じじゃないの?
0432デフォルトの名無しさん
2015/06/15(月) 14:44:00.83ID:P9xXTUaw0433デフォルトの名無しさん
2015/06/15(月) 15:15:27.32ID:HDA/Cn6G演算子としての&と参照としてのそれと混乱してる?
0434デフォルトの名無しさん
2015/06/15(月) 15:16:58.79ID:cIly8SrJint i = 10, *p;
p = &i;
この状態で*p = i = 10
0435420
2015/06/15(月) 15:50:47.14ID:mHyo0Y7DTestClass &TestClass::getInstance()
{
static TestClass instance;
return instance;
}
singltonClass *singltonClass::Instance()
{
static singltonClass Instance;
return Instance;
}
の違いが分からない・・・
TestClass::getInstanceでは何が起こっているの?
0436デフォルトの名無しさん
2015/06/15(月) 15:57:14.24ID:P9xXTUawむしろsingltonClass::Instance()のコンパイル通る方が深刻
0437デフォルトの名無しさん
2015/06/15(月) 16:03:25.21ID:P9xXTUawint x = 0;
int& q = x;
q = 10; // x = 10
0438420
2015/06/15(月) 16:11:31.47ID:mHyo0Y7D{
static TestClass instance;
return instance;
}
これだと正常に動作して
TestClass TestClass::getInstance()
{
static TestClass instance;
return instance;
}
こんな感じで & を外すと
main.cppでTestClassを生成しようとするとコンパイルエラーになる
ごめん、これが分からない・・・
0439デフォルトの名無しさん
2015/06/15(月) 16:14:51.03ID:P9xXTUaw0440420
2015/06/15(月) 16:42:12.89ID:mHyo0Y7D何度もすみません、ここが分からないんだ
0441デフォルトの名無しさん
2015/06/15(月) 16:49:19.72ID:HDA/Cn6G0442420
2015/06/15(月) 17:08:37.28ID:mHyo0Y7D関数のアドレスを渡してるから
関数を実行しているのはTestClass本体ってことか!!!
だからprivateでも問題ないと!!!!
ありがとbfヴぃbfdgb!!!
0443420
2015/06/15(月) 17:11:26.95ID:mHyo0Y7D一般的にシングルトンってTestClassのやりかたが主流?
他になんか良いやり方がある?
0444デフォルトの名無しさん
2015/06/15(月) 18:29:21.08ID:ks4U7BG0ググれアホ
0445デフォルトの名無しさん
2015/06/15(月) 19:02:51.79ID:FZwBA5EAポインタについてしっかり頭に叩き込んでからまたおいで
0446デフォルトの名無しさん
2015/06/23(火) 19:12:27.44ID:coxulpeetypedef vector<int> v1;
typedef vector<v1> v2;
typedef vector<v2> v3;
…
typedef vector<vn-1> vn;
みたいなことやりたいんですが、テンプレートでうまくまとめられませんか。
0447デフォルトの名無しさん
2015/06/23(火) 21:47:23.20ID:qkxeTacg一体nはどれくらいの値を想定している?
vectorをあんまり沢山入れ子にすると訳分からない状態になるぞ。
0448デフォルトの名無しさん
2015/06/23(火) 21:54:26.48ID:coxulpee実を言うと本当はvectorの入れ子じゃなくて自作のクラスの入れ子なんですけど、
自作クラスの説明が面倒くさいからvectorに置き換えました。
nは10位ですかね。
0449デフォルトの名無しさん
2015/06/23(火) 22:00:49.15ID:qkxeTacg0450デフォルトの名無しさん
2015/06/23(火) 22:03:13.38ID:qkxeTacg0451デフォルトの名無しさん
2015/06/23(火) 22:06:36.66ID:coxulpee整数型2つメンバにもって多倍長整数にするクラスを作ろうとしてる。
template<class T>
class doubleInt
{
T hi,lo;
...
};
typedef duobleInt<unsigned int> Int64;
typedef doubleInt<Int64> Int128;
typedef doubleInt<Int128> Int256;
…
みたいな感じ。
0452デフォルトの名無しさん
2015/06/23(火) 22:15:43.63ID:qkxeTacgそれなら、わざわざややこしい入れ子にしなくても、10倍長計算に必要な領域を
配列か何かで int work[10] みたいに確保しておいて、それ使って計算すればいいんじゃないか?
0453デフォルトの名無しさん
2015/06/23(火) 22:18:38.19ID:qkxeTacg0454デフォルトの名無しさん
2015/06/23(火) 22:23:15.99ID:coxulpeeそこはロマンというかw
テンプレート使える俺かっこいい的なw
0455デフォルトの名無しさん
2015/06/23(火) 23:57:56.03ID:/nLjrxmHtemplate<template<class...> class Container, class Type, size_t num> struct NestContainer {
typedef Container<typename NestContainer<Container, Type, num - 1>::type> type;
};
template<template<class...> class Container, class Type> struct NestContainer<Container, Type, 0> {
typedef Type type;
};
/*
template<class Type> using MyVector = std::vector<Type, std::allocator<Type>>;
template<size_t num> using VInt = typename NestContainer<MyVector, int, num>::type;
*/
template<size_t num> using VInt = typename NestContainer<std::vector, int, num>::type;
int main() {
using namespace std;
VInt<0> i; //int
VInt<1> a1; //vector<int>
VInt<2> a2; //vector<vector<int>>
i = 100;
a1.push_back(0);
a1.push_back(10);
a2.push_back(a1);
cout << i << endl;
for(auto &it : a2) for(auto &it2 : it){
cout << it2 << endl;
}
return 0;
}
0456マ○コデラックス
2015/06/23(火) 23:59:17.67ID:bwjeXC/X0457デフォルトの名無しさん
2015/06/24(水) 11:52:28.38ID:67aeQTeE今はGMPとかあるからなー
良い時代になったもんだ
0458QZだ信じれ
2015/06/27(土) 14:03:24.53ID:KcwTZCGlいつか割り算を実装してから『素数』を数えて落ち着くんだ‥
0459デフォルトの名無しさん
2015/06/27(土) 15:13:43.86ID:07vULyYd素数の計算だけでしたら、エラトステネスのふるい法でどうでしょうか。
unsigned int 形の配列を生成し、先ず最初にその整数型のなかに頭から1を
埋め込み、これを3から始まる奇数と考えます。そうすると、例えば3ビット目は7
となるわけです。
こうして置いて3の倍数に当たるビットを0にする、5の倍数に当たる
ビットを0にする、……
として於いて、必要な桁数だけ終了したら、1のビットの位置を計算して
その値を出力すれば、素数表ができると思います。
例:
3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33
最初の状態 :1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1....
3の倍数を消す:1 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1...
5の倍数を消す:1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1
以下同様
もっと効率のよい方法としては、
『電子計算機のための数値計算法』II(山内二郎・森口繁一・一松信、培風館)
の
「第5章 Eratosthenesのふるいによる素数の計算」
をご覧いただければと思います。
とんでもない思い違いをしているかもしれません。その節はご容赦
をお願いいたします
0460デフォルトの名無しさん
2015/06/27(土) 21:13:58.41ID:v21lmC3zchar *AA="hello world";
int n=sizeof(AA)/sizeof(AA[0]);
これを実行するとnには4が必ず入ってしまうのですがなぜなのでしょうか
実行環境はVisual C++ 2010 Expressです
0461デフォルトの名無しさん
2015/06/27(土) 21:19:14.85ID:K06hVkJE多分、4/1を計算しているからだと思う。
0462デフォルトの名無しさん
2015/06/27(土) 21:20:38.90ID:JzcDXnUr32ビットアプリですね?
ポインタのサイズをchar のサイズで割るから当たり前です。
0463デフォルトの名無しさん
2015/06/27(土) 21:27:09.14ID:K06hVkJEそれにしても
char *AA
なんて変数名付ける奴初めて見たわ。
何で大文字なんだよ?
何でAA何だよ?
見れば見るほど変だぞ。
0464デフォルトの名無しさん
2015/06/27(土) 21:28:36.30ID:oXqh0l6v0465デフォルトの名無しさん
2015/06/27(土) 22:26:08.63ID:v21lmC3zなぜ*AAのアドレスのサイズが4byteなのでしょうか・・・
0466デフォルトの名無しさん
2015/06/27(土) 22:31:26.25ID:e2zMBxYgsizeof(char*)は32bit環境だと大体4だろ
0467デフォルトの名無しさん
2015/06/27(土) 22:47:11.23ID:9MGfZNNc0468デフォルトの名無しさん
2015/06/27(土) 23:02:33.19ID:++FZGhMS0469デフォルトの名無しさん
2015/06/28(日) 00:58:59.21ID:IZhI7buf0470デフォルトの名無しさん
2015/06/28(日) 03:48:23.85ID:YhCvVIgAその方法だと,最初から求めたい地点まですべて「オンメモリ」なのが辛いところです.
といって試し割り素朴法は計算が遅い
そこで,そのハイブリッドを考えています
オンメモリの素数を調べる部分は先端だけで十分だと思うのです
0471デフォルトの名無しさん
2015/06/28(日) 07:57:05.85ID:q4v0PqzP本題以外で突っ込むとか変だぞ
0472デフォルトの名無しさん
2015/06/28(日) 08:46:19.67ID:EIkqw89x前述の「電子計算機のための数値計算法 II』には
求めた素数を一旦外部記憶装置に記憶させておいて、
その値を使って新しくチェックする云々と書いてあります。
入出力に時間がかかりますが、これだとたしかにメモリーの
消費が少なくなりますが……
是非一度、上記の書籍の該当箇所をご覧ください。
小生の生半可な説明よりは、ずっとよいと思いますので。
ご検討をお祈りしております。
結果のご報告をお待ちしております。
0473デフォルトの名無しさん
2015/06/28(日) 10:22:05.93ID:Z3SmjTo/ご紹介いただいた書籍には「素数を外部装置に記録する」方法と
エラトステネスの篩とを併用する方法は紹介されていますか?
そうでなければ興味はわきません
0474デフォルトの名無しさん
2015/06/28(日) 10:23:14.25ID:M4OFumRq試し割り素朴法を使うにしても、無駄を省くために平方根の多倍長計算ルーチンは実装しておきたいところですよね。
除算や平方根を楽に(?)計算するNewton-Raphson法というのがあるようです。ご参考までに。
http://円周率.jp/method/newton.html
>>471
> >>463
> 本題以外で突っ込むとか変だぞ
話し合ってる問題の本質と無関係なところで揚げ足をとって騒ぐ
こういうバカは、会社でも一定数存在するな。たいてい会議が無駄に長引く元凶。
0475デフォルトの名無しさん
2015/06/28(日) 10:37:39.95ID:Z3SmjTo/試し割り素朴法では、平方根の計算は実は必要ありません。
試し割りの商と割数とを比較すればいいからです。
それにニュートンラプソンは実装が面倒な浮動小数点が必須、わざわざややこしい世界に手を広げる必要はありません。
素数を数えておちつくんだ!
0476デフォルトの名無しさん
2015/06/28(日) 11:13:06.74ID:2/AXk5Qqただの二成分量のクラスを作ったんだが
vectorにすると急に遅くなった(g++ -O3)
0477デフォルトの名無しさん
2015/06/28(日) 12:21:10.02ID:rotd9Dcdそれだけの情報で答えるなんて適当なことしか言えないよ
プロファイル取って何が問題になってんのか調べな
0478デフォルトの名無しさん
2015/06/28(日) 14:29:17.61ID:l/YNGXJWクラスのメンバに持ってる std::unique_ptr の参照をゲッターで外に出すのって普通?
std::shared_ptr をメンバに持って std::shared_ptr<T> Class::Getter() の方が良いの?
0479デフォルトの名無しさん
2015/06/28(日) 15:41:33.49ID:Iw80ONOH今はガベコレが主流だよ
0480デフォルトの名無しさん
2015/06/28(日) 16:17:14.22ID:l/YNGXJWというかそのGCを趣味で実装しようとしてるのでGCは使えないのです
生ポインタ使うよりはモダンかなと思ってたんだけどどうなのかな
使ってみるとスマポと生ポインタが混在してるのが気持ち悪くなっちゃって
どうにかスマポか参照に置き換えようとしてる
0481デフォルトの名無しさん
2015/06/28(日) 16:21:16.22ID:OeLQkQMR0482デフォルトの名無しさん
2015/06/28(日) 16:34:44.44ID:UiBucRXh0483デフォルトの名無しさん
2015/06/28(日) 16:38:40.66ID:OeLQkQMRmalloc/freeじゃあ駄目なのか?
0484デフォルトの名無しさん
2015/06/28(日) 16:41:21.52ID:l/YNGXJWでもヒープメモリが欲しいんや……
0485デフォルトの名無しさん
2015/06/28(日) 17:12:47.69ID:Iw80ONOH0486デフォルトの名無しさん
2015/07/06(月) 17:46:05.01ID:Bbdz7Dciwikiの手順説明には
・選択
・交叉
・突然変異
・コピー
(下3つはそれぞれ設定された確率で起こる)
みたいにあるけど生物界では必ず交叉起こるはずだよな?
・選択(重複無し)
・交叉(必ず起こる)
・突然変異(低確率で起こる)
・コピー(起こらない)
にした方がいいと思うんだが
0487デフォルトの名無しさん
2015/07/06(月) 18:55:53.85ID:QWNNDY2V0488デフォルトの名無しさん
2015/07/06(月) 19:17:47.96ID:L4KLNmyL0489デフォルトの名無しさん
2015/07/06(月) 19:39:45.55ID:Bbdz7Dci腑に落ちたありがとう
0490デフォルトの名無しさん
2015/07/08(水) 05:54:43.37ID:8R+nhtCyターゲットはwindows8タブレット
ターゲットのexeに対してvisual studioからクロスコンパイル環境でデバッグしたいのだが上手くいかない。
対象アプリケーションはexeを叩いて直接起動するのではなく
サービスをスタートする事でexeが立ち上がる仕組み。
visual studioでそこにアクセスする為にはプロセスにアタッチするしかないのかなとみている。
プロセスにアタッチだとクロスコンパイルできないですよね?
今はソースを変えると
→いちいちサービス止めて
→ホストでビルドしてできあがったexeを手動でリモートに送り
→またサービスを立ち上げて
→リモートのプロセスにアタッチ
みたいな事やってるけど、超面倒。
こんな事やってられないけど、これ以外に手段ないですよね?
0491デフォルトの名無しさん
2015/07/08(水) 09:40:39.03ID:P1nDZAUbOSが同じなら、一旦セルフ環境でデバッグ済ませてしまえば?と思うのだが
まぁアタッチしないといけない理由は他にありそうな気もするが
0492デフォルトの名無しさん
2015/07/08(水) 10:04:25.40ID:PAkk6Hqa良く知らんがそのexeがデバッグビルドして有ったら、アタッチした時点で自動的にソースコードが読み込まれて普通にデバッグ出来るんちゃうか?
0493デフォルトの名無しさん
2015/07/08(水) 10:08:37.12ID:PAkk6Hqaああ、exeはリモートで動くから駄目だな。
そのリモートのタブレットにVisual Studioのリモートデバッガーはインストール出来ひんのか?
リモートデバッガーなら行けるかも。
根拠の無い勘ですが。
0494デフォルトの名無しさん
2015/07/08(水) 11:44:06.43ID:ac7mf5QU0495デフォルトの名無しさん
2015/07/08(水) 11:48:34.67ID:PAkk6Hqaそれをリモートデバッガーと言うと思うよ。
開発環境でビルドして、実行はリモート環境。実行に必要なexeやその他のファイルは、設定しておけば実行時に自動的にリモート側にコピーされる。そしてデバッガーが起動する。
0496デフォルトの名無しさん
2015/07/08(水) 12:45:47.21ID:xsPPpspE環境依存度が高すぎるから VisualStrdio 系のスレで質問し直すのが吉。
そのときはせめて、 VS のバージョンくらい書けよ。
サービスからの起動じゃないと動かない(工夫すれば動かないことも無いと思うが)のならば、
そのことも書いた方がいいな。
ちなみに、サービスの起動/停止については、 net start/stop コマンドでできるから、
バッチファイルでも書いておけ。
net stop 〜
copy \\〜 c:\〜
copy \\〜 c:\〜
net start ~
こんな感じか。これで多少はやらなきゃならないことは減るだろ。
あと、プロジェクトのプロパティ「デバッグ」のところについて
しっかり調べるともっと楽できるかもな。
よさげな方法が見つかったら教えてくれ。
0497デフォルトの名無しさん
2015/07/08(水) 18:07:32.75ID:yzj4SMDb0498デフォルトの名無しさん
2015/07/08(水) 18:11:20.27ID:PAkk6Hqaその後どうなったんだよ?気になって寝られないよ。
それとも、2ch見る暇も無いくらい虎ブってんのか?
0499デフォルトの名無しさん
2015/07/16(木) 20:25:08.45ID:8PKWst4dprivate:
string str = "Parent";
public:
string func() { return str; }
};
class Child : public Parent {
private:
string str = "Child";
};
int main(void) {
cout << Child().func() << endl;
}
これVisualStudio2013で動かすと"Parent"って出るんですが仕様動作ですか?
"Child"って出す方法はありますか?
0500デフォルトの名無しさん
2015/07/16(木) 20:42:33.89ID:97AdtI1Z確かめてないけど。
0501デフォルトの名無しさん
2015/07/16(木) 20:44:43.18ID:0HInDZYofunc()をvirtualにするか、単にオーバーライドするか
0502デフォルトの名無しさん
2015/07/16(木) 20:48:22.58ID:8PKWst4d全部共通の挙動を記述したいのに、ポリモーフィズムになってないような…
継承したときの挙動がJavaとだいぶ違うんですね…
0503デフォルトの名無しさん
2015/07/16(木) 20:51:22.83ID:0HInDZYo"Parent"を表示するという共通の挙動に
0504デフォルトの名無しさん
2015/07/16(木) 21:07:12.81ID:8PKWst4d挙動が異なる部分は個別で書いても、
共通の部分は1か所で書いてほしいという意味です。
0505デフォルトの名無しさん
2015/07/16(木) 21:12:17.89ID:0HInDZYoちょっと言ってる事が分からないんで最小限の"Javaならこんな動作をするんだけど"って
コードをideoneにでも上げてみてくれ
0506デフォルトの名無しさん
2015/07/16(木) 21:26:39.68ID:8PKWst4d0507デフォルトの名無しさん
2015/07/16(木) 21:31:31.63ID:97AdtI1Zコンストラクタで値設定してやるとか
0508デフォルトの名無しさん
2015/07/16(木) 21:32:02.23ID:97AdtI1Z0509デフォルトの名無しさん
2015/07/16(木) 21:38:42.38ID:8PKWst4dJavaも同じ挙動なので正統な仕様っぽいですね
0510デフォルトの名無しさん
2015/07/16(木) 21:57:38.31ID:97AdtI1Z0511デフォルトの名無しさん
2015/07/16(木) 22:04:39.16ID:97AdtI1Z0512デフォルトの名無しさん
2015/07/16(木) 22:07:20.68ID:CJJ7/fpC0513デフォルトの名無しさん
2015/07/16(木) 22:20:20.71ID:97AdtI1Z0514デフォルトの名無しさん
2015/07/16(木) 23:25:09.92ID:y0fv9fm60515デフォルトの名無しさん
2015/07/17(金) 02:38:25.17ID:s3h+5IcC0516デフォルトの名無しさん
2015/07/17(金) 13:12:55.27ID:OTxNgdvH0517デフォルトの名無しさん
2015/07/17(金) 13:36:11.16ID:q0tTJLJ/0518デフォルトの名無しさん
2015/07/18(土) 01:27:59.36ID:+dYah9PS0519デフォルトの名無しさん
2015/07/18(土) 02:26:19.56ID:bSmobx4N俺はCしかやったことないから、間違っているかもしれないが。
> 仮想関数には、派生クラスで再定義できる、という利点があります。
> 【Java では】Java では、クラスのすべてのメソッドは仮想関数です。
Javaだとメソッドは全部上書きできる。
C++はvirtualを宣言しないと出来ないが、基底クラスに指定しておけばデフォルトにはなる。
http://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/virtual.html
ただしstrはメンバ変数(フィールド)なので、virtual指定は出来ない。
俺も515が正解だと思う。
0520デフォルトの名無しさん
2015/07/18(土) 03:14:55.63ID:YrpuCTOJこういう風に書くもんだと思ってたけどな
0521デフォルトの名無しさん
2015/07/18(土) 03:24:51.92ID:YrpuCTOJ結果だけ同じにしたいのならこっちの方がシンプルかも
0522デフォルトの名無しさん
2015/07/18(土) 04:20:59.92ID:bSmobx4Nいや520は駄目だろ、521はいいけど。
515は日本語が若干アレだが、521に近くて、
class Parent {
protected: string str = "Parent";
public: Parent(){} // 空なので省略可
以外同じ
}
なのだと思う。
文法的にどうなのかはちょっと怪しいが、通るのならいいのでは。
0523デフォルトの名無しさん
2015/07/19(日) 21:05:38.46ID:C0eKKOJs>文法的にどうなのかはちょっと怪しい
さらに
>通るのならいいのでは
というスタンスの方がよっぽど怖い
0524デフォルトの名無しさん
2015/07/19(日) 21:36:02.86ID:4AVebAB2意味的には問題ない。だからコンパイルが通ればいい。
C++11なら通るし、昔のC++なら通らないだけだろ。
520と521は本質的に違っていて、
それを同じだと思っているやつに言っても意味ないとは思うが。
当たり前だけど、コンパイルが通りさえすれば全ていいといっているわけではない。
一般的に、改訂されるときは、過去に記述が面倒だったものが簡潔に書けるようになる。
C++11でいい環境ならそれでいいし、駄目ならコンストラクタで初期化する記述を書くしかないだけだろ。
0525デフォルトの名無しさん
2015/07/19(日) 23:44:07.89ID:M/uggKZR0526デフォルトの名無しさん
2015/07/19(日) 23:54:00.89ID:i+qdcRrk0527デフォルトの名無しさん
2015/07/20(月) 00:02:02.31ID:B6aaQcuYリアルタイムに構文チェックできないのがツライ
0528デフォルトの名無しさん
2015/07/20(月) 00:12:57.65ID:Zt6Jwc5S述語が最後に来たり、「てにをは」を読み飛ばすと意味が反対になったり。
論理的な記述よりも時系列に沿った記述に向いているので、小説には向いているのかも知れんが、
技術的な議論を展開するのは難しいのかも。
結論を後回しにするので、ウソを付くのには向いている言語かも。
これのせいで世の中が混乱する。玉虫色言語。
小学生から英語を学習するのに賛成だ。
例えば上記の文章一つとってもいつも迷う。
「小学生から英語を学習するのに賛成だ。」・・・時系列重視
「英語を小学生から学習するのに賛成だ。」・・・目的語重視
はたしてどちらが読みやすく、意味が正確に伝わりやすいのだろうか。
何故こんなことで悩まなくてはならないのだろう。
0529デフォルトの名無しさん
2015/07/20(月) 00:15:46.01ID:1Qy7XHWg君は日本語の良さを全く分かっとらん!
0530デフォルトの名無しさん
2015/07/20(月) 00:17:09.46ID:B6aaQcuY0531デフォルトの名無しさん
2015/07/20(月) 00:24:55.57ID:NxNLCFO0for (int i=0;i<3;i++) printf("w");
0532デフォルトの名無しさん
2015/07/20(月) 00:28:42.11ID:Zt6Jwc5S自分の立場に立ったり、相手の立場に立ったり、
思いやりだとか、なんとか、主体がかなりいい加減。
例えば次の文はどっちでも通る。
「小学生から英語を学習するのに賛成だ。」
「小学生から英語を学習させるのに賛成だ。」
なんとかしてほしい。もやもや
0533デフォルトの名無しさん
2015/07/20(月) 00:51:14.45ID:Zt6Jwc5Sと言うことはこれが前に来る言語を使っている人たちは、ひとえに機能主義なんです。
機能主義は立場よりも横のつながりを重視します。
一方で思いやりに欠けます。しかし、そこに拘るのは男らしくないという考え方です。
こういう何らかの感覚的な違いが、結構重要な何かなんじゃないかと最近ひしひし。
0534デフォルトの名無しさん
2015/07/20(月) 01:27:14.66ID:Zt6Jwc5Sこういう曖昧な表現を使うと、毛の壁さんのような人が、独自の解釈をして、勘違いして、変な展開になる可能性が。
わざとなんですかね。一定以上の知能が無い人には真意が伝わらないようにするっていう。
二重の会話。凄い技術ですね。
0535デフォルトの名無しさん
2015/07/20(月) 02:12:16.93ID:ERLwMp/Jそれは論理的に日本語で記述しない側の問題,
あるいはもともと論理的でない内容だったという話なのでは?
>>532
ヨーロッパ諸語でも格変化の残っている屈折語ならば,主語の省略は普通ときいている.
>>533
昔やったドイツ語では動詞が最後に来る場合があった,この場合動詞が半分にちょん切れると辞書が引けず困った.
英語でも分詞構文はかなりあいまいで読み手が内容を推察しないといけないかと
憲厳密性の必要なはずの法律・条文に割合に多い
https://en.wikisource.org/wiki/Constitution_of_Japan#The_Constitution_of_Japan
0536デフォルトの名無しさん
2015/07/20(月) 02:32:06.60ID:Zt6Jwc5S風通しが良すぎて、要らなくなったらはいサヨナラだったりして。
機能主義って結構厳しいわけで。
分かりやすく、風通しが良い==公務員の正反対の社風と考えると、疑問がわくよね。
今の時代、「わが社は市役所の様な社風です」ってPRしたほうが人気出るんじゃね。
0537デフォルトの名無しさん
2015/07/20(月) 02:55:37.94ID:Zt6Jwc5S医者とか大学教授とか政治家とか。
余裕の有る業種は機能的になる必要が無いので風通しが悪くなる。
余裕の無い業種は機能的にならざるを得ないので風通しが良くなる。
それに、普通に考えて、働く上で、風通しが良くて、何か得することがあるだろうか。
そりゃ会社は得するだろうが、従業員的にはリスクの方が大きいような。
派遣とか有る意味最高に風通し良いよな。会社の垣根すら越えているわけだから。
0538デフォルトの名無しさん
2015/07/20(月) 03:16:13.69ID:Zt6Jwc5S日本的で良いではないか。Matzも喜ぶ。
裏を返せば縦割り行政で利権主義とも。
0539デフォルトの名無しさん
2015/07/20(月) 03:30:39.42ID:Zt6Jwc5S非常に日本的といえるね。
それがたとえ機能的じゃなかったとしても、そういう風に振舞うことが美徳とされている。
デザインパターンとかいった様式美も時代劇みたいでいいね。
0540デフォルトの名無しさん
2015/07/20(月) 04:07:18.07ID:exWjJYkaスレタイの日本語と空気も読めるようになっとけよ?
0541デフォルトの名無しさん
2015/07/20(月) 12:07:06.33ID:B6aaQcuY0542デフォルトの名無しさん
2015/07/20(月) 21:50:13.92ID:4CXi8vOi0543デフォルトの名無しさん
2015/07/22(水) 23:52:29.80ID:1Ae0pJ+DあるOSSの関数を動的ロードしたいのですが、ヘッダを見ると
単なるマクロでした
#define macro_func(a) hoge_func(a,b,c)
hoge_funcを動的ロードするのは、macro_funcの中身が今後どう変わるか
分からないので極力避けたいです
どうすればmacro_funcを動的ロードできるか教えてください
0544デフォルトの名無しさん
2015/07/23(木) 00:01:59.37ID:CfJH8He2どうみても関数hoge_funcの実体がないとmacro_funcは動作しない。
動的・静的ロード、コード全体の埋め込みに関わらず、hoge_funcがないと無理。
0545デフォルトの名無しさん
2015/07/23(木) 01:21:06.57ID:65Ur3bjf0546デフォルトの名無しさん
2015/07/24(金) 11:05:32.19ID:+CDH8aof文字列扱う場合、エスケープってやるじゃないですか。
"\"あいうえお\""
こんな感じ。これ見辛いし面倒だし
""あいうえお""
でええやん?って思うんですが。どうですか?
0547デフォルトの名無しさん
2015/07/24(金) 11:15:53.69ID:OLl6qPEd""あいうえお""
これは、
"<空の文字列>"あいうえお"<空の文字列>"
と解釈されるぞ。
0548デフォルトの名無しさん
2015/07/24(金) 11:25:05.67ID:+CDH8aofいや、だからそのcやc++の仕様を拡張してエスケープ無しで行けるようにしたら良いんじゃないかと…
0549デフォルトの名無しさん
2015/07/24(金) 11:26:49.57ID:yzOD5LHX0550デフォルトの名無しさん
2015/07/24(金) 13:11:20.49ID:otR8/vJ50551デフォルトの名無しさん
2015/07/24(金) 13:58:41.01ID:LT/1nm8phttp://ideone.com/VU0Ru9
0552デフォルトの名無しさん
2015/07/24(金) 14:15:50.67ID:+CDH8aofなるほど。
区別出来ないのか。だったら"や'では無くてasciiコードに1文字新しい記号を割り当てて例えば''' トリプルクオーテーション
みたいなの定義して文字列はこの記号で囲う。この記号自身は文字列に使ってはいけないとか言う仕様にするのはどうかな?
0553デフォルトの名無しさん
2015/07/24(金) 14:19:59.16ID:yzOD5LHX0554デフォルトの名無しさん
2015/07/24(金) 14:34:24.73ID:OLl6qPEdこんな小難しい例を挙げなくても、
"";int i;"";
これで十分。このコード、コンパイルは通ります。
>>552
それって今と同じ状況じゃないですか。
再帰的にどんどん増やしていくんですか?
0555デフォルトの名無しさん
2015/07/24(金) 18:15:33.40ID:7eFkrdf60556デフォルトの名無しさん
2015/07/24(金) 20:46:34.43ID:B25T497v何やってもおかしくない
0557デフォルトの名無しさん
2015/07/24(金) 20:52:37.92ID:eC0qtT6i今からそれを変更するのはあまりにも影響が大きすぎるでしょう
「\"」の見栄えのためだけにとんでもないコストを払うのは現実的ではないとおもうよ
0558デフォルトの名無しさん
2015/07/24(金) 21:01:28.24ID:OLl6qPEd過去にはバックスラッシュを\マークにすると言う離れ業をやってのけたわけだがね。
もともとの話は、
"\"あいうえお\""
が見にくいって話だったけど、\マークだから余計に見にくいってのも有るね。
変なところで話がつながった。おしまい
0559デフォルトの名無しさん
2015/07/24(金) 23:30:32.86ID:M2zLZm11@"""あいうえお""";
となるな。
0560デフォルトの名無しさん
2015/07/25(土) 09:38:50.40ID:swByAiFJ0561デフォルトの名無しさん
2015/07/25(土) 11:23:13.05ID:O+qig66a結局そのうちその文字自身を文字列に入れたくなることが出てきていたちごっこ
0562デフォルトの名無しさん
2015/07/25(土) 11:31:14.17ID:bLirGUmgasciiコードが異なる"を二種類定義してだなあ、文字列定義で使う一つ目の"で文字列を囲って、文字列の中身は二つ目の"を使えば
"あ"い"う"
"""
""""""""
など何でもOK。俺って天才だろ
0563デフォルトの名無しさん
2015/07/25(土) 11:31:15.57ID:BM2K7hmS0564デフォルトの名無しさん
2015/07/25(土) 11:58:32.89ID:O+qig66a0565デフォルトの名無しさん
2015/07/25(土) 14:48:08.13ID:xrZjcDNk'"' "あいうえお" '"'
0566デフォルトの名無しさん
2015/07/25(土) 15:27:06.34ID:SkX3Z7YG"\"abc\""
`"abc"`
q{"abc"}
q"["abc"]"
# ほんとは この倍くらい記法の種類がある
0567デフォルトの名無しさん
2015/07/25(土) 19:10:08.76ID:kRwC234a昔VCだと通っていたが
0568デフォルトの名無しさん
2015/07/25(土) 19:13:50.43ID:9SEykvB/0569デフォルトの名無しさん
2015/07/25(土) 20:13:53.13ID:bLirGUmgテンプレートのテンプレートなんて使ったら、後で自分で見返しても何してる処理かわからなく成りませんか?
0570デフォルトの名無しさん
2015/07/25(土) 20:22:52.03ID:9SEykvB/0571デフォルトの名無しさん
2015/07/25(土) 20:32:50.55ID:HTRLB0UZ0572デフォルトの名無しさん
2015/07/25(土) 20:45:06.07ID:FjYNChriそんな事ねぇよ
だいたいvectorで二次元配列書こうとするだけで必要になるでしょうが
0573デフォルトの名無しさん
2015/07/25(土) 20:48:37.93ID:bLirGUmgvectorのvectorなんか使わなくても
普通に二次元配列とか、自前のlist構造みたいなの使う方がやり易く無いですか?
0574デフォルトの名無しさん
2015/07/25(土) 20:59:22.38ID:FjYNChri途中で列方向に伸ばしたり行方向に伸ばしたくなる事がたまにある
そういう時はvectorが便利
0575デフォルトの名無しさん
2015/07/25(土) 21:00:03.73ID:FjYNChrilistなんか糞遅くて使えるか
0576デフォルトの名無しさん
2015/07/26(日) 09:22:04.99ID:Kcbwho8L0577デフォルトの名無しさん
2015/07/26(日) 15:03:16.44ID:kbQtFiQ+0578デフォルトの名無しさん
2015/07/26(日) 16:47:25.24ID:P7wSwPkX行方向がvectorでは遅くなる
0579デフォルトの名無しさん
2015/07/26(日) 17:41:01.90ID:vMGDFyGs実測ではlistよりvectorが速くなることってめったにない気がするんだよなぁ。
俺個人の感想だが。
0580デフォルトの名無しさん
2015/07/26(日) 17:41:53.36ID:vMGDFyGs0581デフォルトの名無しさん
2015/07/26(日) 18:02:19.78ID:P7wSwPkX100000行位のテキストを想定して、ランダムにカット&ペーストを繰り返す
0582デフォルトの名無しさん
2015/07/26(日) 18:25:36.24ID:iQP3uV6G処理のやり方にもよるからね。
毎回挿入位置までリストをたぐる操作をやっていたりしたら計算量もたいして有利じゃないし。
0583デフォルトの名無しさん
2015/07/26(日) 20:39:58.99ID:kABshWn7コピペのブロック指定中は既に先頭のイテレータを取得した状態だという事だし、そこから
splice()を実行するのならlistの方が遥かに速いだろうけど、イテレータを取得するのは
vectorの方が圧倒的に速い
0584デフォルトの名無しさん
2015/07/26(日) 22:36:35.84ID:kbQtFiQ+行の変更があるのは、改行した時とか、限定的。
ユーザの入力があったときしか、行の変更は無い。
なので、一秒間に何十回もそういう操作があるわけではない。
一方再描画は頻繁に発生する。滑らかなスクロールをするためには、
一秒間に60回の描画が発生するかもしれない。
それなのにlistはランダムアクセスが出来ません。
ランダムアクセスができないと言うことは、ほかにも色々な制限をもたらします。
たとえばクイックソートは絶望的。とにかく面倒。素直にvector使っておけばよい。
ここで、vectorを使う場合を考える。
ポインタ一つ4バイトとして、100000行だと、400KB。
これのmemmoveに何msかかるか考えてみろ。
画像で言えば32bitで1000x100のビットマップ程度の大きさに相当して、
これは、フルハイビジョンの1/20の面積しかない。
この程度の処理がもたつくようでは、面積20倍、それも複雑なデコード処理が必要な
フルハイビジョン動画の再生は困難なわけで、問題になりえるか、考えるまでも無い。
0585デフォルトの名無しさん
2015/07/27(月) 01:29:16.53ID:nrCiDIHC行のイテレータはadvance()で取るとして、erase()やinsert()と、splice()を
使って行の長さを適当に変化させて、advance()が勝つかinsert()が勝つか
実測するしかない
0586デフォルトの名無しさん
2015/07/27(月) 07:24:58.31ID:oo3Jt8Wjvector の不利な点―削除前詰はコストが高い―を取り落とす人が出てきたようだ
0587デフォルトの名無しさん
2015/07/27(月) 11:39:00.18ID:KH8d/GA1高々400KBのmemmoveの実行時間を調べてどうするんだよ。
今のPCのメモリ帯域は、理論値で21GB/sもあるのに、一体一秒に何千回改行する気だよwww
こんなものいちいち測定するなら、ありとあらゆる物を測定しなきゃならん。
大体、時たま発生する400KBのmemmoveがもたつく環境で、テキストエディが満足に動くはずが無い。
画面サイズを1024x768と小さめに見積もっても4MB、つまり400KBの10倍あるのに、
滑らかな描画が出来るわけが無い。まず問題視するならそっち。
そういう意味で破綻しているし、考える意味が無い問題と言える。
今のPCの能力では、テキストエディタの行を保持するのに、listを使ってもvectorを使っても
問題ない速度で動く。それはわかりきっているわけで、測定する意味が無い。
問題になるとしたら、描画関係。そっちを優先したデータ構造にすべし。
どちらを使ってもいいのなら、わざわざランダムアクセスが出来ないlistを選ぶ意味は無い。
面倒なだけ。何も考えずにvectorを使えばいい。
0588デフォルトの名無しさん
2015/07/27(月) 11:47:35.16ID:KH8d/GA1描画に都合の良いデータ構造を採用するべきなんだよ。
行の変更は頻繁に起こるわけではないし、
たかだか400KBのmemmoveなんぞ、描画の重さに比べれば、無いも同然なわけで。
そんなものを測定して早い遅い言っても何の意味も無い。描画を中心に考えるべし。
描画に適したデータ構造と言う意味では、ランダムアクセスの出来るvecotrの方が
使いやすいといえる。丁寧に書いてあげるのなら、listでも構わない、が、
し・か・し、わざわざランダムアクセスの出来ないlistを使う意味は無いので、vectorでよい。
listだと、ソートするだけでも鬱陶しい。
0589デフォルトの名無しさん
2015/07/27(月) 12:15:48.73ID:KH8d/GA1これだけの量をレスポンスを損なうことなくリアルタイムにレンダリングしなければならないのに、
たかだかたまに起こる400KBのmemmoveに拘っている暇は無い。
実際に、4K解像度で、何も考えずに、アンチエイリアス効かせて、DrawTextで全面描画すると、
カクカクになって、まるで使い物にならない。たぶん1FPS位になる。
実際、7のエクスプローラも、4K解像度で最大化すると、選択ツールがカクカクになる。
7のエクスプローラにとって4K解像度は想定外ということ。
更新のあった場所だけレンダリングするなり、DirectWrite使うなり、何らかの対策が必要。
お前らが過去に作ったツールも、4K解像度で滑らかに動くかどうか、一度確認してみたほうが良い。
特に遅いのが、アンチエイリアスの効いた文字の描画。FHD解像度では問題なくても、4Kだとカクカクになる。
これからのプログラムは4Kに対応しなくちゃね。
0590デフォルトの名無しさん
2015/07/27(月) 13:31:05.37ID:KH8d/GA1実際には削除の方が問題になる。
memmoveは単純なアルゴリズムだしSSE化されているので高速だけど、
freeやdeleteは空き領域を結合したりと、複雑なアルゴリズムでとても遅いから。
加えてデストラクタも走るし。
しかも、vectorを使った場合でもlistを使った場合でも、
本体とバッファで、一行に付き2回のdeleteが走る。
経験則だけど、10万行を一気に削除すると、多分1秒ぐらい固まる。もっとかかるかも。
スレッド立ち上げておいて、バックグラウンドで遅延deleteすると良いかも。
こういう問題を放っておいて、挿入時間がどうとか、馬鹿げてるね。
根本的に目の付け所がおかしいんだよ。
それでも描画の方がもっと問題だが。
0591デフォルトの名無しさん
2015/07/27(月) 13:33:17.24ID:L+84gj0Aほれ
Nを適当にいじって手持ちの環境で走らせてみ
listはある範囲の終点のイテレータを取得するのにも順繰りにたどるしかないんで
いくらinsertが速いと言ってもvectorの約3倍ほど時間が掛かるようだ
0592デフォルトの名無しさん
2015/07/27(月) 19:42:02.36ID:8jkVFbGd新機軸の考察を交えた、高尚な意見を語るのならともかく
0593デフォルトの名無しさん
2015/07/27(月) 20:59:48.12ID:9agqNJ/20594デフォルトの名無しさん
2015/07/27(月) 21:59:34.50ID:kF5kcc0V0595デフォルトの名無しさん
2015/07/27(月) 22:24:31.49ID:b0q7AFFpそれに口が達者というより井の中の蛙って感じだね
仕事してないっしょ?
0596デフォルトの名無しさん
2015/07/27(月) 22:30:32.68ID:DuLbgldQ0597デフォルトの名無しさん
2015/07/27(月) 22:38:24.99ID:KcMXEwaZ俺の環境ではvectorのほうがちょっと速いくらいで3倍の差はつかなかった。
最適化してないからかもしれん。
最適化オプション付けたらなぜか完走しない。
原因はよくわからん。
0598デフォルトの名無しさん
2015/07/27(月) 22:50:41.69ID:sgwB7yTG複数の要素をinsertするとその度にポインタを辿って一個ずつしか挿入出来ないのな
普通リスト操作と言うとつながったリストの先頭と最後尾だけを指定すればポンと挿入
出来るはずなのにそうなってない
C++11で改良されたかと思ったけど駄目だった
でも>>591は改良の余地があるね
挿入もsplice()を使うべき
0599デフォルトの名無しさん
2015/07/27(月) 23:05:02.49ID:Mi01ZGiW0600デフォルトの名無しさん
2015/07/27(月) 23:18:01.27ID:KcMXEwaZ0601デフォルトの名無しさん
2015/07/27(月) 23:40:10.31ID:eqeml5nf0602デフォルトの名無しさん
2015/07/27(月) 23:48:22.48ID:pp6uoCzE予想どおりstd::nextだけで全体の73%もの時間を消費してる
これじゃあベンチマークの意味ないよ
ランダムに挿入するのが裏目に出てる
0603デフォルトの名無しさん
2015/07/27(月) 23:50:30.57ID:pp6uoCzEもう少しベンチマークプログラムのアルゴリズムを考えるべきだろこれ
0604デフォルトの名無しさん
2015/07/28(火) 00:08:57.30ID:WNbWyPpfわからんけど。
0605デフォルトの名無しさん
2015/07/28(火) 08:24:07.21ID:tsfiL0l/テキストエディタでは探索コストは問題にならないのでは?
0606デフォルトの名無しさん
2015/07/28(火) 11:50:55.62ID:dCM9/1ijキャレット位置のイテレータも保存して、
マウスカーソル直下のイテレータも保存して、
と、どんどん保存するイテレータが増えていくわけですね。
面倒になってきて、そのうちイテレータキャッシュを作り始めると・・・
で、そこまでするメリットは?
0607デフォルトの名無しさん
2015/07/28(火) 12:35:30.16ID:tsfiL0l/0608デフォルトの名無しさん
2015/07/28(火) 12:42:23.90ID:tsfiL0l/0609デフォルトの名無しさん
2015/08/06(木) 08:00:13.21ID:f8gvnJE6誰か知ってたら教えていただきたきそうろう
0610デフォルトの名無しさん
2015/08/06(木) 08:38:20.05ID:BM+A+5/Q0611デフォルトの名無しさん
2015/08/19(水) 23:31:20.42ID:8uw32tI0分割したい文字列はhttpリクエストに入っている/aaaa.js/などの値です。
# 今回は拡張子を取得したくstrtokで.を使っ
て分割しようとしています。
ただ、このstrtokは元の文字列を破壊してしまうようで、元の文字列は破壊したくなく思っています。
そこで、以下のページを発見しました。適合コード部分を参考にしようと思っています。
�@https://www.jpcert.or.jp/sc-rules/c-str06-c.html
マロックを使って、別の文字列にコピーしましょうね、ということなんですが、
マロックに詳しくなく、上記でメモリリークや不具合等が起きないか/問題ないのか気になっています。
マロックについて、調査したところ、以下のページの諸注意を見つけました。
�Ahttp://www.geocities.co.jp/SiliconValley-Bay/7437/c/malloc.html
>>buffの値を変更するというのは別に構わないのですが、freeに渡す前に元の値に戻す必要があります。
この文言を見た限り、�@に記載されてるfree(copy);ではちゃんとfreeされないのでは、と懸念しています。
そう思ってるのはcopyはstrtokによって破壊されており、元の値と異なってしまってると思ってるからです。
私の考えは正しいのでしょうか。。。それとも�@の書き方で問題ないのでしょうか。
C言語に詳しい方いらっしゃればご教授頂きたいです、m(__)m
0612デフォルトの名無しさん
2015/08/19(水) 23:37:00.42ID:KWfiCcWC0613デフォルトの名無しさん
2015/08/19(水) 23:43:19.12ID:8uw32tI0ああ、ごめんなさい。
文字列を別の箱にコピーしたら元の文字列を破壊しなくて済むよね、
という発想で、別の箱にコピーする方法を探してました。
すると�@のページが出てきてなれないマロックとかいうものが出てきて困惑したという感じです。
マロックがよくわからないので、�@のfreeなどが適切なのかわからず。。。
0614デフォルトの名無しさん
2015/08/19(水) 23:46:23.94ID:8uw32tI0そして�@の最後でcopy=NULLとしてるのもなんでだろう、、とおもっており。
freeだけだとまずいんですかね。
0615デフォルトの名無しさん
2015/08/19(水) 23:52:19.21ID:KWfiCcWC英単語を日本語で発音したものを日本語文字で書き起こしたものなんてさ
0616デフォルトの名無しさん
2015/08/19(水) 23:58:08.57ID:KWfiCcWC普通に配列を宣言する場合って、ソースコードを書く時点でサイズが決まってしまうけど、
そうじゃなくて任意の長さの文字列に対して配列を確保したい場合はmallocを使うもの
と考えておけばいい。
0617デフォルトの名無しさん
2015/08/20(木) 00:29:51.57ID:hK7dURUdああ、それはわかります。動的に確保したいからって意味だと思います。
よくわからないのがfree関係のところです。
0618デフォルトの名無しさん
2015/08/20(木) 00:58:54.12ID:iXzlVX06copy自体は確保されたメモリの先頭アドレスが格納されている。
特にそのアドレス値自体は変更してないので、freeで問題無く開放される。
変更されているのは、copyのアドレスが指し示すメモリに格納されている値。
あと、NULLを入れるのは、そうしておくとこれは確保されたメモリなのか、
開放したけどそのまま放置されているものなのか分かるようにする方法。
freeした後でcopyを再び再利用するとかでさ。
0619デフォルトの名無しさん
2015/08/20(木) 01:18:46.57ID:hK7dURUdなるほど。freeはアドレス値に対して解放するものなので、
格納されてる値が変わったとしても関係ないわけですね。
NULLを入れるのは目印的なもの?って感じなんですね。
0620デフォルトの名無しさん
2015/08/20(木) 06:50:00.21ID:iXzlVX060621デフォルトの名無しさん
2015/08/20(木) 09:23:26.67ID:7wC+DvH00622デフォルトの名無しさん
2015/08/20(木) 09:39:44.94ID:83vcvbQR0623デフォルトの名無しさん
2015/08/20(木) 11:57:47.23ID:mELjCRuD少し調べてみます。
後、ちょっと気になったんですが、上記の様なケースでmallocは絶対つかわないといけないもんなんですかね。
逆にmallocにかんする部分をコメントアウトしたりして使わない場合はどうなるんでしょう。エラー?
0624デフォルトの名無しさん
2015/08/20(木) 12:10:26.88ID:XXXu8/KU0625デフォルトの名無しさん
2015/08/20(木) 12:26:07.32ID:mELjCRuDmallocがないといわゆるセグメンテーション違反になるんですね。よく意味はわかってませんが。
そして、apacheモジュール開発のためにrequest_rec構造体のuriというのを上記の方法を用いて分割しようとしています。r->uriで参照してます。
しかし、リクエストを受け付けておそらくmalloc時にセグメンテーション違反のエラー文言が、、
*copy=(char *)malloc(strlen(r->uri)+1);
上記が悪いまでは推測できてるのですが、
これの何が悪いのかがわかりません、、
ちなみに推測したのはこれを加えた時点で、リクエスト受けた時にエラーログにセグメンテーションフォウルトと出るからです。
よくわからないのは、uriの長さ取れてて、その+1ならちゃんと領域確保されてそうなのに、だめなんだ、、ってので混乱してます。
うーん。
0626デフォルトの名無しさん
2015/08/20(木) 12:36:47.32ID:mELjCRuDmallocがないといわゆるセグメンテーション違反になるんですね。よく意味はわかってませんが。
そして、apacheモジュール開発のためにrequest_rec構造体のuriというのを上記の方法を用いて分割しようとしています。r->uriで参照してます。
しかし、リクエストを受け付けておそらくmalloc時にセグメンテーション違反のエラー文言が、、
*copy=(char *)malloc(strlen(r->uri)+1);
上記が悪いまでは推測できてるのですが、
これの何が悪いのかがわかりません、、
ちなみに推測したのはこれを加えた時点で、リクエスト受けた時にエラーログにセグメンテーションフォウルトと出るからです。
よくわからないのは、uriの長さ取れてて、その+1ならちゃんと領域確保されてそうなのに、だめなんだ、、ってので混乱してます。
うーん。
0627デフォルトの名無しさん
2015/08/20(木) 12:38:03.31ID:mELjCRuD*copyとしてたのをcopyにしたらなおりました、、
書き方間違えてたっぽいですが、なんか理由は不明のままに。
0628デフォルトの名無しさん
2015/08/20(木) 12:42:22.66ID:q4vIrycPぜひ公開しないで欲しい
まぁ演習かなんかだろうが
0629デフォルトの名無しさん
2015/08/20(木) 12:57:42.09ID:C0zkB6yz一旦筆を止めて入門書のポインターあたりから勉強しなおすべき
0630デフォルトの名無しさん
2015/08/20(木) 15:50:17.76ID:LQ4KOo8Kポインタすらわかってない奴がC開発なんてすんなよ
0631デフォルトの名無しさん
2015/08/20(木) 16:55:54.98ID:dJVl2eol余談だけど、Cの標準関数で与えたパラメータの中身を関数コールで勝手に破壊するものって他にあったっけ?
0632デフォルトの名無しさん
2015/08/20(木) 21:30:07.36ID:Amgj5mKYそれほど多くないレジスタとメモリ、環境による出力の手続きさえ覚えればこんなにラクな言語はないと思うが
逆にVMとかフレームワークに支配される言語の方が難しい。
そういえば昔、アセンブラは出来るがBASICは出来ないという技術者がいたな。
0633デフォルトの名無しさん
2015/08/20(木) 21:46:06.11ID:d5r4dVNcニュアンスは違うけど、time()も引き数がNULLじゃなければ書き換えるね。
strncpy()やstrncat()の振る舞いも分かり難いし。
0634デフォルトの名無しさん
2015/08/20(木) 21:48:41.17ID:d5r4dVNc0635デフォルトの名無しさん
2015/08/20(木) 21:54:30.48ID:q4vIrycPいまどきは大丈夫なんだけど、誰も使わないんだ
0636デフォルトの名無しさん
2015/08/20(木) 23:29:24.59ID:dJVl2eolうん、それはまぁそうなんだけど‥
timeは「ここへ書き込んでね」のポインタ、strtokは「これを調べて頂戴」の元データなんだよね
元データは書き換えるし、関数内部で"状態"を保持してて、関数コールの度にそれが遷移する挙動が呼び出し側から見えないし→strtok (>_<)
素直に「元データ」「デリミタ」「トークンの位置」「トークンのコピー先ポインタ」を引数で渡して
取り出したトークンをコピー先に書き込んでくれた方が分かりやすい希ガス
で、関数戻り値はコピーできた文字数で、コピーできないエラーがあったら-1とか‥ たとえばね
0637デフォルトの名無しさん
2015/08/21(金) 00:45:01.87ID:pYz5qGfR0638デフォルトの名無しさん
2015/08/21(金) 07:02:32.53ID:ALerSfbeマルチスレッドでの利用禁止になってるやつとか
0639デフォルトの名無しさん
2015/08/22(土) 14:49:35.32ID:mr0xWKbe誰か助けてくれ
0640デフォルトの名無しさん
2015/08/22(土) 16:05:22.03ID:TdiPFjxMpopen()のソースでも見たら?w
0641デフォルトの名無しさん
2015/08/22(土) 16:28:29.39ID:nrIOmrw70642デフォルトの名無しさん
2015/08/22(土) 16:57:57.04ID:kXIlr7qG0643デフォルトの名無しさん
2015/08/26(水) 17:14:26.26ID:m14uiM4vCをjavaに書き直したいがCの勉強が先か。
0644デフォルトの名無しさん
2015/08/26(水) 19:17:39.07ID:YgutvNxCGetCurrentDirectory関数の動きがおかしいです。
下の処理を通る時、よくソフトが落ちます。
6.0で生成したexeではおきない現象です。
GetCurrentDirectoryを使わずに。定数の文字列をつかったら落ちませんが、
できれば、GetCurrentDirectoryかそれに近い関数を使いたいです。
原因と対策がわかる方教えて下さい。
ーーーーーー//グローバル
char szAppPath[] ;
// アプリケーション起動パス確保
GetCurrentDirectory( MAX_PATH, szAppPath ) ;//<ここは問題ない
ーーーーーー//ここの関数でカレントに全角があるとよく落ちる
//デフォルトカレントだとたまーに落ちる
//半角のみの任意のファルダもたまに落ちる
CString strModuleDir = szAppPath;
GetCurrentDirectory( MAX_PATH, strModuleDir.GetBuffer( 0 ) ) ;
0645片山博文MZ ◆T6xkBnTXz7B0
2015/08/26(水) 19:19:25.37ID:FI4yoOkF0646デフォルトの名無しさん
2015/08/27(木) 01:23:41.97ID:B/17Cww9http://cpplover.blogspot.jp/2014/10/ctypeidtypeinfotypeindex.html
struct Base { virtual void p() = 0 ; } ;
struct Cat : Base { } ;
struct Dog : Base { } ;
std::string get_name( Base & ref )
{
decltype(auto) ti = typeid(ref) ;
if ( ti == typeid(Cat) )
return u8"猫" ;
else if ( ti == typeid(Dog) )
return u8"犬" ;
return u8"謎" ;
}
コンパイルしてみると expected primary-expression before 'decltype' とエラーになります
そもそも decltype(auto) という書き方自体は正しいんでしょうか?
0647デフォルトの名無しさん
2015/08/27(木) 01:47:35.95ID:Hj8yQhv+GetCurrentDirectory( MAX_PATH, strModuleDir.GetBuffer( MAX_PATH ) ) ;
にしないとまずいんじゃない?領域が確保されないでしょ
0648デフォルトの名無しさん
2015/09/06(日) 08:18:00.15ID:o5btW5BW同じ人のページに情報があった。
decltype(auto) はC++14で追加された(or 追加される予定の)機能みたいね。
ttp://cpplover.blogspot.jp/2013/08/decltypeauto.html
0649デフォルトの名無しさん
2015/09/09(水) 06:58:06.36ID:MfaLsueufor i in `seq 1 2000000`
do
while :;
do
RND=0から65535までの数字を格納。
case $RND in
条件1)
echo hogehohe
break;;
条件2)
echo aaaaaaaa
esac
done
done
forの中で、whileをぶんまわすというだけの簡単なスクリプトを書きました。
これをforで二百万回回したいのですが、1時間に5000回ぐらいしか回せません。
できる限り早くこういうのをぶんまわしたいのですが、
コンパイラ言語?っていうんですかね、ソース書いて、実行ファイルを作るタイプの言語。
�@コンパウラ言語?的なものなら、もっと早く実行できますか?
�Aこういうのに適した比較的習得が簡単な言語って何かありませんか?
やりたいことは、ぱちんこの抽選シミュレーションてきなものです。
ある知識は、bsahで簡単なスクリプトをかくぐらいです、よろしくお願いします。
0650デフォルトの名無しさん
2015/09/09(水) 10:01:58.42ID:/MxCO9yiファイルか/dev/nullにリダイレクトしたらどのくらいで終わる?
0651デフォルトの名無しさん
2015/09/09(水) 10:10:34.57ID:/MxCO9yiスクリプトでもいい気がする、、まあHelloWorldからやってみては
0652デフォルトの名無しさん
2015/09/09(水) 10:27:59.50ID:c9DyEDAoそもそもやりたいことと合ってるの?
先頭のforは時間とメモリを食うから、
for((i=1 ; i < 2000000 ; i++))
とかでないと始まるまで時間かかるし、そもそも乱数が条件に
一致したときしか次のループに進まないから、早さは乱数次第だし
0653デフォルトの名無しさん
2015/09/09(水) 10:39:29.79ID:UbDBGCr0パチンコの抽選なんて人為的なもんだろ
純粋な乱数の訳がない
0654デフォルトの名無しさん
2015/09/09(水) 12:15:52.21ID:AK7tGDzj0655649
2015/09/09(水) 19:03:24.05ID:MfaLsueu>>652
forの書き換えと、echo 先を変えたらかなり速くなりました。
進みにムラがあるのですが(条件に一致するまで時間がかかるとかだと思います)
3倍にはなった感じです。
まずは御礼申し上げます。
>>653
これだけでパチンコってわかるってすごいですね。
>>651
>>654
質問しなおさせていただきます。
0656デフォルトの名無しさん
2015/09/09(水) 19:04:25.80ID:M9IJrk250657649
2015/09/09(水) 19:17:35.51ID:MfaLsueuプログラムを勉強しようと思います。
プログラミング言語は、CかC++を使用しようと思います。
�@パチンコの抽選をシミュレーションするのに、bashで簡単に書いて見たのですが、
実行速度が遅い(できれば、当たり10万回引いて数分〜1時間とかそういうのにしたい)。
>当たり10万回引いて数分〜1時間程度とかそういうのにしたい
というのは、識者の皆さまから見ても難しいというレベルでしょうか。
�Aスクリプト(bash)と、Cで似たようなコードを書いて、コンパイルしたものって
超がつくほど明らかな、実行速度の違いってありますでしょうか。
それとも「実行を早くする工夫を重ねないと、たいして速度はかわらない」もんでしょうか。
勝手なイメージですが、スクリプトとコンパイルが必要なものを比べると、
コンパイルしたものの方が、実行速度がすごく早いってイメージがあります。
�B今手元に、「やさしいC」と「ねこでもわかるC」という本が2冊ありますが、
お勧めの「ド素人はこれから読め」みたいな名著ってありますでしょうか。
ちなみに古本屋の100円コーナーにあったので、買っただけで1ページも読んでません。
>>656
うわーお恥ずかしいです・・・。申し訳ありません。
0658デフォルトの名無しさん
2015/09/09(水) 19:27:05.49ID:7ZaI5L5+やりたい事を1つ1つネットで調べるだけでおk
0659デフォルトの名無しさん
2015/09/09(水) 19:29:16.87ID:+quVusLF0660デフォルトの名無しさん
2015/09/09(水) 20:13:46.40ID:4DuqUcJJ0661デフォルトの名無しさん
2015/09/09(水) 20:18:16.39ID:/MxCO9yiまあそこにgccも入ってるだろうからいきなり試せるよ
条件がわからんけどほぼそのまま移行できる、置き換えいるけど
0662デフォルトの名無しさん
2015/09/09(水) 20:28:15.38ID:luIXYWNp>買っただけで1ページも読んでません。
聞く前にまず読め
んで試せ
どうせ言われて買ってもよまねぇだろw
0663デフォルトの名無しさん
2015/09/09(水) 20:42:45.10ID:UbDBGCr0パチンコ何てやめとけ。
ギャンブルは競馬の三連単がオススメ。
0664デフォルトの名無しさん
2015/09/09(水) 21:25:07.11ID:V9adpqxF0665デフォルトの名無しさん
2015/09/09(水) 21:39:20.31ID:cP17XdT8シェルスクリプトでは、10万行のループ処理にかかる時間は、
whileでは5秒、forでは9分かかる
それらを、awkとperlに書き直せば、0.1秒。
たぶん、Python, Rubyでも同じくらいだろう
特にbashは、dashよりもずっと遅い。
シェルスクリプトでは一々、
コマンド(プロセス)を起動するから遅い。
しかも外部コマンドは、組み込みコマンドよりも、さらに遅い
一般的に速い順番は、
C/C++, Java > スクリプト言語 > シェルスクリプト
Python, Ruby が比較的、簡単なのでおすすめ。
C/C++にはポインタという地獄があるので、
君の学力では無理
0666デフォルトの名無しさん
2015/09/09(水) 21:46:28.99ID:+quVusLFもしゲームづくりに使うなら再現性よりもインチキ麻雀みたいのでもいい。
設定資料が手に入ってて、プログラムするだけなのか?
0667デフォルトの名無しさん
2015/09/09(水) 21:52:57.11ID:cP17XdT8C/C++, Java で、1秒間に、
100万回の計算量なら楽勝で、
500万回までで見積もる
0668デフォルトの名無しさん
2015/09/09(水) 23:37:42.99ID:iPfr8Kps間に合わないならPerl系
でもだめなら C/C++
が通常のUnix/Linux屋の流れです。
まぁデイリなバッチならシェルで十分かと。
0669デフォルトの名無しさん
2015/09/10(木) 09:30:34.07ID:0F4QMyo/カジノもな
0670デフォルトの名無しさん
2015/09/12(土) 21:09:12.76ID:LSgZsaGcサンプルコードにまともなエラーチェックが無いからだ。
たとえばこんなサンプルコードがある。
while (p != 999) {
printf("点数(999で終了)---");
scanf("%d", &p);
if (p != 999) {
sum = sum + p;
n++;
}
}
このサンプルコードの scanf に間違えて英字を入力したら何が起きるだろうか。
scanf の値をチェックするということを教えてもらっていない読者はどうすればいいだろうか。
ちなみにサンプルコードだけでなく練習問題の解答もこんな調子だ。
0671デフォルトの名無しさん
2015/09/12(土) 22:07:15.72ID:2fh0eLdu0672デフォルトの名無しさん
2015/09/12(土) 22:26:19.03ID:shptMOS6その説明コンテクストの中でscanfの例外処理云々は本質的に説明に関係するのか?
0673デフォルトの名無しさん
2015/09/12(土) 23:17:57.19ID:0C2xMlx40674デフォルトの名無しさん
2015/09/12(土) 23:32:28.62ID:Y0QkDcDuエラーチェックが一々書いてあったら、
何の処理を説明しているのか、
わからなくなるので読むのが面倒
普通はソースコードの7割は、エラーチェックなので、
それを書くと、本のほとんどがエラーチェックで埋まり、
その本を買う価値がなくなる
0675デフォルトの名無しさん
2015/09/12(土) 23:57:17.62ID:JUZlHW5G0676デフォルトの名無しさん
2015/09/13(日) 00:01:49.26ID:9Xvo2tPagetsで入力を受け取ってそれをatofとかatoiで変換するほうが、安全だと書いてあった。
たしかにそうだと思ったという記憶がある。
いまでは、C++のcinとかcoutを使っている。
0677デフォルトの名無しさん
2015/09/13(日) 00:49:11.00ID:12WRp03/fgetsを使う
0678デフォルトの名無しさん
2015/09/13(日) 01:02:58.51ID:M0wiS1Aa言語はC++とC#くらいしか書けません
0679デフォルトの名無しさん
2015/09/13(日) 01:38:19.05ID:q3JnkdTU0680デフォルトの名無しさん
2015/09/13(日) 01:43:29.35ID:M0wiS1Aa0681デフォルトの名無しさん
2015/09/13(日) 01:48:19.73ID:HfSTz78x0682デフォルトの名無しさん
2015/09/13(日) 01:59:04.97ID:q3JnkdTUWindowsならDirect2DかGDI+かかな
0683デフォルトの名無しさん
2015/09/13(日) 09:55:27.28ID:iqWIwAuhもし670が、while文の使用例を読者に分かってもらうために掲げられたサンプルなら、
「scanfは危険だから―」なんて本題からはずれた話題を一緒くたに提供すると主題がぼやけるだろ。
while文の動作を理解することとscanfがエラーに脆弱であることとは何の関係もない。
そんな話は別の章(例外処理とかエラー対策とか)で解説するべきなんだよ。
そもそも "C言語やプログラミングそのものがまったく初めてという方を対象にした入門書" にどこまで求めているんだよ?って話。
0684デフォルトの名無しさん
2015/09/13(日) 10:23:29.26ID:iqWIwAuh--
誤: >>676
正: >>670
誤: while文の動作を理解することとscanfがエラーに脆弱であることとは何の関係もない。
正: while文の動作を理解することとscanfがエラーに脆弱であると理解することとは何の関係もない。
0685デフォルトの名無しさん
2015/09/13(日) 13:07:17.47ID:llmGp1Am今は別のやり方で置き換えられてる
っていう但し書きがほしい部分があるくらいかな
0686デフォルトの名無しさん
2015/09/13(日) 17:28:05.59ID:/NF5k7PNできれば書名か著者を知りたい
昔から入門書は入門者が書いてるような変なのが多いし
0687デフォルトの名無しさん
2015/09/13(日) 17:58:30.83ID:12WRp03/お前のような玄人からすれば変なものに見えても
入門者からすればそんなことを理解するだけでいっぱいいっぱいなんだ
0688デフォルトの名無しさん
2015/09/13(日) 20:42:36.34ID:9Xvo2tPa探してみたらかなり古い本(1989年発行)でした。
小川優介・西田雅昭著『プログラミングお作法』(技術評論社)
です。
この中に
「函数scanf()は、キャリッジリターン・コードの取扱方が言語仕様として定義されていないため、
処理系によっては副作用が発生します。そのため、処理系によっては予期せぬ振舞いをする場合があります。
このような副作用を考慮する必要のない標準文字列入力函数にgets()があります。函数gets()は標準入力
すなわちキーボードから1行(キャリッジリターンまで)を文字列として読み込み、このとき改行コードをヌル
コードに置き換えます。」
と書いてありました。
いまでは、Cも標準化が進んでいるようで、処理系による違いとかは無いかもしれませんが、
scanf()の書式仕様を指定する場合に間違えやすいこともあって、この本を読んでいら、gets()を
使っています。
しかしどなたがが指摘されていたように、fgets()を使うのがよりよいかもしれません。
0689デフォルトの名無しさん
2015/09/14(月) 09:10:41.03ID:T1dWA9Ekfgets()がよりよいのではなくて、
gets()がダメなの。
新しいcでは最早deplicatedだ。
0690デフォルトの名無しさん
2015/09/14(月) 09:52:28.85ID:MZSqhosU0691デフォルトの名無しさん
2015/09/14(月) 12:58:07.90ID:12ng6EG6予期せぬ振る舞いってなんだろう。
よく言われるscanfが初心者向けでない理由は改行が空白と扱われることだけど、K&R(翻訳)のscanfの節でも、
「復改も空白文字であるから、これは、scanfで複数行に渡る読み込みも可能だということを意味している。」
とあるから処理系依存ではないだろうし
fgets() + sscanf() とか適当なトークン解析とかに徹したほうが幸せだよ…
0693デフォルトの名無しさん
2015/09/15(火) 15:48:43.84ID:RjhaFYE3たくさんやると、タスクマネージャーやリソースモニタで見ていると、
利用可能メモリ(=スタンバイメモリ+空きメモリ)が減っていくのです
もともとアプリを走らせた起動後は空きメモリが2GB以上あったのが、500MBくらいまで減っていきメモリ不足のメッセージが出ます
メモリリークを入れてしまっているのかと思ってVC++デバッガで確認したのですが
アプリを終了させてもそれらしいリークは見つかりません。VC++のことはさておき、
タスクマネージャーのメモリなのですが、
メモリのワーキングセット、メモリのプライベートワーキングセット、コミットサイズ
ページプール非ページプールをみていてもファイル処理をいくらしても全く増えて行きません
唯一増えていくのは、ページフォルトですが、でもこれはFirefoxとかは2ケタも大きな値になっていて
関係ないと思います。
にもかかわらず、空きメモリはどんどん減っていくのです
どうなっているのでしょうか
タスクマネージャーの空きメモリとこれらワーキングセット等の関係を教えてください
0694デフォルトの名無しさん
2015/09/15(火) 16:04:20.23ID:XyyEatelずっと確保しっぱなしで終了処理の時に初めて開放するのかもよ?
0695デフォルトの名無しさん
2015/09/15(火) 16:15:12.97ID:DGAx56Upリークしてるかどうかわからないだろ
0696デフォルトの名無しさん
2015/09/15(火) 18:19:40.31ID:Or0Sr6DS最初っからreleaseで作れ。
0697デフォルトの名無しさん
2015/09/16(水) 09:10:34.81ID:nf18HxN0端的に言うと、空きメモリはシステム全体、ワーキングセットは特定プロセス
アプリを終了させたらアプリのリソースリークは解消するのでデバグ方法がおかしい
0698デフォルトの名無しさん
2015/09/16(水) 10:06:19.24ID:knfsespoタスクマネージャに反映されるタイミングが大幅にズレている可能性がある
ツールに頼る以前の問題
Javaとかスクリプトで悪い癖がついちゃったかね
自分でアロケートしたメモリを開放してないとか
オブジェクトをnewして返す関数なんかを呼んで後始末してないとか
そんな根本的な話じゃろ
0699デフォルトの名無しさん
2015/09/16(水) 10:26:27.52ID:+5AYCL9dとりあえず_CrtSetDbgFlag
0700デフォルトの名無しさん
2015/09/16(水) 10:41:46.16ID:7sbTeZHXずっと保持してて終了前には開放してるから出てないのかと
0701デフォルトの名無しさん
2015/09/16(水) 13:34:19.60ID:knfsespoグローバルなゴッドオブジェクトに全部ぶら下げてるというオチか
0702デフォルトの名無しさん
2015/09/16(水) 15:33:41.78ID:a5qJ/F/3こっそりとメモリを使う方法が有る
この方法を使うとタスクマネージャで確認できるPC全体のメモリ使用量は増えるが
アプリ単体のメモリ使用量は増えない
0703デフォルトの名無しさん
2015/09/19(土) 22:00:51.68ID:ppmJVZuMエンディアンはソフトを使う側のCPUに依存するのでしょうか?
もしそうだとすると、ソフトの設定をファイルに保存する時にパラメータをまとめた構造体を fwite() で保存して、
そのファイルを他のPCに移動させると、エンディアンが違っていたら誤った値がロードされるのでしょうか?
対策としては2バイト以上の値をすべて1バイトに分解して自分で順番を決めてファイルに書き込むしかないのでしょうか?
readmeに「マシンを超えて設定ファイルを移動させるな」と書くのは最終手段でなるべく避けたいです
0704デフォルトの名無しさん
2015/09/19(土) 22:06:48.11ID:ISETQD0O心配しなくてもえんでぃやん?
0705デフォルトの名無しさん
2015/09/19(土) 22:15:19.62ID:MCsx1TIAxmlとかwindowsのiniファイルとか正にそうだよな?
0706デフォルトの名無しさん
2015/09/19(土) 23:10:36.91ID:4Q4PjKSm0707デフォルトの名無しさん
2015/09/19(土) 23:19:03.51ID:ISETQD0O何やそれ?
0708デフォルトの名無しさん
2015/09/20(日) 00:35:30.67ID:Insv9mJ4そういう設定ファイル使う場合、その設計時点でどっちのエンディアンを使うか
決めるでしょ普通。それに合わせて実装すれば問題は出ない
0709デフォルトの名無しさん
2015/09/20(日) 02:14:38.18ID:SoWNA795基本的にはエンディアンが違うCPUで同じソフトは動かないから
移植することになったら読み書きを修正すればいいだけで
とりあえずは気にしなくていいよ
0710デフォルトの名無しさん
2015/09/20(日) 02:39:52.78ID:Oy+vde1Jその際にread 関数へ渡すファイルサイズ情報として、nFileSizeHigh,nFileSizeLow を得ました
nFileSizeLow はそのまま一回で扱えるので問題無いのですが、
nFileSizeHigh の値を利用する場合、手動でサイズ計算して複数回に分けて読み込むしかありませんか?
0711デフォルトの名無しさん
2015/09/20(日) 06:13:05.69ID:SoWNA7950712デフォルトの名無しさん
2015/09/20(日) 23:03:50.54ID:DWK3Vubo0713デフォルトの名無しさん
2015/09/21(月) 22:46:34.73ID:yAF/qNFv0714デフォルトの名無しさん
2015/09/21(月) 23:58:16.62ID:DTNjasVP>>711
言われてみればご尤もなので、
適当なサイズを上限に小分けして読み込む処理で統一する事にします
0715デフォルトの名無しさん
2015/09/24(木) 15:34:21.58ID:l6wjQdp1socket.h とか winsock2.h とか
要は外に出るときはネットワークバイトオーダーに統一すると
最初から複数の環境に対応させるならこうだけど、
通常は最初に作ったやつに合わせる
フォーマットだけ提供するならバイトオーダーマークを入れる手も
0716デフォルトの名無しさん
2015/09/25(金) 13:24:21.54ID:cJmaZWu4二次元ベクトルなら、XY座標系なんだし
C++でもC#でも、オペレーター使えるから
XY座標系のベクトルを管理、処理する行列クラス作れば
良いんじゃない?
XY座標系だから、二行一列の行列処理だし
0717デフォルトの名無しさん
2015/09/30(水) 14:17:26.63ID:r5ugZ70Oint main(int argc, const char *argv[]){
int array[12] = { 1234 };
int* p = array;
int pi;
pi = reinterpret_cast<int>(p);
}
main.cpp:12:31: error: cast from ‘int*’ to ‘int’ loses precision [-fpermissive]
pi = reinterpret_cast<int>(p);
^
make: *** [main.o] エラー 1
reinterpret_castはこのコンパイラでは使えないという事ですかね?
0718デフォルトの名無しさん
2015/09/30(水) 14:37:40.72ID:lHbG4YHvそのpiには、何が入ってるのが期待値なんだ?
0719デフォルトの名無しさん
2015/09/30(水) 14:37:59.43ID:rddxCA32それLP64かLLP64じゃないの?
ポインタは常に64bitでもLP64とLLP64ではintは32bitしかない
0720デフォルトの名無しさん
2015/09/30(水) 15:05:10.92ID:r5ugZ70Oなるほど、bitの上限の問題でしたか。
longでcastしたらarray[0]のアドレスを取り出せました。
このままでは移植性が0ですね。
有難う御座いました。
0721デフォルトの名無しさん
2015/10/07(水) 15:28:03.37ID:GRynzwR1この条件式の意味を教えて下さい
0723デフォルトの名無しさん
2015/10/07(水) 16:08:48.59ID:jyxNZJK8そのコードだけでは結論は下せない…
0724デフォルトの名無しさん
2015/10/07(水) 16:35:31.65ID:CCbM2RdRそんなコード書くな
0725デフォルトの名無しさん
2015/10/07(水) 16:43:06.75ID:M6BIJhgd0726デフォルトの名無しさん
2015/10/07(水) 17:13:43.05ID:Kru1mWVv0727デフォルトの名無しさん
2015/10/08(木) 20:12:40.58ID:VJW9Q5b7ありがとうございます
理解できました
0728デフォルトの名無しさん
2015/10/09(金) 19:12:37.26ID:EoDzitTgfloat lat;
float lng;
};
vector<gps> gps1;
vector<gps> gps2;
gps1とgps2は大量の緯度経度情報を保存してあります。
このgps1,gps2の各緯度経度が一番近いものの情報を取得したいのですが
いい方法はないでしょうか?
0730片山博文MZ ◆T6xkBnTXz7B0
2015/10/09(金) 19:53:27.88ID:W40lUqcY位置座標が定まる。二点の位置座標と三平方の定理から
距離を求めることができる。距離が最小になる点が答えになる。
0731デフォルトの名無しさん
2015/10/09(金) 20:16:27.11ID:yuaYKRBS球面状の距離は大圏コース上の長さで定義されます。
1と2との経度と緯度をそれぞれ、Lo1, Lo2、La1, La2
とすると、角距離dは
cos d =sin La1 sin La2+cos La1 cos L2 cos(La1-La2)
で与えられます。
但し、この式は、dが0度あるいは、180度に非常に近い時は
cos dが1に非常に近い値になり、その変化が緩やかだからです。
0732デフォルトの名無しさん
2015/10/09(金) 20:35:01.57ID:3Zfy8nsh俺はなんとなく説明出来るぞ。へへん
0733デフォルトの名無しさん
2015/10/09(金) 21:10:36.44ID:JqWJKO830734デフォルトの名無しさん
2015/10/09(金) 21:37:04.44ID:oggkbSfr説明が分からん
0735デフォルトの名無しさん
2015/10/09(金) 22:46:25.91ID:W7w78kvP0736デフォルトの名無しさん
2015/10/09(金) 23:22:02.20ID:nLFgz/u9最適化するのはその後だ。
0737デフォルトの名無しさん
2015/10/10(土) 02:50:43.20ID:9JPBBcF90738デフォルトの名無しさん
2015/10/10(土) 15:40:47.88ID:Ver+0xRf緯度経度とかいてしまったのが間違いだったのかもしれません
gpsを持って同じ道を二回歩いてみて各gpsデータにおける一番近い点を取得したかった
だけなので厳密な計算方法を利用しようとは考えていませんし数mオーダーの計算は困難と
聞いております
なので一回目二回目ともに10歩歩いた時のGPSの情報、20歩歩いた時のGPSの情報、30歩、40歩、、、、
と取得していく中で何歩目が一番近いか知りたいと考えています
0739デフォルトの名無しさん
2015/10/10(土) 19:15:39.34ID:aygA5MQe==0比較が失敗することがあるんですよね
2の倍数じゃない数が正しく表現されないのは知ってるんですが
でもゼロはゼロですよね?
その辺の仕様がわかる人いますか?
0740デフォルトの名無しさん
2015/10/10(土) 19:56:19.64ID:kfeAURAL表示上0であっても内部的に0になっているとは限らないね
doubleの0ってのが具体的にどういうもの(状況)を示しているのかちょっとわからないけど
double x=0;
x = x+ 0.3;
x = x- 0.2;
x = x- 0.1;
if(x==0) func();
これ計算すると答えは0なので関数 func(); は実行されると思いきや実行されない
0741デフォルトの名無しさん
2015/10/10(土) 20:07:45.80ID:aygA5MQeA aa ={0};
こんな感じので
aa.a==0が失敗することがあるんです
比較部分はどのみちなおしますが
ただDLL作成しての呼び出しなのでバグがあるなら切り分けしたいと質問した次第でして
0742デフォルトの名無しさん
2015/10/10(土) 20:09:43.87ID:wZWPBuKiまたその場合は+0.0で、浮動小数点では他に符号部が負をあらわし他が0の-0.0という0もあることがある。
たとえば正の数を負の無限大で割ったり、負の数を正の無限大で割ったりすると-0.0になる。
これはWikiの転載だけど、どうして自分でGoogleで検索しないの?
Google知らないの?Wiki知らないの?
0743デフォルトの名無しさん
2015/10/10(土) 20:12:12.18ID:wZWPBuKi0744デフォルトの名無しさん
2015/10/10(土) 20:20:22.61ID:vT1N9X7j0745デフォルトの名無しさん
2015/10/10(土) 20:26:00.08ID:kfeAURAL初期化直後に比較するのか?
0746デフォルトの名無しさん
2015/10/10(土) 20:44:06.40ID:Bz6ayOgj0747デフォルトの名無しさん
2015/10/10(土) 21:00:20.87ID:aygA5MQeDLLで初期化して呼び出しもとで比較。ライブラリがおかしな事してなければ途中計算いっさいなし
だから気になった
>>728
んなことわかってるってーの
俺より知識のある奴はいなそうなんでもういいです
0748デフォルトの名無しさん
2015/10/10(土) 21:07:47.17ID:wZWPBuKi0749デフォルトの名無しさん
2015/10/10(土) 21:26:53.42ID:LXdnro1pインド人に聞け
0750デフォルトの名無しさん
2015/10/10(土) 21:36:36.79ID:vT1N9X7jそれならバグの可能性の方が高いと思うが。
一応IEEEではビットフォーマットまでは規定していなかったはずだが、現実的にほぼ全てのマシンで同じだったはず。
それ以前に通常は同一マシン上だからビットフォーマットは当然同じ。
0751デフォルトの名無しさん
2015/10/10(土) 21:39:39.21ID:kfeAURAL>>746
0 との比較(初期化)だと整数型からの実数型へのキャストで正確な0ではなくなるってヤツだっけ?
0752デフォルトの名無しさん
2015/10/10(土) 21:44:17.12ID:aygA5MQeどうもー
0753デフォルトの名無しさん
2015/10/10(土) 22:02:45.81ID:wZWPBuKi注意散漫、プログラムもバグってるんでしょう
0754デフォルトの名無しさん
2015/10/10(土) 23:01:50.02ID:Bz6ayOgj> 一応IEEEではビットフォーマットまでは規定していなかったはずだが、
おいおい、これこそが浮動小数点規格の眼目だろう
https://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0#IEEE.E6.96.B9.E5.BC.8F.EF.BC.88IEEE_754_.E5.BD.A2.E5.BC.8F.EF.BC.89
>>751
> 0 との比較(初期化)だと整数型からの実数型へのキャストで正確な0ではなくなるってヤツだっけ?
たしかK&Rの初版では、整数値でも実数として処理したいばあい、コンパイラへ指示するために
明示的に .0 を付けろとか‥ 除算結果のキャストに効いてくる、とかなんとか
そのクセが染みついてる人は.0を付けたがるのかな?とw
0755デフォルトの名無しさん
2015/10/11(日) 01:27:33.90ID:IkPUsRemhttps://ja.wikipedia.org/wiki/IEEE_754
https://ja.wikipedia.org/wiki/%E6%8B%A1%E5%BC%B5%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
0756デフォルトの名無しさん
2015/10/11(日) 06:18:57.29ID:SxbzA5C50757デフォルトの名無しさん
2015/10/12(月) 09:31:45.35ID:Cb4Ih0Jldoubleに限らず、0は偽
0以外が真
って答えるとアスペっぽいな。
そもそも浮動小数点数型は近似値しか扱えないので
やっぱ閾値を決めて近似判定するか
ざっくり整数型にキャストして比較しちゃえば?
0758デフォルトの名無しさん
2015/10/12(月) 10:12:05.03ID:mWUWwMlc0759デフォルトの名無しさん
2015/10/12(月) 11:09:39.37ID:PwRq9lmFしかも
>浮動小数点数型は近似値しか扱えない
とか断言しちゃってるし
0760デフォルトの名無しさん
2015/10/12(月) 12:00:37.90ID:DSHcQooM0761デフォルトの名無しさん
2015/10/12(月) 13:04:46.12ID:C+jvtDQK0762デフォルトの名無しさん
2015/10/12(月) 15:54:34.14ID:FoiyBQVbこのループはi=1,i=2,i=3
となるので、3回ループが実行されるということでよろしいのでしょうか?
0764デフォルトの名無しさん
2015/10/12(月) 16:04:27.73ID:oCa7NkmOi++
++i
は好き好きですか?
0765デフォルトの名無しさん
2015/10/12(月) 16:06:08.48ID:mWUWwMlcインクリメントが前置でも後置でも結果は同じ
0766デフォルトの名無しさん
2015/10/12(月) 16:11:48.51ID:VZXXCjATありがとうございました
0767デフォルトの名無しさん
2015/10/12(月) 16:13:16.58ID:oCa7NkmOと書くと2増えますか?
0768デフォルトの名無しさん
2015/10/12(月) 16:23:03.13ID:iier02gvhttp://codepad.org/OKjNAgct
0769デフォルトの名無しさん
2015/10/12(月) 17:17:25.37ID:08WVOaLvi++ と ++iは戻り値が違う。単に整数型なら戻り値を気にしないのなら同じだが
これがクラスのオーバーロードされた演算子だと i++ は処理を終えるまで最初の値を
保持しなければならないので戻り値を取らないなら保持が無駄になる。
そういう無駄を省きたいなら普段から ++i を使いたくなるということ。
今のPCで違いなんか出るか!と言われればそれまでだが
0770デフォルトの名無しさん
2015/10/14(水) 20:35:17.54ID:Qq/D9jsd0771デフォルトの名無しさん
2015/10/21(水) 20:50:31.85ID:4OC5hcF4ソース中に埋め込む事ってできますか?
コンパイラはLinuxのgcc4とgcc3を併用してます
0772デフォルトの名無しさん
2015/10/22(木) 06:50:43.75ID:VleKFdIY0773デフォルトの名無しさん
2015/10/22(木) 14:21:39.41ID:DwxkcuZkclass c_Master{
int val ;
class c_Slave{
void func() ;
} ;
}
func()の中で val = 1 ; のようにvalの値を変えたいです
c_Masterのインスタンスは複数作りたいのでstaticをつけることはできません
0774デフォルトの名無しさん
2015/10/22(木) 14:40:47.00ID:MPE/iy9Wだったらc_Slaveのコンストラクタでthisを渡せばいいじゃない
0775デフォルトの名無しさん
2015/10/22(木) 15:16:14.49ID:DwxkcuZkc_Master* p_Master
のようなポインタを作って
p_Master->val = 1 ; という風にアクセスするということでしょうか?
それならできそうですありがとうございます
0776デフォルトの名無しさん
2015/10/22(木) 15:22:52.34ID:7evvohY80777デフォルトの名無しさん
2015/10/23(金) 17:24:09.90ID:xtwbcN6R0778デフォルトの名無しさん
2015/10/23(金) 17:25:09.58ID:xtwbcN6R0779デフォルトの名無しさん
2015/10/30(金) 12:53:47.45ID:evAKCgDFunsigned long a = b->c;
だとうまくいくのですが
unsigned long a;
a=b->c;
だとコンパイルはできるのですがbusエラーが出てしまいます
何か考える原因はないでしょうかご教授お願いします。
0780デフォルトの名無しさん
2015/10/30(金) 14:49:29.04ID:rNHBRIIu連続した行じゃなくて、実際には間に何か処理が入っているんじゃねーの?
で、その処理スタック壊しているとか。
0781デフォルトの名無しさん
2015/10/30(金) 14:51:21.53ID:W7b3aTEp0782デフォルトの名無しさん
2015/10/30(金) 15:11:34.11ID:rNHBRIIu的な関数を作った。
で、書式文字列しかない時には、fmt を書式文字列として扱わず、そのまま返すだけにしたいので、
std::string Format(const char* fmt);
というものを追加したが、これだと引数が一つの時、あいまいだといわれエラーになる。
そこで、
std::string Format(const char* fmt, ...); をやめて、
template<typename T>
std::string Format(const char* fmt, T dmy, ...) {
va_list args;
va_start(args, fmt);
std::string rest = VFormat(fmt, args);
va_end(args);
return rest;
}
としたところ、フツーの Windows7 では動くが 本来のターゲットの XP embedded 環境だと
まともに動かない(これ自体は動くが、スタックを壊すらしく、後の処理が怪しくなる)。
そもそも C++ 的にこういうことはやっちゃいけないことなのか、ターゲットの環境がおかしいのか、
はたまたどうすればまともに動くようになるのか、わかる人がいたら教えておくれ。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0783782
2015/10/30(金) 15:19:28.97ID:rNHBRIIuビルド環境は VS2010 です。
0784デフォルトの名無しさん
2015/10/30(金) 15:20:43.27ID:evAKCgDF趣味で今更ながらPSPむけにコンパイルしているのでコンパイラ側の問題かもしれません
busエラーについては私もどういうエラーなのかはよく存じないのですがWikipediaによると
https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%B9%E3%82%A8%E3%83%A9%E3%83%BC
要約するとメモリへのアクセスの失敗のようです。
また、いろいろいじくってみた結果わかったことが一つあって
関数内でaを宣言した時は問題なしなのですが
ヘッダ内もしくはグローバル変数の時の時に失敗するみたいです。
0785デフォルトの名無しさん
2015/10/30(金) 15:29:00.20ID:3PTV2iIjただ単に
unsigned long a;
って定義してる?
何かの構造体の中だったりしないか?
0786782
2015/10/30(金) 15:52:07.16ID:rNHBRIIu間にレスが挟まるとわかりにくくなるからアンカ打とうぜ。
一々 ID 見るのもめんどくせーし。
#pragma packed(1)
struct T {
unsigned long l;
char c;
} g[10];
void func() {
g[1].l = 1; // NG
struct T t;
t.l = 1; // OK
}
こんな感じ?
0788デフォルトの名無しさん
2015/10/30(金) 16:18:57.61ID:evAKCgDFいろいろ試行錯誤して原因が判明しました
unsigned long a;
a=b->c;
-----別の関数--------
for(int i=0;i<a;i++)
ここでエラー発生
aに0を代入した時だけうまくいったために気づきました
・・・プログラムが肥大しすぎてつらい、どこでどんな処理をしてるか自分でも把握できてない
0789デフォルトの名無しさん
2015/10/30(金) 22:05:24.15ID:XZwfZSuT機能別に分け!
}
0790デフォルトの名無しさん
2015/10/31(土) 19:42:54.91ID:23sVEfSr0791デフォルトの名無しさん
2015/10/31(土) 19:53:22.22ID:F017Euy3それが分科の学となって科学となった。
0792デフォルトの名無しさん
2015/11/03(火) 13:35:41.07ID:fim1V6dp下記Aのプログラムのif部分をBへと変更したいのですが、
エラー「これらのオペランドと一致する演算子 "||" はありません」
と表示が出てしまいます。
これを実現するには、オーバーロードという処理をしないといけないのでしょうか?
それともなにか、string型の比較用に使える関数でもあるのでしょうか?
■A
string a="文字列";
string b="文字列";
int x=0;
if (a == "文字列" ) x++;
else if (b == "文字列" ) x++;
■B
if( (a || b) == "文字列" ) x++;
0793デフォルトの名無しさん
2015/11/03(火) 13:45:06.06ID:kfNzP733そういう簡略化記法はない
if( (a == "文字列" || b == "文字列" ) x++;
とでもするしかない
0794デフォルトの名無しさん
2015/11/03(火) 13:55:56.16ID:i649bMmfこうやって使える関数を作ればいい
まあ条件分岐はとにかくバグが入り込みやすいので
あまり込み入ったことをせずベタに書いたほうが後々楽
0795デフォルトの名無しさん
2015/11/03(火) 13:59:02.87ID:fim1V6dpありがとうございました。
単純な文法ミスでしたね・・・失礼しましたorz
0796デフォルトの名無しさん
2015/11/03(火) 14:04:54.96ID:fim1V6dpbool型で関数作成もわかりやすそうですね!
ありがとうございます。
0797デフォルトの名無しさん
2015/11/05(木) 23:04:17.94ID:nUM8ca/HCHoge::mVal = 0; 見たいに書く。
0798デフォルトの名無しさん
2015/11/05(木) 23:09:25.24ID:Rl0ElxiZ0799デフォルトの名無しさん
2015/11/06(金) 00:38:00.62ID:ykiXGTEN連番の定数を定義する時には、enumを使いますが、
これで作られるのは全部変数で、各定数ごとにメモリを確保しているんですよね?
メモリを消費したくない場合、enumを使わず、#defineを行ったほうがいいのでしょうか?
0800デフォルトの名無しさん
2015/11/06(金) 00:52:10.14ID:eLeZ0/m60801デフォルトの名無しさん
2015/11/06(金) 03:06:29.77ID:2no8hc5C0802デフォルトの名無しさん
2015/11/06(金) 08:22:06.66ID:nauUzqH5使用OSがwindowsなのでダウンロードするopenCVはwindows版で良いとしても、コンパイラはvc++になるのでしょうか?
ご教示頂けたら幸いです。
※後にJavaにてGUIを生成して、JNIで上記を呼び出したいと思って居ます。
0803デフォルトの名無しさん
2015/11/07(土) 08:41:45.90ID:WJci58Juというかjava版のOpenCV使えば?
0804デフォルトの名無しさん
2015/11/07(土) 14:08:38.72ID:aJXYP9QX公式なら使うのですが、確か非公式だった様な。
vc を使う事にしました、ありがとうございます。
0805デフォルトの名無しさん
2015/11/08(日) 11:36:04.59ID:RpsuGr6i定数だよ。
ついでに言えば、連番に限らないよ。
例えば、enum RelativeDays {Tommorow = 1, Yesterday = -1}なんてのもできなくはない。
0806デフォルトの名無しさん
2015/11/08(日) 12:47:29.54ID:vx6yITef> これで作られるのは全部変数で、各定数ごとにメモリを確保しているんですよね?
> メモリを消費したくない場合、enumを使わず、#defineを行ったほうがいいのでしょうか?
このenumの理解度からして闇が深そうだな。
enum tag {e1, e2, e3, …};
e○ごとにメモリを確保してるわけじゃないよ。単に列挙型要素を宣言してるだけでまだ実態はない。
enum tag val1, val2, val3, …;
実際にメモリを確保するのは変数のval○を定義するとき。
まあ他に、#defineじゃなくてenumを使えば、コンパイル時にチェックしてくれるとか利点はある。
0807デフォルトの名無しさん
2015/11/08(日) 13:50:53.72ID:2JTWdxT9どんだけたくさん使う気だよ
0808デフォルトの名無しさん
2015/11/08(日) 15:43:20.16ID:rgUuUfPG0809デフォルトの名無しさん
2015/11/08(日) 17:29:06.95ID:Kfq1KjrF解決策を教えてほしいです
#include <stdio.h>
int main(void){
int i;
int n = 4;
double x;
double y;
double data_x[4] = { 0.8, 1.8, 2.8, 3.8 };
double data_y[4] = { 0.7174, 0.9738, -0.6119, -0.4646 };
FILE *output;
errno_t error;
if ((error = fopen_s(&output, "output.dat", "w")) == NULL){
printf("Can't opne file\n");
}
else{
fprintf(output, "%f,%f\n", data_x[0], data_y[0]);
fclose(output);
printf("Completed\n");
}
return 0;
}
0810デフォルトの名無しさん
2015/11/08(日) 17:35:45.22ID:FJ7EwzEm戻り値
正常終了した場合は 0 を返します。
失敗した場合はエラー コードを返します。
これらのエラー コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。
だから fopen_s 正しくはこっちじゃね?
if ((error = fopen_s(&output, "output.dat", "w")) != NULL){
0811デフォルトの名無しさん
2015/11/08(日) 17:43:23.07ID:Kfq1KjrFなるほど,解決したわ
ありがとう
0812デフォルトの名無しさん
2015/11/08(日) 19:21:46.97ID:gczgyzuSNULLが0じゃない環境も今時珍しいけど
0813デフォルトの名無しさん
2015/11/08(日) 20:08:14.33ID:zLvmLdPTNULLは内部でどういう数値を使っているかにかかわらず
ソースコード上ではNULLはdefineで0と定義してあるのではないかね
だからどうであれソースコード上で0に置き換わるのでは?
しかし((void *)0)と定義して有る場合はコンパイルエラーになるね
0814デフォルトの名無しさん
2015/11/08(日) 20:13:55.15ID:rhG8pOkxそんなソース引き継ぎたくないわw
0815デフォルトの名無しさん
2015/11/08(日) 20:22:17.19ID:krAhSW9o今はnull_ptrがあるけど
0816デフォルトの名無しさん
2015/11/08(日) 20:56:58.16ID:zLvmLdPTヌルポの内部表現が-1だったとしてもソースコード上では0がヌルポ
ポインタが出ててくる事が期待される箇所に0が出現したら
コンパイラはヌルポインターを生成するとCの仕様で決まっている
0817デフォルトの名無しさん
2015/11/08(日) 21:33:04.75ID:qUw9KKbb0818デフォルトの名無しさん
2015/11/08(日) 21:42:38.26ID:RpsuGr6iつー話はさておき、今時詰め込むメリットないから代入と評価は分けようぜ。
0819デフォルトの名無しさん
2015/11/08(日) 21:44:47.09ID:zLvmLdPTいやそれはおかしい
0820デフォルトの名無しさん
2015/11/08(日) 21:47:30.04ID:rhG8pOkxお前否定しかしてないけどお前が間違ってるっていうw
0821デフォルトの名無しさん
2015/11/08(日) 21:53:37.80ID:zLvmLdPTと定義して有るんだからNULLが0であって、0がNULLなわけではないし
0がヌルポインタなんだ、の言い間違えだったとしても
ヌルポではない普通の整数の0の場合も有るから
常に0がヌルポなわけでもない
0822uy ◆Qawu9.2l1E
2015/11/08(日) 22:03:50.38ID:hjGS9Lf9もう使われる事もないその程度の言語なんだから
0823デフォルトの名無しさん
2015/11/08(日) 22:05:12.79ID:SGCCwhdkヌルはゼロだと思っていても全く問題ない。
0824デフォルトの名無しさん
2015/11/08(日) 22:22:50.58ID:vx6yITef最初から次のブログのコードをパクって書いていれば問題なかったのに…
http://blog.livedoor.jp/mrcom511/archives/51270788.html
0825デフォルトの名無しさん
2015/11/09(月) 06:47:17.94ID:imWJY0W/>しかし((void *)0)と定義して有る場合はコンパイルエラーになるね
この実装しか見たことない
0826デフォルトの名無しさん
2015/11/09(月) 07:13:22.33ID:fyLz/sBuCの場合は#define NULL ((void *)0)
理由は考えろ。
0827デフォルトの名無しさん
2015/11/09(月) 07:35:26.18ID:u4Kl1uhVなんで実装を気にしてプログラム書くの?
NULLかnullptr使うと死ぬの?
0828デフォルトの名無しさん
2015/11/09(月) 08:35:16.46ID:giUW2w8gそれは ruby であって C/C++ ではない
0829デフォルトの名無しさん
2015/11/09(月) 16:54:52.45ID:xDt2hEwvNULLがどう定義されてるかは処理系依存で、
実際0x80000000や0xffffffffで定義された処理系も存在するのよ
実際、C++の2012年のドラフト(www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf)には
The macro NULL is an implementation-defined C++ null pointer constant in this International Standard.
って書いてある。要約するとNULLマクロの実体は処理系依存だって事。
お前らの環境でどう定義されてるかなんざ知らん。
一方でC99の仕様書(www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf)には
An integer constant expression with the value 0, or such an expression cast to type
void *, is called a null pointer constant.
って書いてあって、つまりC99-TC2準拠の処理系なら確実に
#define NULL 0
と書かれてるはずで、そうじゃない処理系は知ったこっちゃない
0830デフォルトの名無しさん
2015/11/09(月) 17:13:45.53ID:xDt2hEwv言語としてはそこにアクセス出来ないことになってるので
そこにアクセスしたら確実にセグメンテーションフォールトが発生するようなアドレスの一つが0だから、
というのが正しいんだけど実はこれOS依存。
x86系で動くモダンなOSを仮定するなら、
アドレス0への参照をプログラムが要求
→論理アドレス0を含むページが物理アドレスに載っていないのでページフォールト例外が発生(ディスクリプタがどうとかいう話は省略)
→OSがそれを検出
→プログラムがアクセスしようとしたアドレスが0x00000000-0x00001000番地に含まれている事をOSが認識して、SEGVを発送
→プログラムに処理が戻り、SEGVを検出
→デフォルトハンドラを読みに行って正常に異常終了する
といった流れになる。
これがCPUが違えば、例えばアドレスの最上位ビットが立ってるからだとか、
アドレスのアラインメントが取れてないからだとか、
他の方式によって検出して最終的にセグメンテーションフォールトで落とす感じになる。
なので自然とNULLが意味する値は処理系依存になる。
0831デフォルトの名無しさん
2015/11/09(月) 18:30:01.88ID:GSrDHzaUhttps://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx
> 戻り値
> 正常終了した場合は 0 を返します。失敗した場合はエラーコード(errno)を返します
と書いているのでNULLじゃなく 0で判定する(必要とあらばerrnoも)以外に無いと思うんだが
0832デフォルトの名無しさん
2015/11/09(月) 19:23:27.14ID:hqP7pMYoC言語でヌルポインターのソースコード上での表現は0と決まっている
内部表現が0x80000000だろうが0xffffffffだろうが、ソースコード上では0と決まっている
大昔に作成されたCのFAQにもそう書いてある
>http://www.kouno.jp/home/c_faq/c5.html#0
>Q: どうやればプログラムの中でヌルポインターを得ることができるのか。
>A: ポインターを書くべきところに現れた定数0は、 コンパイル時にヌルポインターに変換される
>Q: ヌルポインターの内部表現に0でないビットパターンを使っているマシンでは、NULLはどう定義するべきかか。
>A: ほかのどんなマシンとも同じである。0 (または((void *)0))と定義 されている。
>Q: でも0よりはNULLを使うほうが、NULLの値が将来代わることを考えると、特にヌルポインターの内部表現が0でないマシンについては優れているのでは。
>A: いや。(マクロNULLを使うことは好ましいかもしれないが、上の理由 からではない。)
マクロを使って数を書くべきところをシンボルに置 き換えることは、値が将来変わるかもしれないから、
よくやるけど、 これはNULLを0の代りに使う理由じゃない。もう一度説明しよう。
C言 語は、ソースコード上の0が(ポインターを使う場面では)ヌルポイン ターを作り出すことを保証している
一部抜粋してみたが、もっと詳しく知りたければ上記URLを参照のこと
0833デフォルトの名無しさん
2015/11/09(月) 19:25:42.20ID:hqP7pMYoヌルポインターがたいていのマシ ンで、ソースコード上も多くの内部表現上も0であることが、保証さ れない仮定を招いている。
マクロ「NULL」を使うことで、その値が将 来変化するかもしれないことや、妙なマシン上では0でないことを指 しているように思えるかもしれない。
「if(p==0)」と書くと、比較す る前に0をポインター型に変換するというよりは、pを整数型に変換す ることを必要とすると解釈されがちである。
最後に(上の質問5.13で 記述した)「ヌル」という言葉は、文脈によって異なる意味を持つの に、違いを大目に見がちである。 混乱を避けるよい方法は、
C言語にはキーワードがあって(Pascalの nilのような)、それを使ってヌルポインター定数を要求すると考える ことである。
コンパイラはソースコードから型が決定できるときは、 "nil"を正しい型のヌルポインターに変換することができるし、でき ないときは苦情を出す。
実際にはヌルポインターのC言語のキーワー ドは"nil"ではなく「0」である。0は"nil"とほとんど同じ働きをする。
違いは、ポインター以外が必要な状況ではキャストされていない0に はエラーメッセージを出す代りに整数の0を作り出すことである。
キャ ストされていない0をヌルポインターのつもりで使うと、そのコード はうまく動かないかもしれない。
0834デフォルトの名無しさん
2015/11/09(月) 19:37:07.11ID:fyLz/sBu4.1 Pointer conversions [conv.ptr]
1 A null pointer constant is an integer literal (2.13.2) with value zero or a prvalue of type std::nullptr_t.
どこにも「0x80000000や0xffffffff」でも良いなんて書いてない。
無知自慢しなくても良いぞ。
0835デフォルトの名無しさん
2015/11/09(月) 19:46:58.51ID:xDt2hEwvfopen_sなんて関数使ってるから「仕様に完全に準拠してるわけではないC++」についての話題だと思ってたよ。
C言語に関しては、仕様に準拠してりゃ確かにそれが正しい。
俺の発言の要点は、
・変な処理系もあるよ!
・C++ではNULLの見かけ上の値すら未定義(なので便利で適当な値が使われる)。
・Cの処理系では0(仕様通りなら)。
の3つであって、なんで噛みつかれたのかさっぱり分からんのだが。
0836デフォルトの名無しさん
2015/11/09(月) 19:51:21.75ID:xDt2hEwvnull pointer constantは整数0か、又はstd::nullptr_t型の値(要はnullptr)だって事だろ。
nullptrを整数に(正確にはビット列に)した時の値については何も言ってないのよ。
0837デフォルトの名無しさん
2015/11/09(月) 20:10:28.11ID:hqP7pMYo0838デフォルトの名無しさん
2015/11/09(月) 20:28:36.21ID:fyLz/sBuバカめ
> NULLがどう定義されてるかは処理系依存で、
> 実際0x80000000や0xffffffffで定義された処理系も存在するのよ
実際に存在するとは、どの処理系だ? それが存在するなら、それは規格を満たしていない。
これ以上、無知の上塗りせずに、間違いを認めて引っ込んだ方が良いぞ。
0839デフォルトの名無しさん
2015/11/09(月) 20:51:17.62ID:xDt2hEwv今は規格に準拠してりゃCでもC++でも0なのか。
0840デフォルトの名無しさん
2015/11/09(月) 20:58:09.57ID:eC7QTO9CNULLが-1になってた処理系に遭遇したって都市伝説は耳にしたことがあるな
0841デフォルトの名無しさん
2015/11/09(月) 21:01:16.83ID:fyLz/sBuまだ、恥の上塗り続けるつもりか?
0842デフォルトの名無しさん
2015/11/09(月) 21:05:08.74ID:xDt2hEwvそう書いたって話。
誤解させてごめんよ。
Cの仕様でNULLが0だって決まってる方がむしろ驚いてる。
0843デフォルトの名無しさん
2015/11/09(月) 21:32:53.50ID:J1dkkwNYいずれにしてもポインタが期待されるところで 0 と書けば,それはヌルポインタであることには変わりない
0844デフォルトの名無しさん
2015/11/09(月) 21:33:59.13ID:NTgR53a+俺も聞いたことがある
30年くらい前
まだマシン毎にコンパイラが乱立してた頃
0845デフォルトの名無しさん
2015/11/09(月) 22:28:11.83ID:GSrDHzaU#define NULL 0
だろうがなんだろうが fopen_s は「成功は == 0 で判定しろ」ってんだからさ
NULLで判定しても良いなんてガキみてぇなことグチャグチャ言ってないで
ちゃんと 0 で判定しろよガキ
0846デフォルトの名無しさん
2015/11/09(月) 22:28:25.78ID:fyLz/sBuANSIでCの規格が制定される前は規格がなかったからね。
0847デフォルトの名無しさん
2015/11/09(月) 22:42:43.69ID:fyLz/sBuそれはそのとおり。
ヌルポがオール0以外な環境だったら、判定が間違う可能性があるからね。
0848デフォルトの名無しさん
2015/11/09(月) 22:49:48.54ID:hqP7pMYo>ヌルポがオール0以外な環境だったら、判定が間違う可能性があるからね。
この根拠はおかしい
NULLはどの環境でも内部表現に関わらずソースコード上では0に置換されるから
ただし、((void*)0)に置換される環境では整数の0のつもりでNULLを使うとコンパイルエラーになるが
0849デフォルトの名無しさん
2015/11/09(月) 22:59:02.41ID:ZbpKjgrsちがくない?0はNULLポインタになるけどただし以降に書いてるとおりNULLは0になるかどうかわからんでしょ
0850デフォルトの名無しさん
2015/11/09(月) 23:07:52.73ID:kUB8xo8u>>813からの流れがおかしい
NULLが0と等しいか、などと議論すべき事柄じゃない
そもそもfopen_sの解説からしてリテラル0と比較するのが理に適っている
それをわざわざNULLマクロというワンクッションを挟んで記述する合理的理由がない
0851デフォルトの名無しさん
2015/11/09(月) 23:18:15.81ID:fyLz/sBuint x;
x == (void *)0;
これ警告は出るけどエラーにならないでしょ。
0852デフォルトの名無しさん
2015/11/09(月) 23:45:30.61ID:eIzs0U/u0853デフォルトの名無しさん
2015/11/10(火) 01:09:51.87ID:0bGxannp0854デフォルトの名無しさん
2015/11/10(火) 02:14:04.89ID:YWed6J6dint x;
int y;
int z;
};
って
Position pos = {1, 2, 3};
みたいに宣言出来るのにLocationを引数をとる関数にGetValue({1, 2, 3})みたいに出来ないのはなぜですか?
0855デフォルトの名無しさん
2015/11/10(火) 02:15:23.33ID:YWed6J6d0856uy ◆Qawu9.2l1E
2015/11/10(火) 02:16:33.56ID:rHJUCiJo0857デフォルトの名無しさん
2015/11/10(火) 02:34:08.03ID:co6NjOXk出来るが
struct location_t{ int x, y, z; };
void func( location_t pos ){} //OK;
void func( location_t &pos ){}; //NG
void func( location_t &&pos ){}; //OK
0858デフォルトの名無しさん
2015/11/10(火) 02:39:07.56ID:YWed6J6dvoid func( location_t pos ){} //OK;
これに対して
func({1,2,3});
とするとE2188構文エラーが出ました
0859デフォルトの名無しさん
2015/11/10(火) 03:04:26.38ID:co6NjOXkこっちはVS2013で試したけど動いたよ
0860デフォルトの名無しさん
2015/11/10(火) 07:52:52.72ID:3CFe6hEsPosition pos = {1, 2, 3};
これの右辺は初期化子という構文要素、
GetValue({1, 2, 3})
これのカッコ内は式という構文要素。
使用出来る形式が異なる。
0861デフォルトの名無しさん
2015/11/10(火) 07:57:59.40ID:/JKv2M44#define FOPEN_S_OK (0)
とでもやっておけよ
0862デフォルトの名無しさん
2015/11/10(火) 07:59:17.49ID:3CFe6hEsGetValue((struct location_t){1, 2, 3})と記述出来る。
C++(11?)ならGetValue(location_t{1, 2, 3})
0863デフォルトの名無しさん
2015/11/10(火) 08:42:35.36ID:1JfD7fk60864デフォルトの名無しさん
2015/11/10(火) 08:42:47.62ID:xDrjxquLint GetValue(std::initializer_list l) {
for (auto it = l.begin(); it != l.end(); ++it) {
// do something
}
}
GetValue({1,2,3}) // OK
0865デフォルトの名無しさん
2015/11/10(火) 08:48:41.86ID:xDrjxquL0866デフォルトの名無しさん
2015/11/10(火) 08:58:57.20ID:uEihdd6c浦島太郎状態
0867デフォルトの名無しさん
2015/11/10(火) 09:10:00.14ID:3CFe6hEs0868デフォルトの名無しさん
2015/11/10(火) 09:26:37.61ID:2PTLdG6JBorland C++ 5.5.1です
>>862
調べてみたところどうやらこのコンパイラはその規格に対応してなかったようです
このコンパイラで引数のところに{}で指定する方法はないですか?
0869デフォルトの名無しさん
2015/11/10(火) 09:32:51.25ID:3CFe6hEs無理だね。
0870デフォルトの名無しさん
2015/11/10(火) 09:33:46.06ID:eBvt9LNV0871デフォルトの名無しさん
2015/11/10(火) 09:38:04.56ID:2PTLdG6Jありがとうございます
このコンパイラでは駄目なようですね
0872デフォルトの名無しさん
2015/11/10(火) 18:01:22.35ID:XNBaBHgichar *s = "文字列"
これは文字列リテラルのアドレスを渡しているので書き換えができるかは処理系依存という理解でいいでしょうか?
0873デフォルトの名無しさん
2015/11/10(火) 18:02:25.06ID:XNBaBHgihttp://i.imgur.com/4mqb1BM.jpg
0874デフォルトの名無しさん
2015/11/10(火) 18:28:45.77ID:xgXHwxleどうなるかは処理系依存。
The effect of attempting to modify a string literal is undefined.
って書いてあった。
char s[] = "This is a test.";
が正しいと思うのです。
0875デフォルトの名無しさん
2015/11/10(火) 18:45:03.85ID:0bGxannp'\n' がキモいな。 endlだろうI like C++ならw
0876デフォルトの名無しさん
2015/11/10(火) 19:19:58.99ID:3CFe6hEs0877デフォルトの名無しさん
2015/11/10(火) 19:23:43.03ID:37NidK9w余り詳しいわけではないけど、俺は処理系非依存だと思う。(常に書き換えできる)
charとstd::stringは別物だろ。
0878デフォルトの名無しさん
2015/11/10(火) 20:36:58.14ID:c0uHB6kxこれは独習c++という本ですが、第3版14刷とかなり版を重ねていて他の説明などは分かりやすく書かれているので少し気になりました。
0879デフォルトの名無しさん
2015/11/10(火) 20:59:32.52ID:1JfD7fk6文字列リテラルがROMに配置されてたら書き換え不能じゃね?
0880デフォルトの名無しさん
2015/11/10(火) 21:18:58.96ID:XNBaBHgi非依存と書かれていたのですね。見落としてました。
私の環境では
vs2015 実行時強制終了
g++ コンパイル時にエラー
borland 書き換え可能
となっています。
0881デフォルトの名無しさん
2015/11/10(火) 21:45:36.71ID:YYcxvMD90882デフォルトの名無しさん
2015/11/10(火) 21:51:28.42ID:FYErR5Mx0883デフォルトの名無しさん
2015/11/10(火) 22:12:49.13ID:1JfD7fk6どんだけ出力する気なんだよw
0884デフォルトの名無しさん
2015/11/10(火) 22:36:41.93ID:37NidK9w処理系依存だった。
> 同じ文字列リテラルが区別されるかどうかは処理系での定義による。
> 文字列リテラルを変更しようとするプログラムのふるまいは不定である。
> K&R第2版P236(A2.6)、ただしその後の変更があった場合は知らない
ちなみに記憶クラスはstaticで定数扱いだから、ROM領域においてもいいらしい。
以下ページだと
char s_l* = "literal'; // リテラルを指す
char s_a[] = "literal"; // 自動変数を指す
みたいな感じだね。つまり>>874も正解。
http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01077.html
0885デフォルトの名無しさん
2015/11/10(火) 23:15:02.95ID:xDrjxquLもし本当にアドレス0のデータを読み書きしたくなったらどう書くのが正解なの?
volatile int8_t* text_screen = 0xb8000;
text_screen[0] = 'a';
text_screen[1] = 7;
でアドレス0xb8000に0x0761が書かれると仮定して。
0886uy ◆Qawu9.2l1E
2015/11/10(火) 23:42:57.79ID:0FN92oKTゴミ言語
0887デフォルトの名無しさん
2015/11/10(火) 23:48:09.40ID:3CFe6hEsヒント
ポインタを表すべき場所での「定数 0」がヌルポインタコンスタント
0888デフォルトの名無しさん
2015/11/11(水) 00:03:15.97ID:kzShUi9Xアドレス指定で読み書きする必要があるような環境向けの処理系ならやりかたが用意されてるだろ。
そのコンパイラのマニュアル嫁
0889デフォルトの名無しさん
2015/11/11(水) 00:32:08.54ID:iOpec/0optrdiff_tとのunion作って0をぶち込んどけ
0890uy ◆Qawu9.2l1E
2015/11/11(水) 01:09:50.86ID:uYSp+fPE0891デフォルトの名無しさん
2015/11/11(水) 01:44:08.78ID:X7TkVs/Y0(NULL)でありえないアドレスと判断してるのであって、
アクセスしてはダメってわけじゃないし、できないわけではない
0番地にアクセスが必要、つまり安全ってわかってるなら、
判断の必要もなくアクセスすりゃあいい
0892uy ◆Qawu9.2l1E
2015/11/11(水) 03:23:51.63ID:uYSp+fPENULLにアクセスしてんのと同じだもん
NULLを -1 に定義しなおすのが正解
C使わないのが大正解
0893デフォルトの名無しさん
2015/11/11(水) 03:37:46.04ID:YjEvuyTw0894デフォルトの名無しさん
2015/11/11(水) 07:24:41.78ID:mKuF2Y4Xいや、ダメだよ。
ヌルポインタコンスタントを、ポインタタイプに変換したものが、ヌルポインタ。
ヌルポインタは如何なるオブジェクトへのポインタとも等しく無い事が保証されている。
NULLが何かを指しているのはこれと矛盾。
0895デフォルトの名無しさん
2015/11/11(水) 07:30:43.33ID:/esTl/Qtアクセスしちゃダメってマニュアルに書いてあるCPUもあるよ
0896デフォルトの名無しさん
2015/11/11(水) 07:45:21.32ID:HaR9EPgA大いなる仕様設計ミスでしかない
0897デフォルトの名無しさん
2015/11/11(水) 08:27:12.80ID:X7TkVs/Y電源入れたらゼロ番地にアクセスするCPUは設計ミスなのか?
0898デフォルトの名無しさん
2015/11/11(水) 08:28:14.91ID:dnGEiVDn普通に読み書きできるよ、アドレス0にはね by Z80, i80x86
0899デフォルトの名無しさん
2015/11/11(水) 08:51:55.79ID:bkM6Jmzoその時には処理系がNULLに別の(特殊な)定数を割り当てようとするんじゃないかな?
ぎゃくにNULLマクロを使ってコードを書いていれば、そんな環境の違いをプログラマは意識する必要はないよね
0900デフォルトの名無しさん
2015/11/11(水) 09:05:54.23ID:mKuF2Y4Xx86(64も含む)は0番地にアクセス可能だよ
0901デフォルトの名無しさん
2015/11/11(水) 09:20:54.95ID:pvIjWuQG0902デフォルトの名無しさん
2015/11/11(水) 09:29:38.15ID:bkM6Jmzo私の言葉足らずで済みません。「プログラムから見て」R/W可能か?というつもりでした(o_ _)o
0903デフォルトの名無しさん
2015/11/11(水) 09:34:37.50ID:iOpec/0oそれだとNULLの内部表現によってはアドレス0にアクセスしたことにならない。
>>899
ソースコード上のヌルポインタコンスタントはヌルポインタの内部表現に置き換わることに注意しなきゃいけない。
つまり単に*((*int)0) = 0;等とやると実際に何が行われるかが処理系依存ということになる。
0904デフォルトの名無しさん
2015/11/11(水) 09:42:23.33ID:F3g6v2f+ヌルポインタのデリファレンスは未定義じゃない?
0905デフォルトの名無しさん
2015/11/11(水) 09:45:32.67ID:iOpec/0o未定義だっけ?
処理系依存って書いちゃったけど。
0906デフォルトの名無しさん
2015/11/11(水) 12:31:12.42ID:dnGEiVDnNULL マクロなんか不要だよ、NULL って書かずに 0 って書いて全く問題ない
>処理系がNULLに別の(特殊な)定数を割り当てようとする
たぶんハードウェアのアドレス空間上にそのような特別な場所はないと思うよ
0907デフォルトの名無しさん
2015/11/11(水) 12:56:10.74ID:mKuF2Y4X可変個数引数関数やプロトタイプが無い関数で困る。
後者は死ねで済むが。
0908デフォルトの名無しさん
2015/11/11(水) 14:21:46.94ID:WDtG518Pでもこれは良く考えれば一般的にそうだ
単に0と書いたとき、charなのかintなのかlongなのかlong longなのか
usngiendなのかsigneldなのか何なのか分らないではないか
0909デフォルトの名無しさん
2015/11/11(水) 14:36:22.22ID:iOpec/0o何言ってんの?
多分、可変長引数個数関数の最後の引数はNULLにしてねって書いてある
GTKなんかのライブラリで困るって言いたいんだと思う。
0910デフォルトの名無しさん
2015/11/11(水) 14:38:17.18ID:m8XjY7WS取り出す方で判別する必要があるだけだ
リテラルの0はintだろ?
0911デフォルトの名無しさん
2015/11/11(水) 14:41:58.95ID:iOpec/0o0912デフォルトの名無しさん
2015/11/11(水) 14:44:02.88ID:WDtG518Pint32とint64でサイズが違うけど
単に0と書いただけでは判断つかない
期待される型が分っている場合ならコンパイラが適切に変換してくれる
(0をヌルポインターに変換するのと同じように)
しかし可変長引数やプロトタイプの無い関数の場合は
コンパイラは期待される型がわからないから
int64のつもりで0と書いていても、コンパイラはintの0を生成するだろう
キャストするかサフィクスをつけなければならない
(ちょうど(void *)0と書かなければならないのと同じようにな)
0913デフォルトの名無しさん
2015/11/11(水) 14:48:05.91ID:m8XjY7WS自分で答え書いてるじゃんw
0914デフォルトの名無しさん
2015/11/11(水) 14:49:33.05ID:m8XjY7WSどっちでも同じだから気にしないことにしてるw
0915デフォルトの名無しさん
2015/11/11(水) 14:49:47.71ID:iOpec/0oint32のつもりでゼロと書きたいなら単に0と、
int64のつもりでゼロと書きたいなら0lって書くけど。
0916デフォルトの名無しさん
2015/11/11(水) 14:50:12.44ID:WDtG518P受け取り側がint64のつもりで受け取っていたら
呼び出し側もint64を渡さなければならない、当たり前
しかし、単に0と書いただけではintになるから
intが32bitの環境ならスタックフレームが壊れて即座にクラッシュする
だから受け渡し側はサフィクスかキャストをして渡さなければならない
これはちょうどヌルポを渡すときに(void *)0とキャストが必要なのと同じこと
もちろん、プロトタイプ宣言があってコンパイラが関数の型を分っているなら
適切に変換されるわけだがな
0917デフォルトの名無しさん
2015/11/11(水) 14:53:48.57ID:m8XjY7WS積んだ奴がスタックポインタを戻すcdeclだからできることではあるが
0918デフォルトの名無しさん
2015/11/11(水) 14:54:02.25ID:WDtG518Pヌルポインターを渡すときに(void *)0とキャストが必要というのは
数値のリテラル一般にも、そういうことだということ
特別な事じゃない
元々そういうもの
0919デフォルトの名無しさん
2015/11/11(水) 14:55:01.00ID:WDtG518Pしかしプログラムはバグるがな
0920デフォルトの名無しさん
2015/11/11(水) 15:01:43.04ID:iOpec/0oちょっと待って。
確認なんだけど、プロトタイプ宣言が無い関数を呼んだ時って
呼び出し側がどう書こうがintにキャストされるんじゃなかったっけ?
古いCの仕様で。
それと、君はキャストをどの意味で使ってる?
俺は(呼ばれる側が、引数の型を既に判明してる引数の情報から推測できる場合には)
reinterpret_castが必要ないって意味で言ってるんだけど。
0921デフォルトの名無しさん
2015/11/11(水) 15:13:38.70ID:iOpec/0o確かx86/x64上のCだと、32bit以下の型をスタック使って引数として渡す場合にも
スタックポインタって1引数あたり丁度32bit分ズレたと思うんだけど。
つまり、doubleだのint64_tだのを渡さない限り、可変長引数個数関数のva_argはどんな32bit以下の型に対しても
同じように上手く動く筈なんだけど、違ったっけ?
0922デフォルトの名無しさん
2015/11/11(水) 15:31:07.69ID:WDtG518P0923デフォルトの名無しさん
2015/11/11(水) 15:36:59.98ID:iOpec/0o補足ありがとう。なんか忘れてる気がしてた。
それでscanfとprintfの書式に対称性がなくなるんだった。
0924デフォルトの名無しさん
2015/11/11(水) 16:24:58.75ID:YjEvuyTwという当たり前の事に帰着するのであった。
0925デフォルトの名無しさん
2015/11/11(水) 17:05:05.87ID:mKuF2Y4X0926デフォルトの名無しさん
2015/11/11(水) 17:18:00.97ID:YjEvuyTw0927デフォルトの名無しさん
2015/11/11(水) 17:18:55.85ID:hcWNQVA+8
0928デフォルトの名無しさん
2015/11/11(水) 17:40:41.92ID:Ye3Cp2LR× > *((*int)0) = 0;
○ > *((int*)0) = 0;
0929デフォルトの名無しさん
2015/11/11(水) 17:59:41.08ID:iOpec/0oなんか変だとは思ってた。
サンクス
0930デフォルトの名無しさん
2015/11/11(水) 19:36:27.59ID:mKuF2Y4Xもう一回言ってやる。
NULLなんか使っちゃダメに決まってんだろ。アホウ。
0931デフォルトの名無しさん
2015/11/11(水) 19:45:11.77ID:mKuF2Y4Xお前、致命的にバカそうだから、指摘してやろう。
NULLを使えと言い出したのはこのスレではお前がはじめてだ。
0932デフォルトの名無しさん
2015/11/11(水) 19:59:15.39ID:YjEvuyTwそれだけ言え。この馬鹿素人が。
0933デフォルトの名無しさん
2015/11/11(水) 20:15:23.16ID:iOpec/0o明日もサボろう
0934デフォルトの名無しさん
2015/11/11(水) 20:15:34.95ID:mKuF2Y4X0935デフォルトの名無しさん
2015/11/11(水) 20:37:39.07ID:WOIGmI6iないと思うよ‥
0936デフォルトの名無しさん
2015/11/11(水) 20:42:08.76ID:WOIGmI6i可変長引数では,(void *)0 ってキャストして書けばいいよ
キャストなしで,とか変な縛りはやめようね
0937デフォルトの名無しさん
2015/11/11(水) 21:27:09.67ID:mKuF2Y4Xあいつら「キャストしないとコンパイラエラーが取れない」とか、真顔で言いだすから。
0938デフォルトの名無しさん
2015/11/11(水) 22:43:57.99ID:kzShUi9XNULLをデリファレンスしたら何が起きるかわからないんだから、そのときに0番地に
アクセスすることになってもしょうがない。わざわざNULLの内部表現を変える必要なんてない。
アドレス指定のダイレクトアクセスが必要なら処理系がライブラリ用意するのが筋だろう。
0939デフォルトの名無しさん
2015/11/12(木) 02:02:07.91ID:vfLy0hrq0940デフォルトの名無しさん
2015/11/12(木) 04:39:55.43ID:X3qMcYPf0941デフォルトの名無しさん
2015/11/12(木) 05:00:57.49ID:+TRt+Sln0942デフォルトの名無しさん
2015/11/12(木) 06:54:33.73ID:Rz9ctgf7混ざってるとクッソめんどい
0943デフォルトの名無しさん
2015/11/12(木) 08:28:00.26ID:X3qMcYPf0944デフォルトの名無しさん
2015/11/12(木) 08:39:19.46ID:Titn/2xe0945デフォルトの名無しさん
2015/11/12(木) 08:46:28.02ID:0/9agn9xポインタ型を返す関数なら、正常時に意味のあるポインタを返したいだろうからNULLを返すなんて無意味な仕様にしないだろうし。
0946デフォルトの名無しさん
2015/11/12(木) 09:04:13.80ID:Rz9ctgf70947uy ◆Qawu9.2l1E
2015/11/12(木) 12:11:32.58ID:YKGP90Ph0948デフォルトの名無しさん
2015/11/12(木) 12:21:56.59ID:FMRhjNH00949デフォルトの名無しさん
2015/11/12(木) 12:22:55.06ID:9l61Vk4V面白そうだから立てたww
http://peace.2ch.net/test/read.cgi/tech/1447298537/
0950デフォルトの名無しさん
2015/11/13(金) 12:04:58.17ID:P+x1lmAA0951デフォルトの名無しさん
2015/11/13(金) 15:57:23.37ID:cTzYhkFoCのstaticはそのファイルでのみ有効
C++ anonymous namespaceでは知らん
基本C++では宣言とコードは別ファイル
cpp側で書けば、そのファイルでのみ有効なんじゃ無い?
そんなコード書いたこと無いけどさ
0952デフォルトの名無しさん
2015/11/14(土) 17:35:20.56ID:Ngo/6AAystaticは名前の通り記憶クラス指定子。静的寿命を持つという宣言。
関数の外でstatic宣言するとファイルスコープになるのはどっちかというと副作用。
namespaceには記憶クラスを指定する機能は無い。
0953デフォルトの名無しさん
2015/11/14(土) 19:02:05.68ID:iwAmPq2+Cは予約語をケチるため、一つの予約語を使い回す
0954デフォルトの名無しさん
2015/11/14(土) 20:04:03.27ID:MSvtHxf50955デフォルトの名無しさん
2015/11/14(土) 21:42:00.07ID:5MMaz5Qo>namespaceには記憶クラスを指定する機能は無い。
うそつけ
>http://exlight.net/devel/cpp/unnamed_namespace.html
>名前の有効範囲をファイルスコープに制限したい場合に利用する.
>次のように名前空間名を指定せずにnamespaceで囲むと,同一ファイル内からは見えるけど,
>他のファイルからは見えないグローバル変数などをつくることができる.
>staticじゃないの?
>文脈によって意味が変わってきてわかりにくいところが不評で,C++ではstaticではなく無名名前空間を使うようになっている.
0956デフォルトの名無しさん
2015/11/15(日) 02:02:58.45ID:YRBdjGonnamespace
{
int g_count;
}
こうすると、コンパイラが勝手に、
namespace XYZ@20151115
{
int g_count;
}
using namespace XYZ@20151115;
みたいな解釈をして、定義されたファイルの利用者は、namespaceを指定せずに利用できる。
が、他のファイルからはXYZ@20151115を知らないとアクセスできないので、結局アクセスできないというだけ。
0957uy ◆Qawu9.2l1E
2015/11/17(火) 19:15:42.80ID:f2qjXPcC0958デフォルトの名無しさん
2015/11/17(火) 21:38:05.76ID:of/WOUg/実装は関係なくね?
外から見る手段がないなら内部リンケージ以外の何者でもないだろ
0959デフォルトの名無しさん
2015/11/24(火) 22:35:37.02ID:RCu8tHgVと
static int* p;
って動作違うんすか?
差し替えたら動作変わったんすけど何がどう変わったのかわからんので思い当たる節があったら教えてほしい
0960デフォルトの名無しさん
2015/11/24(火) 22:54:27.18ID:AGfVRi140961デフォルトの名無しさん
2015/11/24(火) 23:32:05.85ID:RCu8tHgVポインタの使い方が正しくないだけならともかく同じ意味のはずなのに動作自体が変わるのはおかしいなあと思って
0962デフォルトの名無しさん
2015/11/24(火) 23:34:08.02ID:ORfHMd4J0963デフォルトの名無しさん
2015/11/24(火) 23:57:41.51ID:XeCWO9iVせめてどう変わったのかを教えて欲しい
0964デフォルトの名無しさん
2015/11/25(水) 00:04:51.49ID:KJ2R+Cik0965デフォルトの名無しさん
2015/11/25(水) 02:10:04.22ID:VZbixYb2>>963
関数の頭にこれを書いたのですが、
起動時に一度だけ0で初期化して、以降は関数内で値を保持し続けるという(静的変数にしてほしい)挙動をするのは
static int* p;
の方
static int* p=0;
だと関数を呼び出したときにたまにp=0を実行し直しているような挙動をするようです
0966デフォルトの名無しさん
2015/11/25(水) 07:18:22.03ID:YbqZzFFd規格上の呼び方は知らんけど、C++のstatic変数の初期化のタイミングは、その宣言文が初めて実行される時と思えば良い。
宣言文が実行と言うのもおかしな表現だが。
0967デフォルトの名無しさん
2015/11/25(水) 09:53:50.83ID:VZbixYb2ありがとう、でもstaticの機能については理解しています(staticの仕様について質問していると勘違いされそうなので具体的な挙動の違いを書くことを渋っていた)
聞きたいのは
static int* p
と
static int* p=0
で現に挙動が変わるのでこの宣言は何が違うのかということ
0968デフォルトの名無しさん
2015/11/25(水) 10:53:08.74ID:HI8L8hd90969デフォルトの名無しさん
2015/11/25(水) 11:21:25.99ID:Sra0FKsRプログラム起動時の間違いかな
0970デフォルトの名無しさん
2015/11/25(水) 11:28:54.79ID:n/g2lh6Iコンパイラは何使ってる?
試しにclang++ -S 1.cc -o 1.S -O0でアセンブリレベルで比較したりしたけど
全く同じコードになってたよ。
gccでも同じコードになった。
>>968
コンパイル時に初期化ならconstexprだな。
実行時には書き換えできないけど。
グローバルなstaticはmain関数実行前に初期化(但し初期化に依存関係がある場合に正しく処理するとは限らない)
関数内のstaticは関数が初めて実行される時に初期化(しかもスレッドセーフ)
0971デフォルトの名無しさん
2015/11/25(水) 16:47:14.43ID:YbqZzFFdそれで、コードが変わると思えないけどな。
Cのつもりでロード時に初期化されてる事を仮定してなんか変な事やって、違うとの主張だと思ったわけ。
アセンブリリスト出力してみなよ。
0972959
2015/11/25(水) 18:32:33.40ID:sLdr6t9mアセンブリコード出力してみました
微妙にpが呼び出されるタイミングが違っていて(何がどう影響しているのか全くわからんが)ここのせいで挙動が変わっているらしい
全く同じではないということがわかったのは収穫だけど、アセンブリコードについては詳しくないのでこの違いがどう響いているのか俺にはわからぬ
環境はVisualStudio2013です
0973デフォルトの名無しさん
2015/11/25(水) 19:10:36.24ID:n/g2lh6Iなんとなくだけど、左右逆じゃね?
そして、左右があってるとすればstatic int* p = 0;が
実は0で初期化されてないコードを吐いてる。
0974デフォルトの名無しさん
2015/11/25(水) 19:48:32.79ID:HmIgiY2qこれ、意味的には初期化だけど、言語仕様的には初期化じゃなく代入に過ぎないからコードが変わるのは当たり前じゃね?
0975デフォルトの名無しさん
2015/11/25(水) 20:31:14.13ID:pS65oVmN0976デフォルトの名無しさん
2015/11/26(木) 08:58:30.65ID:4oXn5tau#define static
とかしてんじゃない?
0977デフォルトの名無しさん
2015/11/26(木) 09:02:13.03ID:GuU354a3関数内に書いてるんだったら
先(左)のは関数に入ってからゼロクリア
後(右)のはメモリ領域確保時に暗黙の初期化でしょ
0978デフォルトの名無しさん
2015/11/26(木) 12:21:05.77ID:Utv/2Onfもう一回試したけど左右はあってる
>>976
ライブラリはDxLibだけ使ってるけどそんな変な仕様が入っていることはない……と思う
>>977
原因はよくわからんが結果はそんな感じなんすかね
0979デフォルトの名無しさん
2015/11/26(木) 13:24:13.56ID:GuU354a3原因わかりきってるじゃん
書いた通りに動いてるだけだよ
関数内の最初で代入するなら関数呼ばれる度に代入するんだから
暗黙の初期化がコンパイル時の最適化によって削除されるだけ
0980デフォルトの名無しさん
2015/11/26(木) 14:31:41.55ID:w6z7subUc++のドラフトのsection 6.7.4によると、
The zero-initialization (8.5) of all block-scope variables with static storage duration (3.7.1) or thread storage
duration (3.7.2) is performed before any other initialization takes place. Constant initialization (3.6.2) of a
block-scope entity with static storage duration, if applicable, is performed before its block is first entered.
って書いてある。妥当ならただ一度だけ初期化しろ、そして初期化の前には0により初期化しろって事。
つまり、
static int* p;
とか
static int* p = 0;
とか書かれているなら、最初に実行されるときにはp==0が成り立った状態でその行を抜けなければならず、
しかももし代入が行われるのであれば、その代入はただ一度だけ行わなければならない。
そういう訳で、
>>979の
> 関数内の最初で代入するなら関数呼ばれる度に代入するんだから
この解釈は間違い。
一方でVC++の場合、
あのアセンブリリストが正しいなら、
static int* p = 0;
と書かれた場合にpの実体はBSSセクションに置かれる。
で、MicrosoftのPE/COFFの仕様書によると、このBSSセクションは以下の通り、初期化されないデータが置かれる事になってる。
https://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx から入手できる資料より一部抜粋
Section Name | Content
-------------|---------
.bss | Uninitialized data (free format)
つまりバグバグだって事だな!
0981デフォルトの名無しさん
2015/11/26(木) 16:20:53.10ID:FOlz1cOR0982デフォルトの名無しさん
2015/11/26(木) 20:05:34.37ID:1UotzJYhその、Uninitialized data って初期化子で明示的に初期化されない変数(オブジェクトファイルに初期化データが無い)が配置されるところ。
ロードされた時(少なくともエントリポイントに制御が移る前)には0になってる。
こっから先はエスパーだが、
static int *p;の領域を壊している可能性が高い。
static int *p = 0;の時はC++の流儀で初回に0が代入されてバグが隠蔽される。
0983デフォルトの名無しさん
2015/11/27(金) 01:14:50.60ID:Bpp9Chxsふーむ
今cygwin/gccで__attribute__((section(".bss")))してでっかい未初期化の配列作って表示したりしてみたら
確かに0で初期化されてた。
ELFの.bssだとプログラム実行時に0で初期化されるってきちんと書いてあるんだけど、
PE/COFFの.bssにはそれが書いてないから怪しく思えたのよ
0984デフォルトの名無しさん
2015/11/27(金) 01:38:40.76ID:A7JAVQ0/64bit環境にmakeしなおしてます
が、一部のソースは、構造体とかで32bit環境前提で作ってあったり、リンクするライブラリが
32bit環境のものしかない等の理由により、それらのツールはgccに「-m32」オプションを
つけて、32bit環境のバイナリを作らせています
オプションは、ツール用のMakefileに「-m32」を入れてるのですが、しかしたまにソースを
流用する時、32bit専用ソースを誤って64bit環境にソースに混入させてしまう場合が
あることから、32bit環境でコンパイルさせるようにできないかと思ってます
#pragma とかで、そういうチェックや指定はできるのでしょうか
0985デフォルトの名無しさん
2015/11/27(金) 02:15:31.97ID:mzBGejrM書いてあるが。
https://msdn.microsoft.com/en-us/library/thfhx4st.aspx
Variables that are uninitialized are considered to be initialized to zero and are stored in .bss.
それ以前に.bssに置かれた変数が0でないなら、MSがpeを採用した時から
世界中でPGが発狂しているという事すら考えつかないのか?
0986デフォルトの名無しさん
2015/11/27(金) 02:28:22.31ID:mzBGejrMstatic_assert
ないなら
struct foo {int foo[sizeof(void *) == 4 ? 0 : -1];};
0987デフォルトの名無しさん
2015/11/27(金) 02:36:02.76ID:Bpp9Chxs「PE/COFFの仕様書には」.bssがプログラム実行時に0で初期化されるか否かが書かれてないって話。
参照すべき資料はそいつではなく>>980の方。
> それ以前に.bssに置かれた変数が0でないなら、MSがpeを採用した時から
> 世界中でPGが発狂しているという事すら考えつかないのか?
.bssがきちんと初期化されないならされないで、Cがそれを未初期化なstatic変数の場所として利用しなければ
発狂しないんじゃないかい?
mallocがゼロクリアされないからって誰も文句言わないだろう?
>>984
コンパイルが通らなくなりゃそれで良いのであれば
static_assert(sizeof(ptrdiff_t) != 4, "error!");
かな。
0988デフォルトの名無しさん
2015/11/27(金) 02:49:14.81ID:mzBGejrM1 C/C++の規格で0に初期化されることは要求されている
2 世界中で発狂していない
しかし、
> MicrosoftのPE/COFFの仕様書によると、このBSSセクションは以下の通り、初期化されないデータが置かれる事になってる。
と書かれている。バグだ!!!
と騒いだ道化は誰でしょう?
0989デフォルトの名無しさん
2015/11/27(金) 07:36:06.42ID:A7JAVQ0/>>987
回答ありがとうございました
コンパイルが通らなければ、それで気づくと思うので、その方法を試してみます
0990デフォルトの名無しさん
2015/11/27(金) 08:46:01.27ID:Bpp9Chxs誰でしょう?私です
しかし初期化すべきデータをBSSセクションに置かないという選択をCコンパイラ作者が行ったなら
BSSセクションの中身が実際に初期化されるか否かに関わらず
世界中で発狂するような事態には決してならない、というのも正しいよね?
0991デフォルトの名無しさん
2015/11/27(金) 10:56:30.92ID:mzBGejrM> static int* p = 0;
> と書かれた場合にpの実体はBSSセクションに置かれる。
と仮定した上で、
> MicrosoftのPE/COFFの仕様書によると、このBSSセクションは以下の通り、初期化されないデータが置かれる事になってる。
と書かれている。バグだ!!!
と騒いだ道化は誰でしょう?
0992デフォルトの名無しさん
2015/11/27(金) 12:38:32.96ID:K1Tb93fe紅白歌合戦なんてやってられない阿鼻驚嘆の地獄絵図です。皆さんも、現金、食料の準備をしてください。
リーマン超える不況
世界貿易の「体温」を示すといわれる海運運賃指標、バルチック海運指数が1985年の統計開始以来、過去最低を記録した。
http://richa rdkoshimizu.at.webry.info/201511/article_190.html
日本から始まる世界的株式市場の大暴落
, - ―‐ - 、
/ \ 終いには政府にも支えることができなくなり、日本がアメリカ国債の25%を引き出すと世界経済が破綻します。
/ ∧ ∧ , ヽ それが最終的な暴落であることがはっきりするや否や、マイトレーヤは出現するでしょう。彼は「匿名」で働いております。
./ l\:/- ∨ -∨、! , '
/ ハ.|/ ∨|,、ヘ 最初になくなるのは世界の株式市場でしょう。彼らは世界を餌にして生きており、何も還元しません。
|ヽ' ヽ > < ノ! マイトレーヤは次のように言われる――かれらは自分の財産を隠し、犯罪的雰囲気さえも創出している。 ×竹中&小泉 ←懲役?
〈「!ヽハ._ __ _.lノ
く´ \.) ヽ. ノ (.ノ 政府の第一の義務は、人々を食物で養うこと、そして最後に防衛です。国民の意志を裏切ると、自殺につながる。 ×黒田&安倍 ←自殺?
\ `'ー-、 ___,_ - ' マイトレーヤは原発の閉鎖を助言されます。多くの人々が核の汚染の影響で不必要に死んでいます。 ×東電&中曽根 ←死刑?
` - 、 ||V V|| \
| || || l\ マイトレーヤが公に現れるにつれて、UFOが姿を表すでしょう。彼の最初の控えめな態度に混乱してはならない。
/ ″ \
((( / まる子れーや \ 世界平和の脅威は、イスラエル、イラン、アメリカです。イスラエルの役割は跪いて、パレスチナに許しを請うことです。
 ̄ \_ \ /_/
0993デフォルトの名無しさん
2015/11/27(金) 12:56:38.04ID:zp6Snri4ネットのロビイスト求む!
コネクションボックス ロビーに
ご参加ください
0994デフォルトの名無しさん
2015/11/27(金) 13:21:19.81ID:mzBGejrMhttp://processors.wiki.ti.com/index.php/Uninitialized_Static_Objects_Not_Set_to_Zero_in_COFF
でも、こんなことはWindowsでは起こっていない。
0995デフォルトの名無しさん
2015/11/27(金) 15:01:12.76ID:NfVJ1pe20996デフォルトの名無しさん
2015/11/27(金) 16:42:50.48ID:47yXVFDW哀れんでおけばいい
0997デフォルトの名無しさん
2015/11/27(金) 18:18:55.82ID:mzBGejrMウソを垂れ流す>>980の方が良いとでも?
0998デフォルトの名無しさん
2015/11/27(金) 20:05:22.54ID:hBuCorfy0999デフォルトの名無しさん
2015/11/27(金) 20:57:16.73ID:mzBGejrMそれ以外の評価は意味なし
バカにはそれがわからないようだ
罵られたくなかったら、でたらめなレスをする前に一週間くらい、無い知恵振り絞って考えろ
1000デフォルトの名無しさん
2015/11/27(金) 21:26:45.46ID:yIQF9FHRここではいくらでも見栄張って自分を主張していいのよ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。