スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/17(水) 15:41:48過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0730デフォルトの名無しさん
2008/12/21(日) 12:42:510731デフォルトの名無しさん
2008/12/21(日) 12:46:120732デフォルトの名無しさん
2008/12/21(日) 12:46:370733デフォルトの名無しさん
2008/12/21(日) 12:50:34つうか、例えば横512ドットだとして
左は、0 <= x < 256
右は、256 <= x < 512
とすれば、元から境目に存在はしない
0734デフォルトの名無しさん
2008/12/21(日) 12:56:530735デフォルトの名無しさん
2008/12/21(日) 13:21:21////////////////////////////////////////////////////////////////////////////////////////////////
// 指定された2つの RECT構造体が、重なっているか判定する
// 重なっていると true
// かさなっていないと false を返す。
bool RectLap( const RECT *a, const RECT *b )
{
// 改良失敗
// if( (a->top < b->bottom) && (a->bottom < b->top) && (a->left<b->right) && (a->right>b->left) )
// {
// return true;
// }
if( a->top < b->bottom )
if( a->bottom > b->top )
if( a->left < b->right )
if( a->right > b->left )
return true;
return false;
}
となります
改良の余地があればご指摘お願いします
0736デフォルトの名無しさん
2008/12/21(日) 13:41:57それで重いってことは、よほど沢山の弾があるのか?
0737デフォルトの名無しさん
2008/12/21(日) 13:53:01別スレッドで処理しているのですが、
CPUが割り当てられなくて処理落ちしてるとかも
考えられますか?
0738デフォルトの名無しさん
2008/12/21(日) 13:57:12別スレッドにするメリットってあんの?
0739デフォルトの名無しさん
2008/12/21(日) 14:00:43重たいわけもないでして
昔作ったやつは100発でもいけたので
不思議なのです
変えたといえばコンパイラだけですが
VC++6.0 -> VC++ 2008 Express にしただけです
0740デフォルトの名無しさん
2008/12/21(日) 14:02:09スレッドを使った理由は技術的好奇心だけです
元の1スレッドに戻してみます
0741デフォルトの名無しさん
2008/12/21(日) 14:08:59リリースモードでコンパイルしたら実用レベルになりました
スレ汚しすいません
0742デフォルトの名無しさん
2008/12/21(日) 16:01:12VC++ 2008 ExpressをPCに導入したのですが、
計算をさせて、結果を表示するプログラムを作って実行させたら
結果が出力される前にDOS窓が閉じてしまいます。
どうしてでしょうか?
0743デフォルトの名無しさん
2008/12/21(日) 16:05:28デバッグしないでいいならCtrl-F5(デバッグしないで実行)で。
それ以外にもとめる方法はいくつかあるが。
0744デフォルトの名無しさん
2008/12/21(日) 16:06:39あきらめろ
0745デフォルトの名無しさん
2008/12/21(日) 16:14:07ご親切にありがとうございました!
出力結果を無事に見ることができましたmm
0746デフォルトの名無しさん
2008/12/21(日) 16:22:200747デフォルトの名無しさん
2008/12/21(日) 16:49:43こういう場合は
1、グローバル変数を使う
2、ポインタで参照渡し
3、1つの関数を関数をいくつかに分ける
4、関数内で返したい値を1つの値に纏めた後、呼び出し先でまとめられた値を復元する
どれがスマート?
0748デフォルトの名無しさん
2008/12/21(日) 17:19:362 → どうしても同時に2つ返す必要があるのであれば、普通はそうする
3 → 同時に2つ値を返す必然性がないのであれば、そうする
4 → よほど制限された状況でなければあり得ない解決法
5、構造体にして返す。コピーのコストに見合えばアリ
0749デフォルトの名無しさん
2008/12/21(日) 18:08:53構造体に値を入れて、その入れた内容をポインタにキャストしたのですが
出来ませんでした(何も渡すことが出来なかった)
char *test;
test = (char *)&kouzoutai;
上記のようにしても駄目でした。
構造体をポインタにキャストする事は出来るのでしょうか?
0750デフォルトの名無しさん
2008/12/21(日) 18:13:110751デフォルトの名無しさん
2008/12/21(日) 19:14:24構造体ないに文字列持ってたんだろうな、それを直接(char * )でキャストしようとしたんだろ?
0752デフォルトの名無しさん
2008/12/21(日) 20:05:47マクロって何かありますか?
それが定義されていればセキュアな関数を使うようにしたいのです。
0753デフォルトの名無しさん
2008/12/21(日) 20:05:57kouzoutai の型が分からない限り答えようがない
0754デフォルトの名無しさん
2008/12/21(日) 20:30:29処理系名のマクロじゃないかな?
0755デフォルトの名無しさん
2008/12/21(日) 21:17:43一般的な方法はまだない。Open WatcomとVisual C++を個別にマクロで検出するしかない。
0756デフォルトの名無しさん
2008/12/21(日) 21:55:040757デフォルトの名無しさん
2008/12/21(日) 22:23:21_MSC_VER >= 1400
で判別してるものがあったのですが、これで大丈夫ですかね
0758デフォルトの名無しさん
2008/12/21(日) 23:29:530759デフォルトの名無しさん
2008/12/21(日) 23:32:190760デフォルトの名無しさん
2008/12/22(月) 15:54:01ご存知の方いないでしょうか?
メモリマップトファイル上にツリーを作って、複数のプロセスから参照したいと思っています。
0761デフォルトの名無しさん
2008/12/22(月) 16:23:15意味がわからん
0762デフォルトの名無しさん
2008/12/22(月) 16:29:33バイナリツリーが欲しい」
以外の解釈が可能か?
いや俺は見た事ないし、書くとしたら大変そうだが。
0763デフォルトの名無しさん
2008/12/22(月) 16:34:49いいだけじゃないの?
各データは固定長だろうから、それこそ配列にして
使用済みかどうかのフラグを持つだけでもいいし
0764デフォルトの名無しさん
2008/12/22(月) 16:40:25理解しているのはC言語の基礎だけです
DOS窓で動く、ジャンケンゲーム、数当て(BIGorSMALL)、石取りゲーム
くらいは作れるようになりました
この後一体どういう学習をすれば、Windows上で動く簡単なツールなんかを作れるようになりますか?
「GUI(?)をつくりたい」って言えばいいんですかね?
環境はWinXPhome/VC++2008
Windowsフォームアプリケーション?みたいなのもやってみたんですがさっぱりです
とりあえず、ウインドウを表示して、次に画像なんかを表示して〜
みたいなものはどうやってやればいいですか?
分かりにくかったらすいません宜しくお願いします
0765デフォルトの名無しさん
2008/12/22(月) 17:03:09C言語でWindowsAPIを使えばいい
Win32API,ウィンドウメッセージなんかでぐぐるといいが、
長いし(書くときはコピペするかウィザードで生成すればいいが)、少しとっつきにくいかもしれない
VCを使っているのなら、新規プロジェクト作成のウィザードから
Windowsアプリケーションを使うのもいい
どういうものを作りたいかによって選ぶべきと思う
0766デフォルトの名無しさん
2008/12/22(月) 17:05:05あなたの気のおもむくままに
0767デフォルトの名無しさん
2008/12/22(月) 17:05:59分かるには分かるが
面倒くせぇ
0768デフォルトの名無しさん
2008/12/22(月) 17:06:45回答ありがとうございます
Win32API?と、VCの機能を調べてみます
0769デフォルトの名無しさん
2008/12/22(月) 20:31:590770デフォルトの名無しさん
2008/12/22(月) 21:44:39CとC++は同じものだと考えてとりあえずは問題ない
というのも、C++はbetter Cという考えがあるから
「C++ではない純粋なC」でないといけないというのは
ちょっと特殊
0771デフォルトの名無しさん
2008/12/22(月) 21:47:21ファイルの拡張子を .c にすれば C になるはず
0772デフォルトの名無しさん
2008/12/22(月) 22:50:56なんでアドレスとか表示する意味があるんだ?
どうして、ポインターで指す必要があるんだ?
間接的にオブジェクトに代入してなんの意味がある?
ビット数の表示に意味なんてあるんだろうか?
いまやってることに、意味がない気がして・・
今、すげー・・やる気を失ってるところです・・
だれか・・元気付けてください・・
0773デフォルトの名無しさん
2008/12/22(月) 22:55:00すごく使うことになるのでとりあえず使い方をマスターしておけ
0774デフォルトの名無しさん
2008/12/22(月) 22:57:09お前の家の住所に意味はないのか?
例えば、「お前の家が見たい」って言われたとして、家ごとコピーして渡さなくても住所教えればいいだろ。そういうことだ。
0775デフォルトの名無しさん
2008/12/22(月) 22:57:30どう使うのか・・こう・・具体的に説明してくれるとありがたいです・・
0776デフォルトの名無しさん
2008/12/22(月) 22:58:01そ・・そういうことか!!!!!!!!
0777デフォルトの名無しさん
2008/12/22(月) 22:58:52なんでかっていうとめんどくさいからググレ
でも必要だから絶対覚えろ
・・・これは流石にひどいか
http://www7b.biglobe.ne.jp/robe/cpphtml/
ここのポインタの部分だけでもみるといいよ
C言語だったとしても内容変わらんから
0778デフォルトの名無しさん
2008/12/22(月) 23:23:27c=getc();
これで合ってると思うんですが、printf("c=%d", c);で表示すると入力したものじゃなくて変なのが入るんですがなぜですか?
0779デフォルトの名無しさん
2008/12/22(月) 23:25:02%cだ。
それだと。文字コードが表示される。
0780デフォルトの名無しさん
2008/12/23(火) 00:01:22100000個の要素を持った配列を渡すとき、「ちょっとこれサイズでかくね?」って思うでしょ
でもポインタ1個渡せば、あとはポインタの位置をずらしていくだけで配列を参照できるの
ねっ簡単でしょ
以上、ヴァンプ将軍のさっと簡単ハッキングでした
0781デフォルトの名無しさん
2008/12/23(火) 02:49:18先日Cの入門書を一通り学習し終えたのでwindowsアプリに手を出し始めました
しかしwindowsアプリではCの入門書でいうところの最初に学んだprintfやscanfのようなものが一切出てこず、違うものばかりです
ではそういったCの入門書ででてきてwindowsアプリの入門書では全くでてこない↑等のものはどこで使うのでしょうか?
また、書店にいくとCの関数辞典のようなものがありますがそういった書籍にのっているものも上記のようにwindowsアプリではでてこないものばかりなのでしょうか?
0782デフォルトの名無しさん
2008/12/23(火) 02:59:310783デフォルトの名無しさん
2008/12/23(火) 03:01:140784デフォルトの名無しさん
2008/12/23(火) 03:04:27Windowsでも一応コンソールアプリがあるけど、ふつーはprintf()とか標準入出力系の
関数は使いません。
それ以外の、ファイル入出力とか、文字種のチェックとか数学系とか時間計とかは使います。
ファイルにロックとかけるとか、ミリ秒単位で時間を扱うとか、ちょっとこった使い方をすると
WindowsのAPIとかを使うことになります。
0785デフォルトの名無しさん
2008/12/23(火) 03:09:27ありがとう、入門書で最初にやったことがいきなり不要扱いだったんで居間まで何やってたんだろう('A`)と少し不安になりました
プログラムを勉強するなら関数辞典は買っておけとよく言われるのですがこの関数辞典とは一般にC/C++のものをさすのでしょうか?
0786デフォルトの名無しさん
2008/12/23(火) 03:17:45そうだと思うけど、買う必要はないかな?
Cの標準関数の説明なら、ネットで探せばみつかるし。
http://www.bohyoh.com/CandCPP/C/Library/index.html
こういうやつとか。
0787デフォルトの名無しさん
2008/12/23(火) 03:23:32お気に入りにいれました
しかし結構何のことか全くわからん内容の関数とかあるんだなぁ・・・
0788デフォルトの名無しさん
2008/12/23(火) 03:30:22本を買うならリファレンスより、何とかクックブックとか何とかの技500とかみたいに、短いサンプルが
たくさん乗ってるやつのやつのほうがいいけど、オンラインでそういうやつあるかな?
0789デフォルトの名無しさん
2008/12/23(火) 08:59:44どうすればよいのでしょうか
敵の位置を変数「enemyposx」に入れてます
if(enemyposx<79.0)
{
enemyposx+=0.8;
}
if(enemyposx>113.0)
{
enemyposx-=0.8;
}
else
{
enemyposx+=0.8;
}
0790デフォルトの名無しさん
2008/12/23(火) 09:09:510791デフォルトの名無しさん
2008/12/23(火) 10:00:28if( x < 79 ) diff = +0.8 ;
if( x > 113 ) diff = -0.8;
x += diff;
0792デフォルトの名無しさん
2008/12/23(火) 10:17:59> ねっ簡単でしょ
ボブ! ボブじゃないか!
0793デフォルトの名無しさん
2008/12/23(火) 11:38:56できました。ありがとうございました
0794デフォルトの名無しさん
2008/12/23(火) 12:01:20でも解析とか始めるようになってデバッガーとか使い出してからやっと理解できたわ
0795769
2008/12/23(火) 15:13:54CLRオプションでコンパイルできないと言われましたがどうすればいいでしょうか?
0796デフォルトの名無しさん
2008/12/23(火) 16:10:58以下をご存じの方がいらっしゃいましたら、ご教授頂けましたらありがたいです。
環境はcygwin + g++です。将来的に linux でも使いたいと思っています。
異なる2台のHDDに各々数10GBのデータが入っています。
両方の HDD から、一度に512MB 程度づつ、データをメモリに読み込み、
逐次比較をしていくようなプログラムを作っているます。
HDD1台ごとに、一つのスレッドを作成し、スレッド内で HDD->メモリの
DMA 転送を行いつつ、dual buffer 構成にして別のスレッドで比較をしようと考えています。
HDD からメモリへDMA 転送をさせる方法を知りたいのですが、
普通に fread 文で読み込めば、勝手にDMA転送をしてくれるものなのでしょうか?
0797デフォルトの名無しさん
2008/12/23(火) 16:16:33プロジェクト作る時はCLRじゃなくてWin32のほうで
0798デフォルトの名無しさん
2008/12/23(火) 16:39:58DMA するかどうかはプログラミングの外の話じゃないかな。
それとメモリに読み込むより mmap した方が良いんじゃね?
0799デフォルトの名無しさん
2008/12/23(火) 18:15:48int a[n][2]という配列を作りたいのですが、
int **a;
a = (int *)malloc(n * sizeof(int *));
for(i = 0; i < n; i++){
a[i] = (int *)malloc(2 * sizeof(int));
}
でいいのでしょうか?
0800デフォルトの名無しさん
2008/12/23(火) 18:20:56int (*a)[2]で確保一回で済ますというのもあるな
0801デフォルトの名無しさん
2008/12/23(火) 18:46:49int (*a)[3];
a = (int *)malloc(n * sizeof(*a));
これでいいのでしょうか?
0802デフォルトの名無しさん
2008/12/23(火) 18:50:10Javaのほうが先にやってた俺は「参照が具体的な数値になったようなもんか」と考えたっけな
0803デフォルトの名無しさん
2008/12/23(火) 20:15:590804デフォルトの名無しさん
2008/12/23(火) 21:11:49ある程度コンピュータを知ってれば、アドレスのことでしょ?って思って
正確ではないにしろ、理解に詰まることはないんだけどね
Javaの参照とポインタは言葉通り、ちょっとニュアンスが違う。
そのあたりが"ポインタ"で詰まる理由のひとつかもね
0805デフォルトの名無しさん
2008/12/23(火) 21:52:39int (*a)[3];
a = (int (*)[3])malloc(sizeof(int [3]) * n);
だな
0806デフォルトの名無しさん
2008/12/23(火) 22:20:22プロジェクトの消去する方法がわかりません
ヘルプとかで、いろいろ探したりもしてみたんですが、わかりませんでした
どなたか、教えてください
0807デフォルトの名無しさん
2008/12/23(火) 22:36:04ソリューションエクスプローラーで右クリックしてメニューで削除を選ぶと削除される。
0808デフォルトの名無しさん
2008/12/23(火) 22:39:07でも、消えない・・
0809デフォルトの名無しさん
2008/12/23(火) 22:39:53ありがとうございました。
0810デフォルトの名無しさん
2008/12/23(火) 23:12:55も間違ってるよな
0811デフォルトの名無しさん
2008/12/24(水) 10:02:22http://www.asahi-net.or.jp/~yf8k-kbys/newcpp2.htmlのサイトにある、
//hello.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "hello" << endl;
}
をコンパイルしたのですが、
MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
とエラーが表示されコンパイルできません。
こんな初歩的な質問ですみませんが、どうすればコンパイルできますか?
またエラーの意味も出来れば教えてください。
0812デフォルトの名無しさん
2008/12/24(水) 10:16:38「Windows アプリケーションだっていうから
WinMain() を呼び出そうとしたら
そんな関数なかった」
解決法:
コンソールアプリケーションとしてプロジェクト作り直す。
0813デフォルトの名無しさん
2008/12/24(水) 10:24:37解決法とエラーの意味ありがとうございます!
無事コンパイルできました。
ここで疑問ですが、
win32コンソールアプリケーションとwin32プロジェクトの違いはなんなのでしょうか?
よければ教えていただきたいです。
0814デフォルトの名無しさん
2008/12/24(水) 10:27:100815デフォルトの名無しさん
2008/12/24(水) 10:28:55返答ありがとうございます
0816デフォルトの名無しさん
2008/12/24(水) 10:34:27win32プロジェクトはイベント割り込みを考慮して作る
たとえば「ウィンドウを再描画してくれ」といってきたりする(以下、イベント)
このようなイベントが起きたときにどう処理するかをプログラムしていく
だが、コンソールにはイベントがない
0817デフォルトの名無しさん
2008/12/24(水) 10:35:560818デフォルトの名無しさん
2008/12/24(水) 10:41:08なるほど、大まかに理解することが出来ました。
つまりは、イベントを考慮する場合はwin32プロジェクトで作れということですね
返答ありがとうございました
0819デフォルトの名無しさん
2008/12/24(水) 11:00:20現在http://www.asahi-net.or.jp/~yf8k-kbys/newcpp3.htmlのプログラム
//hello2.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "こんにちは。私はコンピュータです。" <<endl;
cout << "あなたの名前を入力してください。" <<endl;
cin >> name;
cout<<name<<"さん。よろしく。"<<endl;
}
をコンパイルし、
画面を表示し、入力することにも一応成功しているのですが、
名前「小林」を入力し、エンターを押すと同時に「小林さん。よろしく」の表示を見るまもなく、
表示されると同時にウインドウが消えてしまいます。
これは正常な動作でしょうか?
0820デフォルトの名無しさん
2008/12/24(水) 11:10:59正常ですよ
0821デフォルトの名無しさん
2008/12/24(水) 11:12:22正常でしたか。安心しました。
回答ありがとうございます
0822デフォルトの名無しさん
2008/12/24(水) 11:13:34ところで、int main()と宣言しておきながらintを返さないサンプルを掲示しているような
ヘッポコサイトは参考にしない方がいいです。
0823デフォルトの名無しさん
2008/12/24(水) 11:31:43それ以前だと未定義だっけ?
>>819
デバッグなしで実行 (Ctrl+F5) すると
終了時に一時停止する。
>>822
>あなたの反応速度が遅いだけ
イミフ
0824デフォルトの名無しさん
2008/12/24(水) 11:34:32>>デバッグなしで実行 (Ctrl+F5) すると 終了時に一時停止する。
確かに一時停止しました!!参考になります
0825デフォルトの名無しさん
2008/12/24(水) 18:06:50VC6.0時代は
for(int i = 0; i < 10; ++i)
{
//いろいろ
}
printf("%d", i);
とすることができましたが、VC9.0ではprintfのところではすでにiが無効になってしまいますよね。
これって、C/C++が昔からこだわっていた「互換性を保つ」に反している気がするのですが、どうなのでしょうか?
VC6.0時代の解釈がC++の言語仕様上間違っていたので、直したとかなんでしょうか?
0826デフォルトの名無しさん
2008/12/24(水) 18:11:18VC6時代にはまだ正式な規格じゃなかったから。
.NET(2002)から対応したが、デフォルトではVC6互換だった。
2005からデフォルトがISO準拠になったが、プロジェクトのプロパティのC/C++ 言語の
for ループ スコープの強制準拠をいいえにすれば同じ動作になる。
0827デフォルトの名無しさん
2008/12/24(水) 18:14:45C++の最初の定義ではVC6.0の仕様だった。
その後変更になった。
0828デフォルトの名無しさん
2008/12/24(水) 18:54:22ありがとうございます。
良くわかりました
0829デフォルトの名無しさん
2008/12/24(水) 19:40:45このようなプログラムの記述でもよい?というかどういう意味なのでしょうか?
よろしくお願い致します。
1.
(kata)自作関数()
戻りの型を”()で閉じてる”上に関数との間に”スペース”がありません。
ちなみにkataには、変数でvoidが入ります。後半の()はvoid型なのに。
2.
rrom.abc[0].ddd[0]
ピリオドが二つあるのですが、これは一体何を意味しているのでしょうか?
構造体かと思いましたが、そのあとにまたピリオドがあって、構造体の構造体?
3.
struct destr s_ssss;
struct destr aaaa;
void aa_a;
void aa_b;
char dd_d;
といった文があったのですが、1行目でstructを宣言しておきながら;してる意味は?
そのあとにもまた;で終了して、次の行からは構造体の中身ともおわれしき代入があります。
{}で閉じる必要はないのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています