スレを勃てるまでもな ..
412:デフォルトの名無しさん
09/03/17 16:30:39
毎週付録のモジュールをリンクしていくことでオリジナルIDEが完成
413:デフォルトの名無しさん
09/03/17 18:27:14
//////////////////////////////// a.h
template<typename T>
class test {
public:
test();
void _inc(T n);
void _dec(T n);
private:
T m_n;
};
//////////////////////////////// a.cpp
#include "a.h"
template<typename T>
test<T>::test() : m_n(0) { }
template<typename T>
void test<T>::_inc(T n){ return m_n++; }
template<typename T>
void test<T>::_dec(T n){ return m_n--; }
test<int> aaa;
414:デフォルトの名無しさん
09/03/17 18:28:32
//////////////////////////////// main.cpp
extern test<int> aaa;
#include <stdio.h>
#include "a.h"
void main(void){
aaa._dec(1);
}
externで宣言してるのにリンク時に未解決になります。
どこに誤りがあるのでしょうか?
415:デフォルトの名無しさん
09/03/17 18:32:13
テンプレートは実装もヘッダに入れろ
そういうもんだと思っておけばいい
詳しく知りたければ export キーワードあたりで自分で調べな
416:デフォルトの名無しさん
09/03/17 18:40:22
>>415
ありがとうございます
無事解決しました
417:デフォルトの名無しさん
09/03/17 18:50:20
なんでexportなんてキーワードがワザワザ必要な文法になったの?
なにもつけなくても実装が別ファイルにあるなら、それはそれで問題ないのじゃね?
418:デフォルトの名無しさん
09/03/17 18:55:14
>>417
宣言が必要なのよ。
419:デフォルトの名無しさん
09/03/17 19:09:02
この場合、明示的にインスタンス生成すれば済む気が。
420:デフォルトの名無しさん
09/03/17 19:15:11
C++0x に期待。
421:デフォルトの名無しさん
09/03/17 19:30:18
C++0a
422:デフォルトの名無しさん
09/03/17 19:32:53
>421
ありそうで困る
423:デフォルトの名無しさん
09/03/17 19:33:38
実装部分が別ファイルだと、コンパイル時にTが実際になんなのか分からないから、
実装部分は、コンパイルできなくない?リンク時に、改めてコンパイルし直すのか?
exportって、どう言う仕組みで実現してるの?
424:デフォルトの名無しさん
09/03/17 19:35:55
16進にすると許容範囲内に見えるから怖い
425:デフォルトの名無しさん
09/03/17 19:36:16
>>423
> リンク時に、改めてコンパイルし直すのか?
そういうこと。
それやってというお願いするキーワードがexport。
まあg++とかVC++とかの有名どこが無視しているから、事実上死に設定だけど。
426:デフォルトの名無しさん
09/03/17 23:54:31
>>421
2010年になると言うことかw
427:デフォルトの名無しさん
09/03/17 23:56:03
>>413-414
explicit instantiationを知らないなら
テンプレート関数の明示的インスタンス生成 - akihiko’s tech note
URLリンク(d.hatena.ne.jp)
ここが分かりやすいよ。必読。
428:デフォルトの名無しさん
09/03/18 00:53:11
>>421
C++0xa
429:デフォルトの名無しさん
09/03/18 07:15:29
記述場所が関数内かグローバルか判るコンパイル定数無い?
GCC 3 で
430:デフォルトの名無しさん
09/03/18 07:53:28
URLリンク(seclan.dll.jp)
前定義識別名 __func__
431:!=429
09/03/18 14:53:38
>>430
へー
そりゃ知らんかったな
432:デフォルトの名無しさん
09/03/18 17:00:28
VS2008 C++について質問です。
構造体の配列に文字を格納したところ、デバッグでみると
その場所+4つ先に格納されているのですがどういったことなのでしょうか。
以下は新規にプロジェクトを作成し、構造体とそれに代入しただけのソースの一部です。
struct TEST{
char testes[10];
};
struct TEST ttt;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
ttt.testes[0]='A';
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}
上記の例だと[0]にAが入るはずなのですが、ブレークポイントを
置いて、デバッグでみると[4]にAが入っているように見えます。
実際は[0]にAが入っているので、動作については問題なかったです。
433:デフォルトの名無しさん
09/03/18 17:44:58
まさかとは思うが、リリースビルドでデバッグしているとか、デバッグビルドに最適化を指定しているとか、
リビルドしてみてないとか言わないよな。
434:デフォルトの名無しさん
09/03/18 18:07:27
>>432
C++とC++/.CLIは名前が似てるだけで別言語。
435:デフォルトの名無しさん
09/03/18 18:16:53
>>434
でも質問の内容自体はVisual C++固有のことだから、
もし誘導するとしたら、Visual C++かVisual Studioスレがふさわしいと思う。
436:デフォルトの名無しさん
09/03/18 18:32:57
>>430
ありがとう。
でも、コンパイル"後"定数に成るみたいで微妙に目的と合致しませんでした。
437:デフォルトの名無しさん
09/03/19 20:04:24
BorlandC++Builderで以下のCプログラムを記述したところ
式の構文エラー(関数 main )と出ます。
#include<stdio.h>
int main(void)
{
int english;
printf("点数を入力してください\n");
scanf("%d",&english);
printf("英語 %d点\n",english);
if(english=>80)
{
printf("良くできました!");
}
return 0;
}
if文を用いる場合は必ずelseでそれ以外の時の処理を書かなければならないのでしょうか?
438:デフォルトの名無しさん
09/03/19 20:07:10
>=
439:デフォルトの名無しさん
09/03/19 23:37:58
BASICでは>=でも=>でもOKだから、間違えちゃう人多いのかも。
他にも==を=と間違えたりべき乗に^を使っちゃったり。
BASICを習得してるといろいろ困るよねオマンコ
440:デフォルトの名無しさん
09/03/20 00:15:49
>>438
数学では
>=は
大なりイコール
って発音するじゃん。それで覚えれば大丈夫。
441:デフォルトの名無しさん
09/03/20 00:19:51
べき乗に^使ってしばらく悩む事あるな
powとかすぐ出てこねーよw
442:デフォルトの名無しさん
09/03/20 00:22:17
/= を否定と間違えて使いそうになったりね
443:デフォルトの名無しさん
09/03/20 00:27:05
>>441-442
プログラムしばらくやってるやつは、悩むところじゃないだろ。
プログアム初心者は、悩む以前に分からない部分調べるか、誰かに聞くだろ。
444:デフォルトの名無しさん
09/03/20 01:56:47
>プログアム初心者は、悩む以前に分からない部分調べるか、誰かに聞くだろ。
そして>437にループ
445:デフォルトの名無しさん
09/03/20 09:19:46
PHPでは=>は矢印
446:デフォルトの名無しさん
09/03/20 17:37:43
>>440
数学に、そんな記号ない。縦に並べたのなら知ってる
447:デフォルトの名無しさん
09/03/20 17:41:56
じゃあやりなおし
数学では
≧は
大なりイコール
って発音するじゃん。それで覚えれば大丈夫。
448:デフォルトの名無しさん
09/03/20 17:50:53
そもそも数学で子供の頃から慣れ親しんだ記号と
似ているようで違う表記をするために間違えるのだから、
それは意味ないのじゃね?
449:デフォルトの名無しさん
09/03/20 17:58:50
声に出して確認しろってことだろ
450:デフォルトの名無しさん
09/03/20 18:03:35
自分は>=と打つときに、心の中で「大なりイコール」と諳んじてるから
まず間違えないな
451:デフォルトの名無しさん
09/03/20 18:10:04
俺もBASIC出身だから=>やったことあるわw
452:デフォルトの名無しさん
09/03/20 18:22:15
BASICやった後、Cに戻った直後は
==と書くべきところを=にして悩む
少しリハビリすると大丈夫だけど
453:デフォルトの名無しさん
09/03/20 18:44:24
というか、≧ を口に出して読んだ記憶がないな
だから「大なりイコールって考えればわかりやすいでしょ」といわれても
頭の中でもそんな風に考えたことないし・・って感じ
454:デフォルトの名無しさん
09/03/20 19:09:25
>>453は≧を大なりイコールって読むことを知らなかったってことか?
そりゃ問題だな。
455:デフォルトの名無しさん
09/03/20 19:21:11
greater or equal って読んでてごめんね
456:デフォルトの名無しさん
09/03/20 19:23:40
greater than or equal to と言うのが正しい
457:デフォルトの名無しさん
09/03/20 19:26:30
JISとかで読み方決まってないのかのう
458:デフォルトの名無しさん
09/03/20 19:26:53
gte
459:デフォルトの名無しさん
09/03/20 19:48:21
> gt
< lt
>= ge
<= le
== eq
!= ne
460:デフォルトの名無しさん
09/03/20 20:52:55
>>453
見よ、これがゆとり教育の被害者である
461:デフォルトの名無しさん
09/03/20 21:22:32
larger than or equal toって読んでた
462:デフォルトの名無しさん
09/03/20 21:54:23
普通は以上未満つかうだろ
463:デフォルトの名無しさん
09/03/20 22:05:20
以下<−>以上
未満<−>???
464:デフォルトの名無しさん
09/03/20 22:06:27
より小さい<−>より大きい
465:デフォルトの名無しさん
09/03/20 22:06:44
より大きい
466:デフォルトの名無しさん
09/03/20 22:06:54
超過
467:デフォルトの名無しさん
09/03/20 22:07:32
{○, ●}×{→、←}
468:デフォルトの名無しさん
09/03/20 22:10:47
○→)
●→]
469:デフォルトの名無しさん
09/03/20 23:01:44
>>463
反対の意味で使ってるなら間違い
470:デフォルトの名無しさん
09/03/20 23:44:36
同じ意味で使ってるなら間違い
471:デフォルトの名無しさん
09/03/20 23:47:10
どっちの推測も間違い
472:デフォルトの名無しさん
09/03/21 04:16:01
この議論に意味は無い
473:デフォルトの名無しさん
09/03/21 13:23:59
それ以外ネタが無い
474:デフォルトの名無しさん
09/03/21 21:28:22
年度末の一番忙しい時期に、仕事以外で頭を使いたくない
475:デフォルトの名無しさん
09/03/21 22:24:42
ここに言う意味が無い
476:デフォルトの名無しさん
09/03/22 00:02:16
>>459
FORTRANはすっこんでろ
477:デフォルトの名無しさん
09/03/22 00:07:15
おっとtestコマンドの悪口はそこまでだ。
478:デフォルトの名無しさん
09/03/22 02:07:37
『C++はCの完全な上位互換を失った』と見るのですが
具体的にC言語ファイルをそのまま.cppにしてエラーが起こる例ってどんなのあります?
例えばmain関数内でmain関数を使うとエラーになるようですが。(でも常用外だから普通は問題にならない)
(1) C++ではエラーが出る
(2) Cで稀に使われるが、C++で別の動きをする (想定外動作)
無理して作れば色々出てきそうですが・・・・
479:デフォルトの名無しさん
09/03/22 02:19:01
>>478
main(c){}
480:デフォルトの名無しさん
09/03/22 02:23:36
一番よく指摘されるのは
void*をキャストする必要があるかどうかだろ。
char *p = malloc(...);
が通るかどうか。
481:デフォルトの名無しさん
09/03/22 02:25:31
変数名にthrowとかusingとか使ってる場合など。
C++が作られていくときに、新たなキーワードの導入は常に強い反対があったと聞く。
482:デフォルトの名無しさん
09/03/22 02:32:45
複合リテラルとかは?
483:デフォルトの名無しさん
09/03/22 02:33:38
>>478
C99のことだと思うけど可変長配列とかC++に無い
あとintの省略もできないな
484:デフォルトの名無しさん
09/03/22 02:33:56
newとか多いよな。
oldとnewの両方を一時変数名にするとか。
485:デフォルトの名無しさん
09/03/22 02:38:49
>>478
extern のついてない const なグローバル変数を定義して
ほかのソースからextern宣言して見てるとき
486:デフォルトの名無しさん
09/03/22 16:49:25
でも俺としては例え過去のとかぶっても予約語はしっかり作って欲しい。
無理に予約語を増やさないようにするあまり、同じ予約語で少しずつ違った意味に使うの多くない?
(例 static, template)
487:デフォルトの名無しさん
09/03/22 18:35:34
D言語でも使ってろよ
488:デフォルトの名無しさん
09/03/22 19:30:32
>>478
C++ の規格の付録 C にまとめられてるよ
489:デフォルトの名無しさん
09/03/23 09:24:50
char hoge[4] = "ABCD"; // これがエラーになるかどうか
490:デフォルトの名無しさん
09/03/23 12:37:17
構造体タグの名前空間が独立していない。
struct foo {int bar;} foo; // 例えばこれがエラーになる
491:デフォルトの名無しさん
09/03/24 08:18:48
>>489
char hoge[4] = "ABCD";
がC言語だとhoge[0]='A',hoge[1]='B',hoge[2]='C',hoge[3]='D'でC++だとエラーになるんだっけ?
char hoge[5] = "ABCD";
の場合はCでもC++でも同じhoge[0]='A',hoge[1]='B',hoge[2]='C',hoge[3]='D',hoge[4]='\0'だよね。
492:デフォルトの名無しさん
09/03/24 18:04:39
C++のお勧めの書籍教えてくだされ
493:デフォルトの名無しさん
09/03/24 18:05:16
Modern C++ Design
超お勧め。っていうか、一度読んでみると歯が全部抜け落ちる。
494:デフォルトの名無しさん
09/03/24 18:07:30
うむ、サンクスbb
早速見てくる
495:デフォルトの名無しさん
09/03/24 18:09:17
入門者向けの書籍教えてくだされ
496:デフォルトの名無しさん
09/03/24 18:12:19
入門者向けなら、C++ Coding Standards。
Effective C++とかExceptional C++の最新の要約が詰まってる。
わからない場所=自分の理解が足りていない場所
という今後の学習指針にもなる。
読むと腸内がすっきりする。
497:デフォルトの名無しさん
09/03/24 18:21:11
サンクス
とても参考になります
やはり値段が高いほうが内容も詰まってるんでしょうね
498:デフォルトの名無しさん
09/03/24 18:39:57
Effective C++ 原著第3版
amazonで感想を見てみたんですけど・・・・
中級者以上を対象としているみたいな感じなのがありました
本当にこれで大丈夫でしょうか・・?
499:デフォルトの名無しさん
09/03/24 19:03:58
>>491
==
500:デフォルトの名無しさん
09/03/24 19:07:13
>>498
基本構文だとか継承だとかテンプレートの使い方だとか
そういう基礎的なのは習得してる人向けっていう程度
だが、そんなに難しくはないよ
コード付でかなり親切な説明がされてるし
501:デフォルトの名無しさん
09/03/24 19:08:34
Effective C++とかは中級者向けじゃないよ。
入門書の次に読まなければならないレベルの本だよ。
この本を読まずに「中級者」を名乗ること自体がおこがましいよ。
この本を読んだことのない人は
個人的なプログラムしか組む資格がないといってしまっていいくらいに
基本的な事柄について書かれた本だよ。
502:デフォルトの名無しさん
09/03/24 20:29:39
Effective C++か。わかるわかる。
でも初心者レベルではないと思う。
「中級者になりたい初心者なら必読」という意味では初心者向けだな。
入門者の場合は意味不明だと思うが、初心者なら説明が丁寧でたとえがすばらしく分かりやすいからオススメ。
503:デフォルトの名無しさん
09/03/24 20:32:17
10年間Cを書いてきたシニアエンジニアが独力で半年間C++を検討した結果が全て、
EffectiveC++に(より洗練された形で)書かれていたと言っていた。
要は、EffectiveC++を最初から読んでいれば半年間無駄にしなかったのにね、と。
504:デフォルトの名無しさん
09/03/24 20:39:53
Cのファイルアクセス程度までしか勉強していないようなヤツでもわかるものかしらね
505:デフォルトの名無しさん
09/03/24 20:40:06
中級者なら知ってて当然のことが書いてあるだけで、
読まなくても別に中級者になれるけどな
506:503
09/03/24 21:59:39
>>504
>Cのファイルアクセス程度までしか勉強していないようなヤツでもわかるものかしら
C++の入門者だから無理じゃないかな?
クラスって何よ?継承って何だよ?テンプレートとは???
っていう感じになっちゃってまともに読み進められないと思う。
>>505
確かにそう言うことになるな。
別に全員が読んでるわけじゃないだろうし。
507:デフォルトの名無しさん
09/03/24 22:45:56
Effective C++はC++を真面目にやろうと思ったら必読書。
読んで理解できなければ、理解できるようになってからまた読めばいい。
よって常にお薦め。
いつまでも理解できないならそいつはC++に向いてない。
508:デフォルトの名無しさん
09/03/24 23:00:50
Effective C++は中級者なら知ってて当然の知識集だから、
この本自体は中級者向けじゃないよ。
この本に書かれている知識を習得していない人は
中級者じゃなくて単なるカスプログラマだから。
何度も書くけど、入門書を読んだあとに読むべき本だよ。
509:デフォルトの名無しさん
09/03/24 23:09:56
口悪いの多いな。
510:デフォルトの名無しさん
09/03/24 23:22:00
件のEffective C++自体、結構口の悪い文章だから。
511:デフォルトの名無しさん
09/03/24 23:28:42
2chだからだろ。
日常生活なら滅多に使わない侮蔑を含む日本語が飛び交う場所だからな。
むしろこのスレはまだマシな方じゃね?
512:504
09/03/25 00:36:26
>>506
クラスとか継承はJavaのさわり程度ならやったので意味だけならなんとか
513:デフォルトの名無しさん
09/03/25 00:43:42
Effective C++はC++特有の仕様に触れることもあるから
少なくとも初心者向けのC++解説本は読んでることが前提。
ちゅか、Effective C++を読めば、C++のプログラムに
Cのテクニックはあまり(ほとんど?)役に立たないことがわかる。
Cの知識は無用ともいえる。
514:デフォルトの名無しさん
09/03/25 00:45:12
>>513
Cで培った危険を予知する感覚というか知識は必要じゃね?
まあC++のソースを書いていてprintfなんて書こうものならもうそいつのソースは信用できないな。
515:デフォルトの名無しさん
09/03/25 00:46:23
>まあC++のソースを書いていてprintfなんて書こうものならもうそいつのソースは信用できないな。
なんてことを言う奴は信用しないことにしている。
516:デフォルトの名無しさん
09/03/25 01:00:11
coutなんか使わなくてもprintfで十分足る(キリッ
517:デフォルトの名無しさん
09/03/25 01:09:59
printfは型安全を無効化するっていうことを理解して使う分には問題ないんでないの?
サッターは「安全装置のない車を運転するほうが楽なのといっしょだ」みたいな主旨のことを書いてた。
518:デフォルトの名無しさん
09/03/25 01:27:36
fgets()でstd::stringに読み込めないのは不便だな
519:デフォルトの名無しさん
09/03/25 01:35:46
シフト演算子オーバーライドして返り値への代入を繰り返す「どうだ凄いだろ」的な構文でなければ
C++内の printf は早々に駆除されてたと思う。
初めて見たとき もうちょっとマトモナやり方があるだろう?と感じた。
520:デフォルトの名無しさん
09/03/25 01:40:01
でも吐き出すコードはそこそこまともじゃない?
521:デフォルトの名無しさん
09/03/25 01:43:16
CにないC++の機能
たとえばClassとかSTLとかは使わにゃ損々なんだが
iostream系のようにCにもある機能は
別に置き換えなきゃならんわけじゃないし
522:デフォルトの名無しさん
09/03/25 01:46:49
まあiostreamは単なる多重継承の技術的デモンストレーションだという
極論まであるし遅いしだな
時と場合に応じて使い分ければ良い
523:デフォルトの名無しさん
09/03/25 02:54:02
可変引数のもたらす潜在的なセキュリティホールがむにゃむにゃ
524:デフォルトの名無しさん
09/03/25 08:12:59
>>519
返り値への代入を繰り返すってなに?
525:デフォルトの名無しさん
09/03/25 09:20:24
>>524
((std::cout << hoge) << moge)
代入じゃねえな。
他は >>519 に同意。
特にシフト演算子のオーバーライドとか、やっちゃ駄目な部類。
526:デフォルトの名無しさん
09/03/25 12:39:57
初期のC++には、C++のライブラリは、ほとんどiostreamしか付いて無かった
(stringや複素数はあった)。だからC++の基本機能や、言語概念の説明といった役割が大きかった。
その後、多重継承が追加されて、書式付き入力ストリームと出力ストリームを結合させるなど、
仮想基底クラスの用法を示している。そういう歴史的経緯が判らないと、
微妙に感じるかも知れないけど、自分定義の型拡張やコンパイル時のチェックも効くし、
長く使ってると愛着も湧いたりする。better Cとして使ってる人には不評みたいね。
カレー南蛮そばが来ないので、長文してしまった。
527:デフォルトの名無しさん
09/03/25 13:36:58
不評っつーか、わざわざ使うまでもない
528:デフォルトの名無しさん
09/03/25 13:47:06
わざわざも何も、それが標準的な出力手段なんだが?
529:デフォルトの名無しさん
09/03/25 14:28:01
オーバーライドとオーバーロード混ざってる悪い子はいねがー?
530:デフォルトの名無しさん
09/03/25 14:53:12
最初から可変長テンプレートを入れてれば、
std::cout(hoge, fuga, std::endl); とか書けたのにな。
だが、D言語では
Stdout(hoge)(fuga).newline;
531:デフォルトの名無しさん
09/03/25 15:15:07
オレオレフィルタとか書くときはboost::iostreamsを使う
532:デフォルトの名無しさん
09/03/25 15:58:48
>>526
じゃあもう要らないですね。obsolete にしましょ。
533:デフォルトの名無しさん
09/03/25 17:48:52
OKです
534:デフォルトの名無しさん
09/03/25 18:12:00
いくら不要になったといえども
作ってしまった過去の資産()があるから削っちゃだめだろ iostream
535:デフォルトの名無しさん
09/03/25 18:32:28
負債というべき
536:デフォルトの名無しさん
09/03/25 20:09:12
浮上
537:デフォルトの名無しさん
09/03/25 20:18:28
ぶっちゃけ、iostreamは、C++の入門書で使われている以外で
使われてるのを見たことない。
538:デフォルトの名無しさん
09/03/25 20:45:35
C++ Coding Standards 第98項
「printf系の脆弱性は、本書執筆時点でも尚、深刻なセキュリティ問題である。」
(中略)
「vararg以外の方法で可変引数をサポートする型安全なライブラリを利用しよう。
例えば、[Boost]のformatライブラリがある。」
Boost C++ Libraries 第2版 p.69
「もしもプログラマが間違った書式指定をしてしまったら(中略)、
printf関数は(中略)、もう何がおきるかわからないトワイライトゾーンへ突入してしまいます」
などなど。
539:デフォルトの名無しさん
09/03/25 20:46:25
>>530
俺もDさわってみて、何でC++には可変長引数が配列で取れないのか非常に不思議になった。
すごい便利なんだよな。D1をバックポートしてほしいぞ。
540:デフォルトの名無しさん
09/03/25 20:49:09
型安全を無視するつもりなら、最初からC++を使う意味ないんだよ。
別の言語を使ったほうがいい。
目的ごとにぴったりあう言語というものは違うのだから。
541:デフォルトの名無しさん
09/03/25 20:50:45
>>538
間違ったプログラムであの世へ行くのはprintfに限らない
間違わなければいいだけ
542:デフォルトの名無しさん
09/03/25 20:51:43
>>541
君にはデスマーチとかアジャイルプラクティスとかを読む権利をあげますw
543:デフォルトの名無しさん
09/03/25 20:54:24
>>541みたいな人はC++使う価値ないんだって。
C++は厄介ごとはコンパイラにまかすという方針なんだから。
プログラマがすべてを制御できる自身があるなら
Cの方がよっぽど単純で軽快だ。
C++を選択することが最初から間違っている。
544:デフォルトの名無しさん
09/03/25 21:03:05
Effective C++にも「FORTRANかよっ!」って書いてあるな。
自分はメイヤーズ先生やサッター先生の言うことに従うわ。
この板にそれ以上の能力の人間が来ているとはとても思えないから。
545:デフォルトの名無しさん
09/03/25 21:04:01
printfで出会った不具合といえば、
クラスが内部で規定してる構造体に型オーバーロードしたメソッド書いて、クラスの返り値としてその構造体をprintfに食わせたら、
オーバーロードが働かなくて構造体そのものを食いやがった事がある。アドレスぽいものが表示されんの。
表示系だから良かったけどいやなバグだった。
コンパイラはVC9EE。
546:デフォルトの名無しさん
09/03/25 21:09:15
VS2008のRelease Modeでは出力と入力の速度が逆転するな
URLリンク(kansai2channeler.hp.infoseek.co.jp)
547:デフォルトの名無しさん
09/03/25 22:16:49
printf系関数はtypedefされた型には無力なのがダメだね
548:デフォルトの名無しさん
09/03/25 22:24:33
Boost.Spirit.Karma.formatを使おうぜ
549:デフォルトの名無しさん
09/03/26 06:38:13
入出力先と書式化の癒着関係を美しく分離する術を思いつけなかった
可変長テンプレートマンセー君レベルが当時の最先端だったって事か
550:デフォルトの名無しさん
09/03/26 13:37:06
>>543
>>>541みたいな人はC++使う価値ないんだって。
間違いを犯す莫迦にこそ価値がないのでは?
>C++は厄介ごとはコンパイラにまかすという方針なんだから。
いいえ。
コンパイラが余計なことをしないか、常に心配しながら
コードを書き連ねることを
プログラマに強いる方針です。
551:デフォルトの名無しさん
09/03/26 14:36:00
間違ったプログラムを出来るだけコンパイルエラーにしようってのがC++の方向性なんじゃないの?
プログラムの知的能力に関わらず、タイプミス等の軽微なミスは起こりうるものだと思うけど。
552:551
09/03/26 14:37:29
プログラムの→プログラマーの
553:デフォルトの名無しさん
09/03/26 15:52:50
そうだよ。間違いを犯しやすい人ほど高級言語が必要になる。
コンピュータを完全にコントロールできる人間は高級言語に頼る必要はない。
高級言語は人間のミスを吸収するために余計なコードを山ほど作るからね。
C++はCよりも遅いしコードも大きいし規則も山ほどある。
その規則の多くはコードを早くしたり小さくしたりするためのものじゃない。
単に間違いをコンパイラが見つけやすくするため。
間違いを犯さないプログラマには無用のものばかり。
554:デフォルトの名無しさん
09/03/26 16:59:10
>>その規則の多くはコードを早くしたり小さくしたりするためのものじゃない。
>>単に間違いをコンパイラが見つけやすくするため。
そうか?
コンパイラにとって正しいけど、プログラマの意図通りにならないことは
C++の方が多いのでは?
555:デフォルトの名無しさん
09/03/26 17:06:14
えーと、どこから突っ込めばいいの?C++が目指したのは基本的に効率だよ。
それは速度とコーディング効率で、プログラマの能力と方針にあわせて、
どちら側を重視する事も出来る。充分に熟練していれば、他の言語よりも高い
バランスで、両立する事も可能。それは全ての言語の、全てのメリットを上回る
意味では無いけどね。現実には機能を散漫に付けすぎて、高いバランスどころの
騒ぎじゃないけど、目標としてはそんなところ。
>>554
どうも設計者が平均的プログラマの能力等を、考慮に入れなかったのでは無いかと予想。
自分で設計しといて、ベテランしか使えねーとか言ってるしねぇ。
556:デフォルトの名無しさん
09/03/26 17:21:38
「間違いを犯す莫迦にこそ価値がない」
という仮定が間違ってるんだよ。
なぜなら、間違いを犯す莫迦しかいないから。
間違いを犯さないプログラマなんて一人も存在しないから。
557:デフォルトの名無しさん
09/03/26 17:28:43
「オレの嗜好通りにソースを書かないやつはクズ」
558:デフォルトの名無しさん
09/03/26 18:26:47
C++標準化委員会に名前を列ねている連中だってbugを出すんだから、
ましてや昼間に書き込んでるネラーなんてなあ?w
559:デフォルトの名無しさん
09/03/26 18:58:04
>>556
全員一律に同じレベルの莫迦だということにしないと
自分を保てないというのなら
そういうことにしてもよい。
560:デフォルトの名無しさん
09/03/26 19:06:06
つまり、自分は間違いを犯さないプログラマであるといいたいわけね。
ちなみに、99点も0点もどちらも「間違いを犯す」ことに違いないよ。
100点満点だけが「間違いを犯さない」といえる。
さぁ、ベン図を描いて確認だ!w
561:デフォルトの名無しさん
09/03/26 19:09:56
>>559は「莫迦」の程度の話に摩り替えてるな
「間違いを犯すか否か」の話なんだが。
まぁいいか。論理的精密さを求めるような話でもない。
所詮は小さなプライドにしがみついた煽りあいだ。
562:デフォルトの名無しさん
09/03/26 19:10:19
自分ひとりだけで完結する規模のものしかやらないのなら
将来メンテすることもないような使い捨てのものしか書かないならそれでいいじゃん
563:デフォルトの名無しさん
09/03/26 19:13:37
だな。それならいくら自分がバカで間違いだらけでも問題ない。
564:デフォルトの名無しさん
09/03/26 19:32:38
アンドリューハントによると、自分のプログラムにバグがないと思っているときには、バグは見つけられない。
言い換えれば、自分は間違いを犯さないと考えているプログラマは自分のプログラムからバグを見出せない。
565:デフォルトの名無しさん
09/03/26 19:42:27
このスレもム板化してきたな…技術の話しろよ、カスども。
566:デフォルトの名無しさん
09/03/26 19:53:58
>>565
ここはム版ですよ?w
567:デフォルトの名無しさん
09/03/26 20:05:29
>>565
一週間ぐらい我慢しろよカス
568:デフォルトの名無しさん
09/03/26 20:21:31
>>561
すりかえてなんかいねぇよ。
程度問題だろっつってんだよ。
>>556 の「間違いを犯す莫迦」の前に「ひとつでも」てのが付くなら、
そんな頭のおかしい「仮定」なんざ誰がしてるってんだ。
569:デフォルトの名無しさん
09/03/26 21:47:01
いや、頭がおかしいのはあなたですよ^^
570:デフォルトの名無しさん
09/03/26 22:00:27
いかに「あいまいな」仕様書が危険か、これでわかりましたね。
では、次の話題どうぞ。
571:デフォルトの名無しさん
09/03/27 22:40:22
C++が危険なコーディングには警告を出すという方針なのだとしたら
printfを使ってもC++コンパイラは全く警告を出さないからprintfを使うことはC++的に全く問題ないということだよ。
572:デフォルトの名無しさん
09/03/27 22:44:15
>>571
その考え方はおかしい
573:デフォルトの名無しさん
09/03/27 22:57:20
警告を出すかどうかはC++の仕様で定められてはいない。コンパイラの実装者の考え次第だ。
実際、Stroustrupはいろんなことについて「これに警告を出さないコンパイラが多いのはがっかりだ」とか言ってるな。
D&Eに書いてある。具体的な事例はあんまり覚えてないが。
574:デフォルトの名無しさん
09/03/27 23:10:50
C言語は上から順番に処理されるんだよね。
そうすると、割り込むみたいなことは許されないんだよね?
例えばfor文のループ中にキーを押したらそのときのtimeを取れるみたいなのは無理?
for( )
・・・・・・・・・
if(getchar
見たいなのじゃなくて、for文でゲームみたいなの動かしたいんだけど、
その途中でどんな途中でもtimeが取れるみたいなことは出来ないですか?
575:デフォルトの名無しさん
09/03/27 23:18:42
>>574
_beginthreadex
576:デフォルトの名無しさん
09/03/27 23:23:46
つ _kbhit()
577:574
09/03/27 23:29:12
初心者板ってあるんですね。行って来ますすいませんでした。
578:デフォルトの名無しさん
09/03/30 08:28:32
UWSCというフリーソフトに [CHKIMG]という関数があります。
画像ファイルと一致する画像を発見すると、その座標を変数に格納するというものです。
これと同じ機能をC言語で実装するにはどのような関数を使えば良いのでしょうか?
579:デフォルトの名無しさん
09/03/30 08:45:58
>>578
Win32API に画面をキャプチャするのがあるから
それで画面を取り込んで指定画像と比較すればいいんじゃないかな
580:デフォルトの名無しさん
09/03/30 15:35:03
すまん質問させてくれ
今C++のtemplateで新しく設計・作成したクラスがあるんだが
main.cpp
temp.h
temp.cpp
のようにソースを分けたいと思ってる
でも、templateだから.objにしてしまうとビルドエラーが発生
何とか分けたいのだが、良い方法ないでしょうか?
581:デフォルトの名無しさん
09/03/30 16:49:25
蛇足だと思うが、Templateはコンパイル時に計算されてしまうのでobjになった時点で定数になっている。
exportっていう仕様があるにはあるけど、各社ともに実装できなくて放置状態だ。いや、一個だけあったかもしれんが。。。
VC6でやってた記憶があるけど、もう忘れちゃったなぁ。
VC9使ってるが、ヘッダにベタ書きしてる。
582:デフォルトの名無しさん
09/03/30 17:09:53
>Templateはコンパイル時に計算されてしまうのでobjになった時点で定数になっている。
さっぱりワケが解ってないらしい。
(なんだ「計算」だの「定数」だのって)
583:デフォルトの名無しさん
09/03/30 17:16:43
そりゃ君の経験不足
584:581
09/03/30 17:33:07
CTFE(だっけ)が何で高速っていわれるかしってんの?しらないの??魔法じゃないのよ。
多分>>580が望んでるのはジェネリックスのほうだと思う。
585:デフォルトの名無しさん
09/03/30 17:37:34
CTFEって何
586:デフォルトの名無しさん
09/03/30 17:38:49
URLリンク(en.wikipedia.org)
587:デフォルトの名無しさん
09/03/30 18:05:35
>>580
こういうのがあったが。
URLリンク(okwave.jp)
これで解決かな??
588:デフォルトの名無しさん
09/03/30 19:13:56
>#include "TList.cpp"
…分ける意味ねぇな、とか思わないのが不思議。
589:デフォルトの名無しさん
09/03/30 19:39:23
>>581
俺もヘッダにべた書きしてた事あるんだが
ヘッダに書くなんてありえないとか言われて、それ以来分けてる
template classを使ったのは速度を犠牲にしてでも、汎用性+αの目的の為
>>587
ありがとう。これは知らなかったからまた新しく知識が増えた
只、ヘッダ以外をインクルード…まあヘッダにベタ書きしたと思えばいいかな…
暫くはこれを使ってみます
レスくれた方々本当に有難うございました
590:デフォルトの名無しさん
09/03/30 19:46:47
>ヘッダに書くなんてありえないとか言われて、
「ありえねぇよな、STL」と言い返せ。
591:デフォルトの名無しさん
09/03/30 20:02:36
printfは素晴らしいよね。
coutより使いやすい
592:デフォルトの名無しさん
09/03/30 20:24:38
でもたとえば template<> hoge< int >( パラメータリスト )
みたいなテンプレート特化がしぽぽファイルに書き込まれていると
これはテンプラータ関数ではなく一般の関数と同じ扱いだから
定義を頭ファイルに書き込めないのであって(淫乱は別として)
多重定義アラーがでるよって思うな。あっさらーむ。
593:デフォルトの名無しさん
09/03/30 20:30:49
あぁ、そうそう。ただテンプレート特化の注意点についてだけ言及しても
解決策はどうしたらいいのってことになるので、つまりそこはグーグルだよ。おにいさん。
以下の「-inl.hファイル」という項が参考になる。
URLリンク(www.textdrop.net)
要するに、もう一個、てんぷらクラス/関数専用のサブのヘッダファイルを用意して
そこにてんぷらの実装コードだけを分離しつつ、
ヘッダファイルでそのサブヘッダファイルをインクルードしたらどうなの?って話。
これなら本来実装を書き込むしびびんファイルをいんこるどするよりも気持ち的に安全。
594:デフォルトの名無しさん
09/03/30 21:18:29
>>592-593
酔っ払いすぎ。
595:デフォルトの名無しさん
09/03/30 21:24:22
今の話題がよく分からないんだが。
特に理解出来ないのが#include "TList.cpp"とかやってるサンプルが出てきてからなのだが、
この会話はレベルが高い話なのか低い話なのか?
(このレベルってのはハードウェアに近いかどうかって意味じゃなくてね。)
>>580が悩んでるのはExplicit instantiationで解決する類の話じゃなくて?
596:デフォルトの名無しさん
09/03/30 21:28:39
ヘッダに置きたくない理由がわからんのにレベルもくそもあるかいな
597:デフォルトの名無しさん
09/03/30 21:29:06
そのエクストラボーキサイトイニシエーションとかいうのの詳細は
このスレのちょっと前の方に出てきているわけです。
URLリンク(d.hatena.ne.jp)
しかしこれはソースの分離というより、
あらかじめ分離してコンパイルしたオブジェクトファイルを用意しておく
という感じでありますね。いいです。すごく。おおきい。
598:デフォルトの名無しさん
09/03/30 22:31:51
>>597
オヤジギャグかますなよ
599:デフォルトの名無しさん
09/03/30 22:51:34
かます。>゚))))))<
600:デフォルトの名無しさん
09/03/31 20:04:07
グローバル変数って他のファイルからexternで参照できるよね。
グローバル変数にstaticを付けると、
他のファイルからexternで参照できなくなるの?
601:デフォルトの名無しさん
09/03/31 20:13:14
ぐぐれかす
602:デフォルトの名無しさん
09/03/31 20:29:10
>>600
そうだよ。
603:600
09/03/31 20:58:08
>>601
とっっくにググってあるよ。
ググった結果、>>600のように解釈したんだ。
何の実りもないレスすんなカス。
>>602
納得できた。
ありがとう。
604:デフォルトの名無しさん
09/03/31 21:05:12
ちょっと試せば1分で判るような質問も、何の実りもないけどね
605:デフォルトの名無しさん
09/03/31 21:14:07
>>604
動いたかどうかじゃなくて正式な仕様として聞きたかったとか?
だいたい2chで実りを求める方がおかしいよーな。
まあどうでも良いけど、これが火種になってスレが汚れないことを願う。
606:デフォルトの名無しさん
09/03/31 21:18:57
>>605
おまえが汚れだ。
607:デフォルトの名無しさん
09/03/31 21:28:20
>>606
2chに一生をかけてる人が「2chで実りを求める方がおかしい」発言にキレた構図。
608:デフォルトの名無しさん
09/03/31 21:34:15
>>607
バーカ
609:デフォルトの名無しさん
09/03/31 21:36:20
>>608
って言われてるのか。かわいそうだがお似合いなお方w
610:デフォルトの名無しさん
09/03/31 22:49:49
,.、 .,r.、
,! ヽ ,:' ゙;.
! ゙, | }
゙; i_i ,/
,r' `ヽ、
| ,.、 ,r.、 ,i" _, ._ ゙; うーん・・・・
| ,! ヽ,:' ゙;. !. ・ ・ ,!
| ! ,! } ヽ、 x _,r'' 僕には何も言えない
|二゙; i二二二(⌒ノ"''`''''''''''''"´`ヽ.
| ,r' `ヽ、 ´ヾ、 l l
,i" _, _ ゙; ! i___|
!. ・ ・,! | t,ノ
|ゝ_ x _::' !、、、、、、、、、、!
|,/"`''''''''''''''"´';, | | |
(,;! !) | | |
|゙''::r--、::--;r' |____|_____|
|―゙'ー-‐゙ー-゙'―┐ (,,,__(,,,____)
611:デフォルトの名無しさん
09/03/31 23:14:21
>>600のせいでスレのレベルが落ちたな
612:デフォルトの名無しさん
09/03/31 23:16:48
>>611
もともと低かったろ。
613:デフォルトの名無しさん
09/04/01 07:46:43
普通の頭であれば検索だけで理解できるからな
検索先が信じられずに2ちゃんのレスのほうを信じるのもどうかと思うし
614:デフォルトの名無しさん
09/04/01 08:14:01
ここは検索のスレではありません。
検索に関する会話はご遠慮下さい。
615:デフォルトの名無しさん
09/04/01 09:57:04
staticをつけると内部的な名前が変わる
616:デフォルトの名無しさん
09/04/01 13:13:50
かどうかは知ったこっちゃないわな。
617:デフォルトの名無しさん
09/04/01 16:33:56
バイナリデータとテキストデータを結合してchar型配列に格納したいです。
例えば
char STR[256] = {0};
unsigned long Value_A = 0x01234567;
unsigned long Value_B = 0x89ABCDEF;
char Str_A[] = "sample1";
char Str_B[] = "SAMPLE2";
というデータがあったとして、配列STRに以下のようにデータを格納するコードを教えて下さい。
< binary > < text >
0x01234567 0x89ABCDEF sample1|SAMPLE2
ちなみに、バイナリデータはテキストにはせず、BigEndianで格納したいです。
あとテキストには'|'文字を入れて区切りたいです。
よろしくお願いします。
618:デフォルトの名無しさん
09/04/01 17:24:58
#include <ctype.h>
#include <stdio.h>
#define swap(ul) ((ul)<<24)|(((ul)&0xFF00)<<8)|(((ul)&0xFF0000)>>8)|((ul)>>24)
void main()
{
unsigned char STR[256] = {0};
unsigned long Value_A = 0x01234567;
unsigned long Value_B = 0x89ABCDEF;
char Str_A[] = "sample1";
char Str_B[] = "SAMPLE2";
unsigned long ul;
int i;
ul = swap(Value_A);
memcpy(STR, &ul, 4);
ul = swap(Value_B);
memcpy(STR + 4, &ul, 4);
strcpy(STR + 8, Str_A);
strcat(STR + 8, "|");
strcat(STR + 8, Str_B);
for (i = 0; i < 8 || STR[i]; i++) {
printf("%d:%02X[%c] ", i, STR[i], isprint(STR[i]) ? STR[i] : '.');
}
}
0:01[.] 1:23[#] 2:45[E] 3:67[g] 4:89[.] 5:AB[.] 6:CD[.] 7:EF[.] 8:73[s] 9:61[a]
10:6D[m] 11:70[p] 12:6C[l] 13:65[e] 14:31[1] 15:7C[|] 16:53[S] 17:41[A] 18:4D[M]
19:50[P] 20:4C[L] 21:45[E] 22:32[2]
619:デフォルトの名無しさん
09/04/01 17:39:06
char * push_STR(char* d,char* e,char* s,int ln){
int i = 0; while(d < e && i < ln){*d++ = *s++; ++i}
return d;
}
char *p = STR, *end = STR + sizeof(STR);
if(p=push_STR(p,end,&Value_A,sizeof(Value_A)) >= e) abort();
if(p=push_STR(p,end,&Value_B,sizeof(Value_B)) >= e) abort();
if(p=push_STR(p,end,&Str_A,sizeof(Str_A)) >= e) abort();
if(p=push_STR(p,end,&Str_B,sizeof(Str_B)) >= e) abort();
620:デフォルトの名無しさん
09/04/01 17:50:34
もしかしたら上の方のコードが途中かもしれませんが
よろしくおねがいします。
C言語の入門ページの動的配列などの部分を読んで
mallocやreallocでメモリの再確保などができる事はわかりました。
しかし、結果的にははじめに変数に入力をうけてその結果にあわせて
配列の量を変更する事はできません。
例えば文字列の入力を受け付けるプログラムでたとえば書籍の
タイトルを受け取る処理なのでせいぜいこのくらいだろうと見積もって
配列の大きさをとっていたとしてユーザーが予定以上の
非常に長いタイトルの書籍を入力したりしても残りの部分は切り捨てられるように
なってしまうと思います。これを回避する方法は無いでしょうか?
621:デフォルトの名無しさん
09/04/01 17:57:18
ない、と言ってしまうのは簡単だが
もし上限がなかったらどうなるかを考えてみよう
622:デフォルトの名無しさん
09/04/01 18:02:15
1文字ずつ受け取って、それらをリンクリストでつないでいくというのはどうだろう?
メモリが許す限りどんどん大きくできるぞ。しごいね!
623:デフォルトの名無しさん
09/04/01 18:02:34
Stringクラスを使う
624:デフォルトの名無しさん
09/04/01 18:04:42
cstringでぐぐったら紐なしエロパンツサイトがヒットした
625:デフォルトの名無しさん
09/04/01 18:05:29
キー入力を都度処理してグルグル回せば出来ない事はないけど
パイプ通しての洪水テキストや
例えばカナ漢字変換が驚くほど丈夫で数メガバイトの変換済文字列をイッキに送り込んでくるような状況
には対処しきれんよな
626:デフォルトの名無しさん
09/04/01 18:15:49
ありがとう御座います。
前もって入力を受け付けるときに文字数宣言が有る事を書いておきたいと思います。
627:デフォルトの名無しさん
09/04/01 18:24:43
そこでstream IOですよ
628:デフォルトの名無しさん
09/04/01 19:36:41
結局メモリ+HDD(外部記憶装置)以上のデータは扱えないので扱えるデータには制限がある
629:デフォルトの名無しさん
09/04/01 19:39:55
ネットがあるじゃないか
630:デフォルトの名無しさん
09/04/01 19:51:28
もうデバッグに一日以上費やしても理由がわからなかったので、ここで質問させてもらいます。
本当に理由が解明できなくてマジで困ってます…。
for (i=0; i < (Num_Points-1); i++)
{
distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos);
distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos);
distance = sqrt(distance_x + distance_y);
}
for (i=0; i < (Num_Points-1); i++)
{
a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
}
コンパイルエラーは出ないのですが、実行した際に途中で止まってしまいます。
何回か試したところ、上のループか下のループどちらか一方しか書いてない時は動きます。
631:デフォルトの名無しさん
09/04/01 19:58:34
一日以上費やしたってデバッガ使った?
632:デフォルトの名無しさん
09/04/01 20:15:36
どっか別のところでスタック破壊してんじゃねーの?
633:デフォルトの名無しさん
09/04/01 20:15:52
使いましたが、デバッガではよくわかりませんでした。
どちらのループも単体でしかコードに存在しない時は動くので、
printfで結果表示した場合、ちゃんと計算結果が出ます。
しかし、両方ともコードに書くと、なぜか止まってしまうんです。
634:デフォルトの名無しさん
09/04/01 20:46:09
>>633
for文の中でiを表示したらどこまで進むの?
635:デフォルトの名無しさん
09/04/01 20:53:29
本当に>>630の通りに書いてあるならループにする意味がねーよw
636:デフォルトの名無しさん
09/04/01 21:08:33
>>634
どちらかのループ単体のみの実行なら、Num_Points-2まで進んでいます。
なので、配列の範囲外から数を呼び出してるということはないみたいです。
637:デフォルトの名無しさん
09/04/01 21:15:24
>>635
エイプリル・フールは午前中までだってのにな
638:デフォルトの名無しさん
09/04/01 22:09:54
ソースアップすれば調べてもいいよ
639:デフォルトの名無しさん
09/04/01 22:51:04
>>635
distance, a0, a1 がクラスのインスタンスで、
= がオーバーロードされてるかもよ。
640:デフォルトの名無しさん
09/04/01 23:58:38
本人かデバッガ使って解らないものを、他人が不定な変数の多い
部分的ソースだけ見せられて判るとは思えない。
641:デフォルトの名無しさん
09/04/02 00:04:08
>>636
上のループで1からNum_Points-2まで進んで
下のループでも1からNum_Points-2まで進んだってこと?
それなら処理終わってるよね?
せっかく解決しようと聞いているんだから省略しないできっちり説明してほしいな。
642:デフォルトの名無しさん
09/04/02 00:40:04
>>641
上のループ、もしくは下のループどちらかしか書いてなければ正常に動きます。
だから、printfでiがどこまで進んでいるかも確認して、Num_Points-2まで進んでました。
このループを両方コードに書いてプログラム実行すると止まって、
printfで表示できてたものも表示されなくなってしまいます。
643:デフォルトの名無しさん
09/04/02 00:48:48
>>642
printfを具体的にどこにどのように入れてるのか知らないが、つまりループを両方書くと
実行時に最初のループに入ってすらいないということか?
もし可能であれば、実際にその問題が生じるような最小限のコード全部を書いてほしい。
つまり、俺らがそのままコピペして自分でコンパイルしてみると、同じ問題に遭遇できるようなコードってことね。
それが出来れば問題解決のための労力は少なくて済む。
まあ実際にはかなり長いコードになっちゃうのかもしれないけど。
あと、君が使ってるコンパイラに特有のトラブルだったりすると、助言できないかもしれない。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5393日前に更新/193 KB
担当:undef