スレを勃てるまでもないC/C++の質問はここで 8at TECH
スレを勃てるまでもないC/C++の質問はここで 8 - 暇つぶし2ch413:デフォルトの名無しさん
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を具体的にどこにどのように入れてるのか知らないが、つまりループを両方書くと
実行時に最初のループに入ってすらいないということか?

もし可能であれば、実際にその問題が生じるような最小限のコード全部を書いてほしい。
つまり、俺らがそのままコピペして自分でコンパイルしてみると、同じ問題に遭遇できるようなコードってことね。
それが出来れば問題解決のための労力は少なくて済む。
まあ実際にはかなり長いコードになっちゃうのかもしれないけど。
あと、君が使ってるコンパイラに特有のトラブルだったりすると、助言できないかもしれない。

644:デフォルトの名無しさん
09/04/02 00:54:16
>>634
これ↓実行したら何が表示されるの?

Num_Points=1
fprintf(stderr, "start(1) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(1)[i=%d][Num_Points=%d]\n", i, Num_Points);
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);
}
fprintf(stderr, "end(1) Num_Points=%d\n", Num_Points);

fprintf(stderr, "start(2) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(2)[i=%d][Num_Points=%d]\n", i, Num_Points);
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);
}
fprintf(stderr, "end(2) Num_Points=%d\n", Num_Points);

645:デフォルトの名無しさん
09/04/02 00:59:13
>>643
printfはどこに入れても実行されないです。
このループを二つ入れると、そのvoid関数の部分のprintfは全てダメになります。
結構変数値を他の部分から呼び出してて、
その部分に関しては別の人がやった部分なので最小限のコードを作るにも少々時間かかると思います。
他にも少しやらなくてはいけないことがあるので、もしそれができたら戻ってきます。

ここまで、あまり上手く説明できなくて御迷惑おかけしました。
レス下さった方々、ありがとうございます。

646:デフォルトの名無しさん
09/04/02 01:03:50
最小限のコードなんて作らなくていい。
とりあえず>>644をコピペすればいいだけだろ。

647:デフォルトの名無しさん
09/04/02 01:06:28
無駄骨

648:デフォルトの名無しさん
09/04/02 01:10:54
ステップ実行して、どこで爆死してるか見つけないとダメじゃね?
どっかでメモリ、ぶっ壊してるのだろ、きっと

649:630
09/04/02 01:30:25
>>644
何も表示されません…。自分が両方のループ入れた時の症状と同じです。

650:デフォルトの名無しさん
09/04/02 05:50:46
もう4月馬鹿は過ぎているんだから釣りは勘弁してくれ。

651:デフォルトの名無しさん
09/04/02 06:40:26
#include<stdio.h>

int sum(int x,int y){
return x+y;
}

int max(int x,int y){
return x*200+y*300;
}

int main(void){
int x,y,i,am,pm;
char cl;
for(i=0;i<9;i++){
scanf("%s %d %d",&cl,&x,&y);
am=sum(x,y);
pm=max(x,y);
printf("%s %d %d\n",cl,am,pm);
}
return 0;
}
と書いて実行するとき、%sの読み込みにc1と入れても
出力の%sではcだけとしか表示されないんです。
誰かこの謎の答えを教えてください。

652:デフォルトの名無しさん
09/04/02 06:46:18
>>651
char cl; → char cl[5000];


653:デフォルトの名無しさん
09/04/02 07:03:43
>>652さん
ありがとうございます!!ありがとうございます!!
何でこんなことにも気づかなかったんでしょ(;'ω`)アホだ自分…

654:デフォルトの名無しさん
09/04/02 07:32:36
>>633
「デバッガでは良く分からない」んじゃあない
お前がデバッガを分かってないだけ

655:デフォルトの名無しさん
09/04/02 07:38:41
>>651
char cl[100];
if (scanf("%99s%d%d", cl, & x, & y) != 3) fprintf(stderr, "Illegal input.\n);

656:デフォルトの名無しさん
09/04/02 08:14:44
ここからユーザ定義関数で処理しなくてはならないんだが、 コレ以上の行動は俺の頭ではむりです…誰か助けて下さいorz
#include<stdio.h>
#define ROW 8 /*縦*/
#define COL 8 /*横*/

int main(void){
int i,j;
int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}};
for(j=0;j<COL;j++){
for(i=ROW-1;i>=0;i--){
printf("%2c ",matrix[i][j]);}
printf("\n");}
printf("\n");
for(i=ROW-1;i>=0;i--){
for(j=COL-1;j>=0;j--){
printf("%2c ",matrix[i][j]);}
printf("\n");}
printf("\n");
for(j=COL-1;j>=0;j--){
for(i=0;i<ROW;i++){
printf("%2c ",matrix[i][j]);}
printf("\n");}
return 0;
}

657:デフォルトの名無しさん
09/04/02 08:22:20
>>656
宿題スレへどうぞ

658:デフォルトの名無しさん
09/04/02 08:56:29
#include<stdio.h>
#define ROW 8 /*縦*/
#define COL 8 /*横*/

void disp(int (*matrix)[ROW][COL], int revrow, int revcol)
{
int i,j,row,col;

for (j = 0; j < COL; j++) {
col = (revcol) ? COL - 1 - j : j;
for (i = 0; i < ROW; i++) {
row = (revrow) ? ROW - 1 - i : i;
printf("%c ", (*matrix)[row][col]);
}
printf("\n");
}
}

int main(void){
int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}};

disp(&matrix, 1, 0);
printf("\n");
disp(&matrix, 1, 1);
printf("\n");
disp(&matrix, 0, 1);
return 0;
}

659:デフォルトの名無しさん
09/04/02 09:20:59
c初心者です。 以下の二つの関数はまったく同じように動きますか?

int f1(int a)
{
if(a==3){ return 1;};
if(a>1){ return 2;};
return 3;
}

int f2(int a)
{
if (a==3) { return 1;}
else if (a>1) { return 2;}
else {return 3;};
}

660:デフォルトの名無しさん
09/04/02 09:24:27
実行してみればいいじゃん

661:デフォルトの名無しさん
09/04/02 09:39:24
>>659
動きます。

662:デフォルトの名無しさん
09/04/02 10:12:28
春休みが終わりそうで、カツオ状態だから、このありさま?

663:デフォルトの名無しさん
09/04/02 11:36:16
>>662
春休みに宿題なんかないだろ。

664:デフォルトの名無しさん
09/04/02 11:36:47
あるよ

665:デフォルトの名無しさん
09/04/02 14:33:24
LinuxでC++で書いたクラスをまとめて、sharedライブラリ作ろうとおもってるんですが
ヘッダファイルは、まとめたり、きれいにできませんか?

公開したいクラスは1つだけ(class A)です。実装はライブラリファイルひとつになります。
内部でたくさんのクラスを使ってるんですがこれらは外からは直接
使いません。
で、class Aのメンバにたくさんの他のクラスのオブジェクトがあったり、使ったり
しているので、 class AのヘッダファイルA.hには内部のクラスたちを定義した
たくさんの *.h がincludeされてます。

ライブラリを他人につかってもらうとき、ライブラリ1つと、ヘッダたっくさん
になっちゃうんです。ひとつのヘッダファイルにまとめる方法ないです?

666:デフォルトの名無しさん
09/04/02 14:57:10
>>665
ひつの手だが、privateメンバにはダミー宣言を使う方法がある
例えば下の例(ヘッダ)で
LIBをビルドする時だけ _LIB_MAIN_ を定義する
こうすれば、LIB利用者には aaa.h は渡さなくて良い

#ifdef _LIB_MAIN_
#include "aaa.h"
aaa *a;
#else
void *a;
#endif

667:デフォルトの名無しさん
09/04/02 16:46:14
それをいかに容量上限を感じさせないようにプログラムさすのがプログラマの役割だろ、常識的に考えて

668:デフォルトの名無しさん
09/04/02 16:52:42
誤爆

669:665
09/04/02 17:33:37
>> 666
なるほど。いただき。
ポインタじゃなきゃだめ?サイズが合えばよい?

670:デフォルトの名無しさん
09/04/02 17:46:27
どんなクラスなのか分からんが、そもそもポインタ型にするなら、ヘッダからヘッダをインクルードする必要はないよ。
前方宣言だけで済む。

671:デフォルトの名無しさん
09/04/02 17:51:49
>>668
できるよ。
以上。
はい次の方。

672:665
09/04/02 18:04:13
>>670
そか。
全部ポインタにして、前方宣言すればすればよいのね。
ポインタじゃないとやっぱりむり?

673:デフォルトの名無しさん
09/04/02 18:10:08
>>672
参照でも可能だけど、まあ同じ話だね。
普通の変数の形で持つなら、その変数の型の完全な定義が必要になる。ポインタや参照なら不要。

674:デフォルトの名無しさん
09/04/02 18:31:47
Aのポインタだけメンバに持つ公開用のクラスでも作ればいいんじゃ
まぁ要するにpimplなんだが

675:デフォルトの名無しさん
09/04/02 21:44:13
pthreads関数を使用してその環境で一番処理が早いスレッド数に自動的にあわせるプログラムを作っているのですが、
すべてのスレッド内の一秒間にループした回数の和を取得することができません。

どうすればうまくできるでしょうか。

676:デフォルトの名無しさん
09/04/02 21:59:41
一番簡単なのはグローバル変数に格納する事。
2番目はクラスにしてメソッドで各スレッド内で足したものを返す。かなぁ??

677:デフォルトの名無しさん
09/04/02 23:20:48
>>675
pthread_joinで戻り値(第2引数)を合計すればいい。

678:デフォルトの名無しさん
09/04/03 05:06:12
#include<stdio.h>
int main(void){
int a,s,i;
int box[10]={0};
scanf("%d",&s);
while(s!=0){
for(i=0;i<s;i++){
scanf("%d",&a);
if(a<=9) box[0]+=1;
else if(9<=a&&a<20) box[1]+=1;
else if(29<a&&a<40) box[3]+=1;
else if(19<a&&a<30) box[2]+=1;
else if(39<a&&a<50) box[4]+=1;
else if(49<a&&a<60) box[5]+=1;
else box[6]+=1;
}
}

printf("%d\n",box[0]);
printf("%d\n",box[1]);
printf("%d\n",box[2]);
printf("%d\n",box[3]);
printf("%d\n",box[4]);
printf("%d\n",box[5]);
printf("%d\n",box[6]);
}
return 0;
}

上のソースをユーザ定義関数を使って書きたいときはどうしたらいいのでしょう?

679:デフォルトの名無しさん
09/04/03 05:21:41
mainの中身をそっくり自分の関数に移動して、mainでそいつを呼ぶ。

680:デフォルトの名無しさん
09/04/03 08:00:22
#include<stdio.h>

int hantei(int i)
{
if (i < 0) {
return 0;
}
if (60 <= i) {
return 6;
}
return i / 10;
}

int main(void){
int a,s,i;
int box[10]={0};

scanf("%d",&s);
for(i=0;i<s;i++){
scanf("%d",&a);
box[hantei(a)]++;
}
for(i=0;i<=6;i++){
printf("%d %d\n",i,box[i]);
}
return 0;
}

681:デフォルトの名無しさん
09/04/03 21:50:25
他の板でこんな言葉を叩きつけられました

プログラマになりたくてなるんじゃないなってしまう者がプログラマ
貧弱一般人がプログラマになろうとしても人工的に淘汰されるのが目に見えている


この言葉にはすごく説得力があるような気がします
やはり、プログラマになろうとしている僕に、プログラマなんて無理なんでしょうか?

682:デフォルトの名無しさん
09/04/03 21:57:21
向き不向きは有るかもしれないが、やりたい人は誰でもなれる。
向かない人はやりたいと思わない。

683:デフォルトの名無しさん
09/04/03 22:02:29
ブロントネタに真剣にならなくても

684:デフォルトの名無しさん
09/04/03 22:28:30
>>682
ありがとうございます。

頑張ってみようと思います

685:デフォルトの名無しさん
09/04/03 22:41:26
0b00000001とかしたらサフィックスが無効ですってエラーでるんだけど、何で?

686:デフォルトの名無しさん
09/04/03 22:42:12
サフィックスが無効だからです。

687:デフォルトの名無しさん
09/04/03 22:44:30
プログラマはがんばっちゃう人はダメなんだよ。
プログラマの三つの美徳

怠惰であれ、短気であれ、コーマン大好きであれ

海軍式の努力と根性がまかり通っている職場や
そのような空気を当たり前とみなすSE/PGによるプロジェクトは
漏れなくデスマーチになる。



688:デフォルトの名無しさん
09/04/03 23:37:25
>>685
2進リテラルは無い。
8進数なのにbが入ってて不正じゃないかい?

689:デフォルトの名無しさん
09/04/04 01:24:45
0bはたしかgcc独自拡張で存在したと思う。
使わないほうが無難だな。

690:デフォルトの名無しさん
09/04/04 10:38:18
>>681
他の板ってこれか?

プログラミング質問すれ Part1
スレリンク(unix板:474番)


691:デフォルトの名無しさん
09/04/04 12:02:02
>>681
プログラマーに限った話じゃない。
全ての職業に言えること。

692:デフォルトの名無しさん
09/04/04 13:32:32
まぁ、私はプログラミングなら飯が食えると判断したからプログラマになったけどな。

693:デフォルトの名無しさん
09/04/04 13:42:21
すいません。
ポインタを使って、配列のそれぞれの要素に文字列を入れたんですけども、
こういう場合の配列のアドレスって一体どういう規則で並んでいるんでしょうか?
#include <stdio.h>

int main() {

char test[] = "1234";
char *words[] = {"one","two","three","four"};

printf("%p %p %p %p\n",test[0],test[1],test[2],test[3]);
printf("%x %x %x %x\n",words[0],words[1],words[2],words[3]);

}

694:デフォルトの名無しさん
09/04/04 13:45:41
雑魚ぷろぐらまあは手配師(人材派遣会社)に喰わせてやる(=喰われてやる)のが仕事だかんなあ

695:デフォルトの名無しさん
09/04/04 13:51:41
>>693
%xではなく、%pを使うべきじゃないだろか。
で、質問は"one", "two", "three", "four"がどう配置されているかってこと?
だとしたら答えは「コンパイラのご機嫌次第」かな。
大抵は、その順番で8バイト境界に並べられるような気がするけど。

696:デフォルトの名無しさん
09/04/04 13:58:50
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

697:デフォルトの名無しさん
09/04/04 14:06:43
FFFF0000 o n e \0
FFFF0004 t w o \0
FFFF0008 t h r e
FFFF000C e \0 X X
FFFF0010 f o u r
FFFF0014 \0 X X X
※ Xに何が入るか分からない

words[0] = (char*)FFFF0000
words[1] = (char*)FFFF0004
words[2] = (char*)FFFF0008
words[3] = (char*)FFFF0010

こんなイメージ

698:デフォルトの名無しさん
09/04/04 14:12:56
>>695
なるほど。ありがとうございます。

>>697
ありがとうございます。

699:デフォルトの名無しさん
09/04/04 14:12:59
そのコードの前にconst char * foo = "one and two";なんてコードがあったら面白いことになりそうだ。

700:デフォルトの名無しさん
09/04/04 14:20:39
VC++2008EE使用
これでエラーが出るんですが、どこが悪いんでしょうか?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main()
{
char str[100] ;
int num ;

gets_s(str) ;
num = atoi(str) ;

printf("%d",num*2) ;
}

701:デフォルトの名無しさん
09/04/04 14:29:28
>>700
エラーの対処を人に聞く場合はエラーの詳細を書け
たぶん、get_s には2番目のパラメタとして長さが必要ではないかと思うけど

702:デフォルトの名無しさん
09/04/04 14:35:20
gets_s(str, sizeof(str));
だろうね
mainの最後にreturn 0;も忘れずに

703:デフォルトの名無しさん
09/04/04 14:37:13
なあに、この程度のソースならエスパーでなくとも
どんなエラーか想像がつくってもんさ

704:デフォルトの名無しさん
09/04/04 14:57:29
>>701-703
ありがとうございます。
コンパイル通りました。


705:デフォルトの名無しさん
09/04/04 15:41:42
>>704
C/C++はコンパイル通っただけじゃまっっっっったく安心できない言語だから気をつけな。
むしろコンパイル通らない内が楽だよ。(コンパイラがミスを見つけてくれるから)
コンパイル通ってからのデバッグが大変なんだよねぇ。

706:デフォルトの名無しさん
09/04/04 16:38:04
それって言語として問題あるんじゃない?

707:デフォルトの名無しさん
09/04/04 16:50:40
アホは黙ってていいよ

708:デフォルトの名無しさん
09/04/04 16:51:37
>>706
何を今更。
そんな欠陥があっても、便利なとこがあることに変わりはないから使うというだけのこと。

709:デフォルトの名無しさん
09/04/04 17:20:12
インタプリタ言語なんてすべて実行時エラーだから
もっと恐ろしいことに。

710:デフォルトの名無しさん
09/04/04 18:52:37
>>705が言ってる事(>コンパイル通ってからのデバッグが大変なんだよねぇ。)は
別に言語の欠陥じゃないだろ。
プログラムを作る
→期待通りに動作していない
→何がいけないんだーー?
ってなるのはどの言語でも一緒だろ。


711:デフォルトの名無しさん
09/04/04 18:55:30
ロジックエラーってやつだな。

712:710
09/04/04 19:07:42
>>711
俺の頭のエラーってことだな。ホント質わるい。

713:デフォルトの名無しさん
09/04/04 19:12:44
誰も頭の話なんてしてないが。。。

714:デフォルトの名無しさん
09/04/04 19:23:10
初心者が読むc++のお勧め教えてください

お願いします。

715:デフォルトの名無しさん
09/04/04 19:34:48
>>714
入門者かな?これからC++始めたいって人?

入門者ならエクスメディアの『ビジュアルラーニングC++』って本が個人的なオススメだったけど、会社が倒産した。


716:デフォルトの名無しさん
09/04/04 21:51:20
>>715

ありがとうございます

717:デフォルトの名無しさん
09/04/04 21:53:53
コロッとだまされちゃうんだな。

718:715
09/04/04 22:26:09
>>717
失敬な

719:デフォルトの名無しさん
09/04/05 00:27:14
すんません。知り合いのフリーのPGがVBやVCのアカデミック版使って
作ったソフトを売ってるんだが、ソフト自体は差は無いのですか?
やめたほうがいいんじゃって言っても「ばれねぇ」の一点張り。
実際どうなの?

720:デフォルトの名無しさん
09/04/05 00:30:31
何か問題あるの?

721:デフォルトの名無しさん
09/04/05 00:37:52
アカデミック版で作ったソフトって売っていいの?

722:デフォルトの名無しさん
09/04/05 00:38:20
売っちゃいけないの?

723:デフォルトの名無しさん
09/04/05 00:39:42
ライセンス読まないの?

724:デフォルトの名無しさん
09/04/05 00:41:13
>>719
ライセンスキーの情報が埋め込まれてるから
ばれる可能性はある

アカデミックとかImagineCupのは商用利用負荷だよ
Expressはできるけど

725:デフォルトの名無しさん
09/04/05 00:43:20
いやアカデミックは商用利用可能だよ

726:デフォルトの名無しさん
09/04/05 00:53:16
>>725
ほんとだ、ごめん
アカデミックは大丈夫ですね

727:デフォルトの名無しさん
09/04/05 00:59:16
テンプレートの明示的特殊化の際に「整数型全部」「浮動小数点型全部」といったことをしたいんですが、いい方法はありませんでしょうか。

template<typename T> class Hoge { void f() {} }
template<t> class Hoge<整数>::f { void f() {整数専用処理}; }
みたいな感じで。

728:デフォルトの名無しさん
09/04/05 01:00:39
じゃあ、学生のときに買ったアカデミックで作ったソフトは売っても全く問題ないわけね

729:デフォルトの名無しさん
09/04/05 01:00:49
もうひとつ。
テンプレートの明示的特殊化はヘッダファイルに書いておいてもいいものなのでしょうか。

730:デフォルトの名無しさん
09/04/05 01:28:00
>>727
boost::enable_ifを使うしか無いと思うよ。
letsboost::enable_if
URLリンク(www.kmonos.net)


731:デフォルトの名無しさん
09/04/05 01:38:48
>>730
ありがとうございました。boostの使用も考えてみます。

テンプレートの明示的特殊化を複数個所で使用する場合に、
実体を置くべき場所の解決がうまくできない問題は相変わらず……
externを使えば?とも思いましたが、BCCでもVCでも解決できませんでした。

732:730
09/04/05 01:51:31
>>731
まあ正直俺だったらboost::enable_ifじゃなくて、
適当なprivateインライン関数テンプレートfoo_temp()を1つ別個に用意しておいて、
int, short, unsigned long, etc...
を全部考え得る限り特殊化し、それぞれから
foo_temp<int>, foo_temp<short>とかを呼び出すように定義しちゃうかもしれない。



733:730
09/04/05 01:54:10
>>731
>>テンプレートの明示的特殊化を複数個所で使用する場合
そもそも明示的特殊化って何?
ふつーに特殊化だよね?
あと、メンバ関数テンプレートの話だよね?
実体をどこに書いてる?
特殊化してなければちゃんとコンパイル→リンクまで行くの?

734:デフォルトの名無しさん
09/04/05 02:19:10
>>733
「明示的特殊化」はIBM XL C/C++ ランゲージ・リファレンスの言葉に従っています。
中身は普通の特殊化でメンバ関数です。
やりたいことはクラステンプレート内部のメンバ関数のみの特殊化です。
(クラス内部のテンプレート関数の特殊化を指す名前はあるのでしょうか?)

現在は
hoge.h
hoge.cpp
a.cpp
b.cpp
があるとして、

// hoge.h
template<typename T> class Hoge { void f() {} }
// template<> class Hoge<int>::f() { int専用処理; }  // cppでの記述を消しても多重定義、NG
// template<> class Hoge<int>::f(); // VCとBCCではじかれる。externを書いても同じ。

// hoge.cpp
template<> class Hoge<int>::f { void f() {int専用処理}; }

// a.cppとb.cpp
Hoge<int> hoge;
hoge.f();

とおいて試してみています。

735:デフォルトの名無しさん
09/04/05 02:56:13
>>728
学生じゃなくなってもアカデミックを使い続けて良いの?

736:デフォルトの名無しさん
09/04/05 03:40:33
課題やる→コンパイルエラー→シコシコ直す→コンパイル通る→やったー!これで終わりだー
→./a.out→文字がうじゃうじゃうじゃうじゃうじゃうじゃうじゃうじゃorセグメンテーション・エラー云々
→( ゚д゚)
→( ゚д)

そうだね、今このときだね

737:デフォルトの名無しさん
09/04/05 03:41:41
おれはなんて遅レスをしていたんだ・・・・・・
恥ずかしい・・・・・・っ、でも、

738:デフォルトの名無しさん
09/04/05 04:36:19
>// hoge.cpp
>template<> class Hoge<int>::f { void f() {int専用処理}; }

template どうこう以前に、すでに書き方間違ってるじゃろ、それ。
あと、特化したのはクラスであってメンバ関数じゃないんだから
特化のための宣言である template<> もいらない。


739:デフォルトの名無しさん
09/04/05 04:56:41
>>738
失礼しました。その部分はclass→voidですね。classだとそもそもコンパイルが通らないはず。
というわけで試してみました。

// hoge.h
template<typename T> class Hoge { void f() {} }
// なにも書かない→gcc3.4:リンカで多重定義 VC9:通るがcppでの実装は無視される BCC:cppのコンパイル時に多重定義扱い
// void Hoge<int>::f; //gcc3.4→too few template-parameter-list VC9:通るがcppでの実相は無視される BCC5.5:template<>宣言が必要

// hoge.cpp
void Hoge<int>::f { void f() {int専用処理}; }
といった感じです。

740:デフォルトの名無しさん
09/04/05 05:11:32
template<> class Hoge<int>::f();

テンプレートクラスの特化宣言をなぜ落とすw
テンプレートクラスの特化はちゃんと宣言する必要がある。
それが目的なんだから。

特化宣言がいらないのはそのクラスのメンバ関数。
なぜなら特化したのはクラスであってメンバ関数じゃないから。
仕様書を読んだほうがいいかも。

741:デフォルトの名無しさん
09/04/05 05:50:37
>>740
メンバが多めのテンプレートクラスの一つの関数だけを再定義、といった場合に、
教科書通りにテンプレートクラスの特化で全メンバを再定義すればいけるというのは分かるのですが、
特化したテンプレートクラスのある特定の関数だけリンカで特殊な定義に差し替えられないかと考えたのですが、
冷静に考えるとそれをコンパイラに知らせるのはかなり酷な作業の気がしてきたので、
教科書通りに全部再定義してみます。

一足飛びに変な質問をしようとして、エスパーさせてしまってすみません。

742:デフォルトの名無しさん
09/04/05 07:10:08
4桁の2進数があったとします。0001←2進数表記
それを0001→0010→0100→1000→0001→…という感じでずっと1を移動させたいん
ですがifやforなど条件分岐を使わず出来るだけ軽い処理でいい方法ありませんか?
この関数が呼び出されるたびに上記のように1を移動させていくって感じです。
<<=1でシフトさせていけば軽いしいいかなと思ったんですがそれだと1000を処理したとき
0000になってしまいます。やっぱりif入れて8より大きくなったら1にとかしかない?

743:デフォルトの名無しさん
09/04/05 07:14:21
(x << 1 ) & (x >> 3) 

744:デフォルトの名無しさん
09/04/05 10:36:51
初心者はポインタより多重ループのほうが躓きやすくない?

745:デフォルトの名無しさん
09/04/05 11:10:02
ポインタや多重ループより「躓き」の読み方の方が難しい

746:デフォルトの名無しさん
09/04/05 13:19:05
>>743
m9(^Д^)

747:デフォルトの名無しさん
09/04/05 13:28:50
x = ((x & 7) << 1) & (x >> 3)

748:デフォルトの名無しさん
09/04/05 14:00:12
x = 0;
x = (x << 1) & 16 || x = 1;

749:デフォルトの名無しさん
09/04/05 14:18:49
>>748
右辺値への代入?

750:デフォルトの名無しさん
09/04/05 14:40:38
|| は副作用完了店だお

751:デフォルトの名無しさん
09/04/05 14:42:06
15じゃない?

752:デフォルトの名無しさん
09/04/05 14:54:35
#include <stdio.h>

void main()
{
int i, x = 1;

for (i = 0; i < 10; i++) {
printf("%d:%X ", i, x);
x = ((x & 7) << 1) | (x >> 3);
}
}

0:1 1:2 2:4 3:8 4:1 5:2 6:4 7:8 8:1 9:2

753:デフォルトの名無しさん
09/04/05 14:57:43
x = ((x + x) >> (x & 4))& 15

754:デフォルトの名無しさん
09/04/05 15:02:39
>>752
7とか中途半端だなどうせなら非環境依存にしとけよ

755:デフォルトの名無しさん
09/04/05 15:17:34
>>745
躓きの「書き」を問われたら俺失点するわ。

756:デフォルトの名無しさん
09/04/05 15:25:45
簡単な文字だから今覚えてしまえば、死ぬまで忘れないだろ

757:デフォルトの名無しさん
09/04/05 15:29:31
>>751
15だ。ごめん。

758:デフォルトの名無しさん
09/04/05 15:42:21
「躓き」覚えた



3日も経てば忘れるだろうけど

759:デフォルトの名無しさん
09/04/05 16:30:25
そもそも何で足偏に質なんだ?
どの辺がつまづきなんだろう・・・。

760:デフォルトの名無しさん
09/04/05 16:32:17
x=^((x<<1)+1);

761:デフォルトの名無しさん
09/04/05 16:58:46
x = 1<<(((S++)%4)+1)
??

762:デフォルトの名無しさん
09/04/06 13:27:16
図書館でC++の本探そうかと考えてるんですが・・

図書館にあると思いますか?(・∀・)

763:デフォルトの名無しさん
09/04/06 13:32:26
うちの近所の図書館にはある

764: ◆xb8eIST5.k
09/04/06 13:50:42
そうですか!また行こうと思います(・∀・)

ところで、誰かモリタポ別けてもらえないでしょうか(・∀・ )

◆xb8eIST5.k

765:デフォルトの名無しさん
09/04/06 14:20:47
>>764

お前、厨房か?クレクレやろうは逝ってよしだ、ゴルァ

766:デフォルトの名無しさん
09/04/06 14:39:11
小学校の図書館とか、児童施設の図書コーナーとか、特定の分野に特化した図書館とかじゃなきゃ
数冊はあるんでねーの?


767:デフォルトの名無しさん
09/04/06 14:58:49
>>764
住所晒したら着払いで送ってやんよ

768:デフォルトの名無しさん
09/04/06 15:28:31
>>767

着払いでモリタポを送る!?(・∀・)

769:デフォルトの名無しさん
09/04/06 18:42:31
URLリンク(mogera.jp)

そんなことより exe が使用しているdllを調べるソフトってなんだったっけ?

770:デフォルトの名無しさん
09/04/06 18:43:45
Dependency Walker(Depends.exe)のことか

771:デフォルトの名無しさん
09/04/06 18:53:32
Linuxでデバイスとのやりとり(シリアル通信)をラップするような
ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでデバイスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?

ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。

772:デフォルトの名無しさん
09/04/06 19:09:29
Windowsでプロセス間通信)をラップするような
ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでプロセスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?

ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。

773:771
09/04/06 19:42:26
>>772
Windowsのプロセス間通信なら、
共有メモリと、Windows Messageを使うと、ユーザアプリに求めるのは
メッセージポンプだけになるし、ほぼ標準的なつくりになる気がするので、
好みなんですが。
Linuxではどうですか?


774:771
09/04/06 19:45:43
Named pipeは、よく使われますか?
ユーザアプリは、selectで待つようになるんですよね。

775:デフォルトの名無しさん
09/04/07 10:59:32
自作ソフトで使うマクロの文法を、拡張しようと思い、
lexやらyaccやらbisonやら調べ始めたのですが・・・
難しい・・・

例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが
出来るようにするサンプルを探しているのですが、見つかりません。

・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名
 を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力
 では限界なので・・・プラグイン名を追加トークンにして、ライブラリお
 任せ一発という形に出来ればと思っています。

・マクロの中で関数マクロの定義が出来るようにといいのですが、
hoge(a, b, c) = {
age; sage(a, b); uge(c);
}
hoge(1, 2, 3);
 こういうのを実現しているサンプルなどありましたら教えてください。

776:デフォルトの名無しさん
09/04/07 11:43:07
>>775
こっちのスレのほうが適当かな。

スレリンク(tech板)

777:デフォルトの名無しさん
09/04/07 12:56:10
>>776
ありがとうございます。行ってきます。

778:デフォルトの名無しさん
09/04/07 13:22:03
初歩的な質問で申し訳ないんですが

みなさんは童貞でしょうか?

779:デフォルトの名無しさん
09/04/07 13:29:35
どっちか一方しか居ないとでも思ってんだろうか。

780:デフォルトの名無しさん
09/04/07 13:53:49
フォームの中にサブフォーム?を作ってメニューのボタンを押すたびにそのサブフォームの内容を変えるようにしたいのですが
どうすればよろしいのでしょうか?

781:デフォルトの名無しさん
09/04/07 13:54:39
いきなりフォームとか言われても環境がわからんわ
どのフォーム?

782:デフォルトの名無しさん
09/04/07 14:02:03
えっとWindowsフォームでしょうか・・VisualC++使っています

783:デフォルトの名無しさん
09/04/07 14:03:59
>いきなりフォーム
ヴビ厨特有の現象です。
>サブフォーム?
このオレ用語も。

…ほらね、俺に ESP 能力なんかないでしょ。

>>780
C++/CLI なら TabControl でも使っとけ。

784:デフォルトの名無しさん
09/04/07 14:17:05
すみませんでした。
ありがとうございました。

785:デフォルトの名無しさん
09/04/07 19:30:35
>>779
どちらでもない、あるいは両方ってあり得るの?

786:デフォルトの名無しさん
09/04/07 19:40:47
>>785
「みなさんは」という集合なんだから両方は余裕であるだろ

787:デフォルトの名無しさん
09/04/07 20:29:33
>>786
はい、残念。

「童貞」は個体の属性だから、>>778は集合に対する問いかけじゃない。
集合の元に対する問いかけだ。

日本語勉強してから出直しな。


788:デフォルトの名無しさん
09/04/07 20:32:21
>>787
数学できるのかっこいー


ってお世辞言ってもらえるとでも思っているのかな?

・・・恥さらしてないで出直しな。

789:デフォルトの名無しさん
09/04/07 21:08:12
できて当たり前のことをほめられてもうれしくないだろ
788が恥さらしだということだけは確実に真理だ

790:788
09/04/07 21:54:35
>>789
>「確実に真理だ」

・・・顔 真っ赤にしちゃってかわいー

791:デフォルトの名無しさん
09/04/07 22:01:26
>>790
定番のレスしか返せないってほんとかっわいいいいwwwwww

792:790
09/04/07 22:12:06
>>791
あきらめろ。
このありさまではもう、誰が見てもお前が○け犬


793:デフォルトの名無しさん
09/04/07 22:26:27
>>788
数学?

794:デフォルトの名無しさん
09/04/08 00:38:22
>>787
「童貞」は数学用語じゃないから勝手に元と認識してはいけません

795:デフォルトの名無しさん
09/04/08 00:39:57
集合とか言い出したのは>>786なのだが。

796:デフォルトの名無しさん
09/04/08 01:02:41
>>787 童貞乙

797:デフォルトの名無しさん
09/04/08 07:03:13
童貞が煽りになると思う時点でガキすぎるw

798:デフォルトの名無しさん
09/04/08 07:07:20
本当に童貞の奴が必死ですw

799:デフォルトの名無しさん
09/04/08 09:32:35
>>787
>「童貞」は個体の属性
を不特定多数に対して問いかける間抜けさに気付けない頭の悪さを棚に上げて
>日本語勉強してから出直しな。
てのが、なんだかカッコイイですね。

800:デフォルトの名無しさん
09/04/08 11:16:42
元レスの奴と違う人間に煽られて反応したお前が負け犬だwwwww

801:デフォルトの名無しさん
09/04/08 13:54:40
>>800
違うか同じかは知らんが (よく解るなお前)、そんなことより
その「お前」ってのは誰?

802:デフォルトの名無しさん
09/04/08 13:55:58
オレオレ

803:デフォルトの名無しさん
09/04/08 14:04:13
いーや俺。

804:デフォルトの名無しさん
09/04/08 14:18:26
うんお前

805:デフォルトの名無しさん
09/04/08 15:11:57
初心者なんですが、質問させてください。
まず、BCCの無料版をDLして、メモ帳のソースをcファイルで保存しました。
それからコマンドプロンプトを使って実行しましたが、次の文章が出てexeファイルができませんでした。

'bcc32'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして
認識されていません。

そして、ソースは以下のものです。

main()
{
}


806:デフォルトの名無しさん
09/04/08 15:15:41
>>805
BCCへのパス通したか?
URLリンク(pocketstudio.jp)

807:デフォルトの名無しさん
09/04/08 15:16:09
パスが通ってない。通せ

808:デフォルトの名無しさん
09/04/08 15:21:52
パス通せよ

809:デフォルトの名無しさん
09/04/08 15:26:41
URLリンク(www.cppdrive.jp)
ここで勉強しる

810:デフォルトの名無しさん
09/04/08 15:39:14
>>806-809
やってませんでした。ありがとうございます。やってみます。

811:デフォルトの名無しさん
09/04/08 17:57:14
select関数の第一引数について

TCP/IPのソケット通信処理を作成していて、select関数を使用するつもりです。
select関数の第一引数には「集合にある記述子の中の最大値に1を足したもの」
を設定するということですが、具体的に何を設定すればよいか分かりません。

以下の場合、第一引数"nSocket"には何を設定すればよいのか教えて下さい。

FD_ZERO(&rd);
FD_SET(acceptSocket1, &rd);
FD_SET(acceptSocket2, &rd);

select(nSocket, &rd, NULL, NULL, 10);

よろしくお願いします。

812:デフォルトの名無しさん
09/04/08 18:03:41
select()に登録するソケット(=socket()の戻り値)の中で一番大きい奴に+1した値

socket()の戻り値はint型だから比較したり+1したりできるでしょ?

813:デフォルトの名無しさん
09/04/08 18:08:20
>>812

そういう意味ですか。
ありがとうございました。

814:デフォルトの名無しさん
09/04/08 18:16:27
URLリンク(hpcgi1.nifty.com)
nfds 引数は Windows Socket では未使用 (無視される)

Windowsのソケットはいろいろ癖がある

815:デフォルトの名無しさん
09/04/08 23:17:45
クラスの継承時にコンストラクタも継承するというか、
親クラスに定義されているコンストラクタをそのまま使う方法というのは、
再定義してデフォルト初期化子に渡す以外ないのでしょうか。

816:デフォルトの名無しさん
09/04/08 23:32:54
class A { int m_val; public: A(int a, int b){ m_val = a+b; } }
class B : A {}

B(1, 2);

みたいにしたいってこと?再定義しかないね。

817:デフォルトの名無しさん
09/04/08 23:41:25
>>816
了解しました

テンプレートで
class A { int m_val; public: A(int a, int b){ m_val = a+b; } }
template<class X> class B : public A { ... }
のようにして、定型の追加機能を持たせるテンプレートを作ろうとしたのですが、
どうしてもそこで引っかかってしまいまして。

818:デフォルトの名無しさん
09/04/09 02:04:45
とりあえず 童貞乙 であります!


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch