トップページ⇒tech
1001コメント316KB

【初心者歓迎】C/C++室 Ver.55【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/06/15(日) 03:03:42
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.54【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1210694402/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん2008/06/15(日) 03:04:16
おつ
0003デフォルトの名無しさん2008/06/15(日) 03:08:01
壱乙
0004デフォルトの名無しさん2008/06/15(日) 03:23:26
おついち
0005デフォルトの名無しさん2008/06/15(日) 03:25:08
乙一
0006デフォルトの名無しさん2008/06/15(日) 08:42:21
インデントの話だが・・・
俺はどっちでもおk派。VCに貼り付けてCtrl + spaceで一発解決w
0007デフォルトの名無しさん2008/06/15(日) 11:24:40
(・ω・`)1乙 ←ポニーテール

 は思いつかなかったな〜
ちょっとてst

>>6
まぁでもコピペすらしない人多いと思うよw
000872008/06/15(日) 11:30:45
あぁん俺の環境じゃ も潰れるw
f();  
   f();  
f(); 	
0009デフォルトの名無しさん2008/06/15(日) 11:40:37
連投ごめん。ちょっとレス参照を。>>8
0010デフォルトの名無しさん2008/06/15(日) 11:54:36
■>>8で書き込み時の文
   f();  
   f();  
	f(); 	

■>>8を素のIE/禁断の壷+IEで表示及びコピペした場合
 の部分が潰れずに空白になる。コピペしても通常の半角空白。
他は潰れて消える。

■>>8をjaneで表示及びコピペした場合
 の部分が潰れずに空白になる。コピペしても通常の半角空白。
 の部分はjane上では潰れずに空白になるけど、
コピペすると空白にならず、  になる。
&am;#9;は潰れて消える。



通常/専用ブラウザで読みやすくするのは全角スペースしかなさげ。
コピペしてすぐコンパイル出来るのも含めると、アップローダーしか無いね〜
0011デフォルトの名無しさん2008/06/15(日) 12:01:42
ML系やHaskellやPythonみたいにインデントに文法上の意味がある言語は大変だよなー。
そういうスレを見てきた立場からすると「どうでもいいじゃん」って思ってしまう。
0012デフォルトの名無しさん2008/06/15(日) 12:19:05
>>11
見てきたけど、Haskellスレでは全角スペース推奨、
Python宿題スレはロダ推奨で、全角スペースが使われてて、
Python初心者スレでは全角スペース(主に質問者)と が使われてるね。
0013デフォルトの名無しさん2008/06/15(日) 12:43:48
>>10
乙
> 通常/専用ブラウザで読みやすくするのは全角スペースしかなさげ。
 も表示だけなら潰れない、と読めたのだが気のせい?

> コピペしてすぐコンパイル出来るのも含めると、アップローダーしか無いね〜
これはそのようだね
0014102008/06/15(日) 13:04:58
>>13
> も表示だけなら潰れない、と読めたのだが気のせい?
ごめん素で間違えた。その通りです。
0015デフォルトの名無しさん2008/06/15(日) 14:46:16
2ch も pre コマンドを採用すればいいのにね。
メール欄に pre と書くと pre タグが使われるようにする奴。
0016デフォルトの名無しさん2008/06/15(日) 14:53:46
だな
0017デフォルトの名無しさん2008/06/15(日) 15:40:57
a=c;
b=a;
と
a=b=c;
って同じことですか?
0018デフォルトの名無しさん2008/06/15(日) 15:45:13
ちがう
0019デフォルトの名無しさん2008/06/15(日) 15:48:08
まとめるとしたら
b=a=c;だな
0020デフォルトの名無しさん2008/06/15(日) 15:54:45
厳密に考えればそれも違うけどね。
0021デフォルトの名無しさん2008/06/15(日) 16:10:05
=は左結合だから
b=a=c;⇔b=(a=c);

でも
a=cが、aにcを代入した後のものを返すか、それ以前のaを返すかは未定。
0022デフォルトの名無しさん2008/06/15(日) 16:13:30
>>20
どう違うのか教えて欲しいです
0023デフォルトの名無しさん2008/06/15(日) 16:15:14
まー、普通のプリミティブなデータ型なら、そこまで気にする必要はないだろうけどね
基本的には同じと思っていいよ
ただ、それに囚われていちゃダメ

C++ならoperatorでやりたい放題だし
0024デフォルトの名無しさん2008/06/15(日) 16:15:38
>>22
20じゃないけど、
「ユーザー定義型のoperator=()の戻り値が、必ずしも*thisになってるとは限らない」
というのを考慮してるのでは。
0025デフォルトの名無しさん2008/06/15(日) 16:16:57
アセンブリの話する気か?
0026デフォルトの名無しさん2008/06/15(日) 16:34:24
aがvolatile指定されていた場合、
a=c; b=a; はaに対してwriteとreadが1回ずつ発生するが、
b=a=c; はaからreadする保証が無い。

ってことか?
0027デフォルトの名無しさん2008/06/15(日) 17:42:39
保証されると思う。
0028デフォルトの名無しさん2008/06/15(日) 17:46:39
>>25
できるよ。
以上。
↓次の方どうぞ
0029デフォルトの名無しさん2008/06/15(日) 17:47:38
>>21
何を言っとるんだお前は
0030デフォルトの名無しさん2008/06/15(日) 17:51:54
>>21
代入した値、つまりはcと同じ
を返すに決まってるだろ個の貸す
0031デフォルトの名無しさん2008/06/15(日) 18:08:16
CとC++を学び、そろそろGUIでゲームを作りたいのですが、
CかC++ベースでGUIプログラムを作るにはどうすればいいのでしょうか?
幅広く使用されている方法が望ましいです。
0032デフォルトの名無しさん2008/06/15(日) 18:10:03
>>31
directXのラッパーライブラリあたりでも使えばいいんじゃない?
dxlibとかyanesdkとか
あとSDLとかでも
0033デフォルトの名無しさん2008/06/15(日) 18:30:44
>>23 >>26はちゃんとわかってるな。
論理上保障されないという事態が起きるのは、
bがスタティックな変数でかつ割り込みが発生してaを書き換えた場合だけ。
スレッドが絡むとさらにカオスになるから触れないでおこう。
それ以外では気にすることではない。
0034デフォルトの名無しさん2008/06/15(日) 18:31:51
>bがスタティックな変数でかつ割り込みが発生してaを書き換えた場合だけ。 
aがスタティックな変数でかつ割り込みが発生してaを書き換えた場合だけ。 

ミスった
0035デフォルトの名無しさん2008/06/15(日) 18:43:22
aがレジスタの場合も動作が違ってくる。
組み込み系の話だけど。
0036デフォルトの名無しさん2008/06/15(日) 18:46:45
ああCPUその他のハードウェアによってはvolatileが
実現できない場合があるな
0037デフォルトの名無しさん2008/06/15(日) 18:47:03
=演算子の式の値をどうコンパイラが解釈してるかなんだよね
VC++2008の場合はvolatile bでbからロードしなおしていた
0038デフォルトの名無しさん2008/06/15(日) 18:58:25
>>32
どもども、調べてみます。DirectXが王道ですかね
0039デフォルトの名無しさん2008/06/15(日) 19:06:23
初心者向けのゲーム作る用の本とかは店においてるのはよく見るな
0040デフォルトの名無しさん2008/06/15(日) 19:12:25
>>17の俺は勉強始めたての素人で
今はまだ皆さんの回答の意味が理解できなさそうなのでとりあえず
a=b=cじゃなくてb=a=cだったら
同じことではないけどだいたい同じ
とだけ覚えておきます
ありがとうございました
0041デフォルトの名無しさん2008/06/15(日) 19:19:21
今勉強したての素人から脱したんだよ。
0042デフォルトの名無しさん2008/06/15(日) 19:23:01
普通にやってたら、この程度のことまず気にしてねーもんなw
まー、俺は=演算子を1行に複数に書くこと自体やらないが
0043デフォルトの名無しさん2008/06/15(日) 19:42:15
質問です
環境はWindowsXP,言語はCです.

system関数(またはそれに近い関数)を使って別のプログラムを時間制限付きで起動させたいです
例えば,a.exeというプログラムを実行させて,30秒たっても処理が完了していなかったらa.exeを強制終了させたいです.
なにか良い方法はありますか
0044デフォルトの名無しさん2008/06/15(日) 19:50:17
>>43
CreateProcess / TerminateProcess
0045デフォルトの名無しさん2008/06/15(日) 20:56:40
>>43-44
内容にもよるけど、行儀のいい方法では無いな。
0046デフォルトの名無しさん2008/06/15(日) 21:40:58
でも行儀のいい方法は書かないんだね。
0047デフォルトの名無しさん2008/06/15(日) 21:43:40
処理が完了という判断は、a.exeのプロセスが生きているかどうかだけでいいのか?
0048432008/06/15(日) 22:20:34
>>47
すみません,書き忘れました.
a.exe は処理が完了したら終了します.

>>44
どもありがとうございます
調べてみます
0049デフォルトの名無しさん2008/06/15(日) 22:25:59
>>46
強制終了って前提条件が既に行儀悪いからな。
0050デフォルトの名無しさん2008/06/15(日) 23:16:20
普通は数秒で終わるものがバグとかで終了しなかった場合、じゃないの?
俺はそう思ったけど。
0051デフォルトの名無しさん2008/06/15(日) 23:18:47
相手がコンソールプログラムならGenerateConsoleCtrlEventの方が
少しはマシかな。
0052デフォルトの名無しさん2008/06/16(月) 02:23:19
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6924.txt
このポインタについてなんですが
p->nextには何のアドレスも入ってないのに
何で次の人のアドレスを指し示すことができるんでしょうか?
あるいはどこかでp->nextに何かの値が入ってるんでしょうか?
0053デフォルトの名無しさん2008/06/16(月) 02:23:19
#define offsetof(type, member) ((size_t)&((type*)0)->member)

このマクロの(type*)0->memberはどういう意味なのでしょうか?
0番地のtype型のメンバ変数memberでよいのでしょうか?
0054デフォルトの名無しさん2008/06/16(月) 02:28:41
>>53
そのとおりなんだけど、実際にはそんなものは存在しなくて、直後にアドレスを size_t に
無理やり変更することで offsetof() が返すべき値を取り出している、というところまで
合わせて意味を持つ。コンパイラの実装を知っている立場でなければ、真似しちゃいけない。
0055デフォルトの名無しさん2008/06/16(月) 02:35:18
>>52
よく読んでないけど last->next=p で入れてるんじゃね
0056デフォルトの名無しさん2008/06/16(月) 03:40:04
>>52
last->next=p;
last=p;
と分ければわかりやすいでしょうか。
0057デフォルトの名無しさん2008/06/16(月) 11:50:32
>>55-56
ありがとうございます
もう少しで分かりそうなんでもうちょっと頑張ります
0058デフォルトの名無しさん2008/06/16(月) 16:11:09
事情によりコードはupできなくて申し訳ないのですが、質問させて下さい。
ヘッダで宣言したメンバ関数を.ccで実装するとき、いくつかの関数でmultiple definitionと言われてコンパイルできません。
インクルードガードはもちろんかけています。例えば、
[foo.h]
#ifndef _FOO_H_
#define _FOO_H_

class foo{
private:
int a,b,c;
pulic
int getA();
int getB();
int getC();
}

#endif

[foo.cc]
#include "foo.h"

int foo::getA(){return a;}
int foo::getB(){return b;}
int foo::getC(){return c;}
とかなっているときに、getAはOKなのにgetBとgetCのみmultiple definitionと言われるような状況です。
他にも、引数なしのコンストラクタはOKなのに、引数付きでオーバーロードしたコンストラクタのみ
mutiple definitonと言われたりします。
これらの現象は全て、問題の関数実装時にinline宣言すると消えます。これはどういう問題なのでしょうか。
0059582008/06/16(月) 16:12:37
すみません>>58で、
public
のあとに:が抜けてました。
実際のコードではそういったミスはありません。
0060デフォルトの名無しさん2008/06/16(月) 16:17:19
>>58
現象を再現できる最低限の断片を作って張ってくれ。
尤も、その過程で原因が判ることもしばしばだが。

例えば、getA()がエラーにならないのは使ってないからじゃないかと思うが>58だけでは判断できん。
0061582008/06/16(月) 16:33:55
>>60
すみませんが今すぐは作れないので、後でまた張りに来たいと思います。
0062デフォルトの名無しさん2008/06/16(月) 17:23:38
Cから呼び出したDLL内でEXCEPTION_ACCESS_VIOLATION (0xc0000005)
が発生した場合、それをC側から補足できますでしょうか?
例外が発生したことを上の関数に返したいのですが
難しいでしょうか?

よろしくお願いいたします。
0063デフォルトの名無しさん2008/06/16(月) 17:42:36
>>62
Windowsの話なら、WinAPIスレで過去に話題になってたかと。
0064デフォルトの名無しさん2008/06/16(月) 17:48:36
>>63
ありがとうございます。APIスレにいってきます。
0065582008/06/16(月) 19:27:04
>>60
色々やってたら解決しました。
どうも元々ひとつだったヘッダファイルを細分化したときに、makefileの方で変なことをやってしまったのが原因ぽいです。
どうもありがとうございました。
0066デフォルトの名無しさん2008/06/16(月) 20:05:22
なんでカウント変数にiを使うのですか?
なにかの略なんですか?
0067デフォルトの名無しさん2008/06/16(月) 20:07:00
iterator
0068デフォルトの名無しさん2008/06/16(月) 20:10:53
indexの説もあったような
0069デフォルトの名無しさん2008/06/16(月) 20:13:03
特に理由は無いけどindexだと思ってた。idxってのもよくあるし
0070デフォルトの名無しさん2008/06/16(月) 20:15:12
古代FORTRANで、一文字トークンにaからhが予約されていて
ユーザーが自由に使えるものがiからしかなかったのがそもそもの由来。
0071デフォルトの名無しさん2008/06/16(月) 20:17:04
それたまに聞くけど、
  n
 Σa_i
 i=1
とか数学で使う際の i って
FORTRAN 以降で広まったものなのか?
0072デフォルトの名無しさん2008/06/16(月) 20:22:38
古代FORTRANの場合宣言なしで使える変数があって、
I,J,K,L,M,Nあたりが宣言なしで整数、
それ以外が宣言なしで実数だった。
0073デフォルトの名無しさん2008/06/16(月) 20:24:29
ありがとうございます
0074デフォルトの名無しさん2008/06/16(月) 20:56:52
>>71
まさか。
もっと昔から使われてるよ。
0075デフォルトの名無しさん2008/06/16(月) 20:57:14
>>72
そもそも整数がその範囲に割り当てられた理由もあるんじゃね?
0076デフォルトの名無しさん2008/06/16(月) 20:57:48
>>74
ですよねー。
0077デフォルトの名無しさん2008/06/16(月) 20:58:55
FORTRAN は数式を扱うことを目的に作られたから
イテレーションによく使われていた i から始まり、
整数値としてよく使われていた n までを整数にした、
と考えるのが自然な気がするよ。
0078デフォルトの名無しさん2008/06/16(月) 22:10:58
FORTRANのiはintegerのiだな。
0079デフォルトの名無しさん2008/06/16(月) 22:16:35
数学で使われる方のiがintegerのiとは考えんのかね。
0080デフォルトの名無しさん2008/06/16(月) 22:17:57
indexのiにきまってるだろ。
0081デフォルトの名無しさん2008/06/16(月) 22:24:20
H の後に I があるなんてJokeだよ
0082デフォルトの名無しさん2008/06/17(火) 01:00:56
LinuxもしくはOS Xでgccを使った場合の質問です。

- /usr/local/lib/libFOO.a
- bar.cxx

の2つがあり、bar.oとlibFOO.aを合体させて、
libbar.soというのを作りたいと思っています。
(libFOO.aも共有ライブラリの中に組み込んでしまいたい)
この場合、

$ g++ bar.cxx -o bar.o
したあとに、どのようにすれば良いのでしょうか。
0083デフォルトの名無しさん2008/06/17(火) 01:23:06
マニュアルを読めばいいと思うよ
0084822008/06/17(火) 01:23:16
なんでそんなことをする必要があるかと言うと、
色々なライブラリを必要に応じて読み込むソフトがありまして、
そいつに自作のライブラリを読み込ませるためには、
必ず共有ライブラリじゃないと駄目なんです。

なので、libFOO.aを読み込ませる場合には、
一回自分で共有ライブラリを作らないといけない、と。
0085デフォルトの名無しさん2008/06/17(火) 01:32:25
>>84
分かりました、マニュアルを読んでくさい
0086デフォルトの名無しさん2008/06/17(火) 04:26:59
>>84
http://www.google.com/search?q=共有ライブラリ gcc
0087デフォルトの名無しさん2008/06/17(火) 08:39:42
>>81
HしてもIがなかったらJuniorが生まれてこないとは考えんのかね。
0088デフォルトの名無しさん2008/06/17(火) 12:57:29
>>87
望まれないJuniorっていう不幸もあるからなぁ
0089デフォルトの名無しさん2008/06/17(火) 13:19:32
Knockが足りなかったんだろう
0090デフォルトの名無しさん2008/06/17(火) 13:21:14
つまんないからやめろ
0091デフォルトの名無しさん2008/06/17(火) 19:06:29
抽象的な質問で申し訳ないですが

あるクラスのメンバ関数を実装するとき、内部の処理をベタ書きすると
長くなるので、関数化したいことは良くあると思います。

このとき、その関数化したい処理そのものは、もとのメンバ関数の処理に比べて
低級な処理なので、同じクラスのメンバ関数として定義するのには違和感があります。
かといって、専用のクラスを作るほどではないと感じる場合があります。
こういう場合、どういった形で関数を定義するべきでしょうか。

例えば、積分をするためのループ処理1ステップ分を関数化して切り出したい場合などです。
0092デフォルトの名無しさん2008/06/17(火) 19:07:38
よくわからんがprivate関数じゃだめなの?
0093デフォルトの名無しさん2008/06/17(火) 19:09:35
アクセス制御で外からは見えない関数にすればいいよね
0094デフォルトの名無しさん2008/06/17(火) 19:14:42
内部クラスの静的メソッドでいいよ。
0095デフォルトの名無しさん2008/06/17(火) 19:31:17
ttp://www.cmagazine.jp/
C言語の本を買ったのですがサンプルソースのあるページにアクセスできません?
アク禁になっているのか知りたいので他の人アクセスできるか試してもらえませんか;;
0096デフォルトの名無しさん2008/06/17(火) 19:42:58
>>91
自分専用ライブラリを放り込んでおく場所を決めておくと良いよ。
0097デフォルトの名無しさん2008/06/17(火) 19:43:16
Cマガ休刊したんじゃないっけ?
0098デフォルトの名無しさん2008/06/17(火) 19:47:50
>>95
こんなときこそあれだ
http://web.archive.org/web/20060423121809/www.cmagazine.jp/src/index.html
0099デフォルトの名無しさん2008/06/17(火) 20:01:15
>>98
そのサイトもアクセスできません・・・。
スレ違いですが質問させてください。
代わりにソースプログラムを配布しているサイトご存じないですか?
0100デフォルトの名無しさん2008/06/17(火) 20:03:59
>>98 で落とせるけど。
文字コードは EUC な。
0101デフォルトの名無しさん2008/06/17(火) 20:10:42
>>100
ダウンロードできました!!
ありがとうございます><
■ このスレッドは過去ログ倉庫に格納されています