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

スレを勃てるまでもないC/C++の質問はここで 4

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2008/09/17(水) 15:41:48
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもない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/
0811デフォルトの名無しさん2008/12/24(水) 10:02:22
Visual C++を使っています。
http://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
>>812
解決法とエラーの意味ありがとうございます!
無事コンパイルできました。

ここで疑問ですが、
win32コンソールアプリケーションとwin32プロジェクトの違いはなんなのでしょうか?
よければ教えていただきたいです。
0814デフォルトの名無しさん2008/12/24(水) 10:27:10
Windowsアプリケーションにはメッセージループがあるだろ
0815デフォルトの名無しさん2008/12/24(水) 10:28:55
>>814
返答ありがとうございます
0816デフォルトの名無しさん2008/12/24(水) 10:34:27
>>813
win32プロジェクトはイベント割り込みを考慮して作る
たとえば「ウィンドウを再描画してくれ」といってきたりする(以下、イベント)
このようなイベントが起きたときにどう処理するかをプログラムしていく
だが、コンソールにはイベントがない
0817デフォルトの名無しさん2008/12/24(水) 10:35:56
ここではイベントじゃなくメッセージというべきだったか
0818デフォルトの名無しさん2008/12/24(水) 10:41:08
>>816
なるほど、大まかに理解することが出来ました。
つまりは、イベントを考慮する場合はwin32プロジェクトで作れということですね
返答ありがとうございました
0819デフォルトの名無しさん2008/12/24(水) 11:00:20
>>811の者です。度々失礼します。
現在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
>>820
正常でしたか。安心しました。
回答ありがとうございます
0822デフォルトの名無しさん2008/12/24(水) 11:13:34
はい。あなたの反応速度が遅いだけです。

ところで、int main()と宣言しておきながらintを返さないサンプルを掲示しているような
ヘッポコサイトは参考にしない方がいいです。
0823デフォルトの名無しさん2008/12/24(水) 11:31:43
C99以降は (C++も?) main の終了後は 0 を戻すが
それ以前だと未定義だっけ?

>>819
デバッグなしで実行 (Ctrl+F5) すると
終了時に一時停止する。

>>822
>あなたの反応速度が遅いだけ
イミフ
0824デフォルトの名無しさん2008/12/24(水) 11:34:32
>>823
>>デバッグなしで実行 (Ctrl+F5) すると 終了時に一時停止する。
確かに一時停止しました!!参考になります
0825デフォルトの名無しさん2008/12/24(水) 18:06:50
質問です。
VC6.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:18
>>825
VC6時代にはまだ正式な規格じゃなかったから。
.NET(2002)から対応したが、デフォルトではVC6互換だった。
2005からデフォルトがISO準拠になったが、プロジェクトのプロパティのC/C++ 言語の
for ループ スコープの強制準拠をいいえにすれば同じ動作になる。
0827デフォルトの名無しさん2008/12/24(水) 18:14:45
>>825
C++の最初の定義ではVC6.0の仕様だった。
その後変更になった。
0828デフォルトの名無しさん2008/12/24(水) 18:54:22
>>826-827
ありがとうございます。
良くわかりました
0829デフォルトの名無しさん2008/12/24(水) 19:40:45
C言語で以下の用なプログラムを見ました。
このようなプログラムの記述でもよい?というかどういう意味なのでしょうか?
よろしくお願い致します。

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を宣言しておきながら;してる意味は?
そのあとにもまた;で終了して、次の行からは構造体の中身ともおわれしき代入があります。
{}で閉じる必要はないのでしょうか?
0830デフォルトの名無しさん2008/12/24(水) 19:58:03
>>829
中途半端な知識で中途半端に引用しているから、説明してもいいけど余計に混乱すると思う。
丸ごとアップローダにあげた方がいいと思う。

一応簡単に。
1.
・記号の前後のスペースなんか気にするな。殆どの場合に省略可能だ。
・「変数でvoidが入る」なんてことはない。何か勘違いをしている。

2.
・rromという構造体の実態の、メンバabcと言う構造体配列の0番目の要素のメンバdddという配列なのだろう。

3.
・1行目のそれは、そういう構造体があると言う只の宣言だ。
・3行目以降は構造体の中身ではない。引用が不充分なので、それが何かはわからない。
0831デフォルトの名無しさん2008/12/24(水) 21:34:22
>>830
ありがとうございます。

1.に関してということは
voidJISAKUkANSU() でもvoid JISAKUKANSU でもよいということでしょうか?

ちなみにkataは、別のヘッダファイルで void kata; なっていたのでvoidかとおもっていました。

2.
struct rrom{
abc[10]
}
strcut abc{
ddd[10]
} とかいった感じではなく

struct rrom{
abc[10]
}
abc[0] = nanka

とかいった感じなのでしょうか?この場合でも一番上が構造体だから.をつけると
理解すればよいのかな?

3.
3行目以降は本当に何行か構造体の中身みたいな感じで書かれていました。
なんでこんな書き方してるんだろうとおもってました。他の所でこの構造体
つかってた感じだったので、;をつけて下に何故かいているんだろうって
0832デフォルトの名無しさん2008/12/24(水) 21:46:03
>struct rrom{
>abc[10]
>}
>strcut abc{
>ddd[10]
>} とかいった感じではなく
>
>struct rrom{
>abc[10]
>}
>abc[0] = nanka
>
>とかいった感じなのでしょうか?

違う。
struct ddd_t {
/* 何か */
};

struct abt_t {
struct ddd_t ddd[10];
};

struct rrom_t {
struct abc_t abc[10];
};

rrom_t rrom;

rrom.abc[0].ddd[0]
みたいなかんじだと思われ。型と変数を混同しないように。
0833デフォルトの名無しさん2008/12/24(水) 22:12:19
ある構造体fooを一行でunsigned char[40]に型キャストするのは不可能でしょうか。。。
struct Foo{
(sizeofが40になる単純なデータ群)
}
をboost::serializeで使うのにいちいちserialize書くのかったるいのですorz
0834デフォルトの名無しさん2008/12/24(水) 22:22:34
833の者です。
質問が不誠実過ぎたと思うので加筆します
struct Foo;

void function{
Foo f;

//この下2行の文章のmemcpyする必要がないので(&uchar[0])=&Fooにしたい->型キャスト って発想なのですが。
unsigned char n[40];
memcpy(&n[0],&f,sizeof(f));
};
何か思い当たる人はご教示お願いいたします。
0835デフォルトの名無しさん2008/12/24(水) 22:25:04
*(char*)(&foo)
0836デフォルトの名無しさん2008/12/24(水) 22:26:31
ごめん >>834 読む前に買いあ
0837デフォルトの名無しさん2008/12/24(水) 23:35:35
>voidJISAKUkANSU() でもvoid JISAKUKANSU でもよいということでしょうか?
にほんごよめますか?
>830には、「きごうのぜんご」とかいてありますよ。


>ちなみにkataは、別のヘッダファイルで void kata; なっていたのでvoidかとおもっていました。
だから、1行ずつ切り出さないで全部貼れ。


>3行目以降は本当に何行か構造体の中身みたいな感じで書かれていました。
>なんでこんな書き方してるんだろうとおもってました。他の所でこの構造体
>つかってた感じだったので、;をつけて下に何故かいているんだろうって
自分で読み直して、説明が理解できますか?
いいから貼れ。
0838デフォルトの名無しさん2008/12/24(水) 23:37:44
>>833
unionならキャストの必要さえない。
が、キャストでやるならunsigned char * foo = reinterpret_cast<unsigned char *>(& f)でいい。
0839デフォルトの名無しさん2008/12/24(水) 23:50:38
シェルでpwdしてカレントディレクトリ表示するのと
cでgetcwd()して表示するのって何か違いがありますか?
0840デフォルトの名無しさん2008/12/24(水) 23:54:16
はい。実装によっては異なります。
シンボリックリンクの解釈の辺りで。
0841デフォルトの名無しさん2008/12/25(木) 00:07:39
>>838
単純ポインタに変換してしまうとucharが1/40しか保存されないんです><
0842デフォルトの名無しさん2008/12/25(木) 00:24:26
>>841
そんなことは無いと思いながら実験してみたら、やはりそんなことはなかった。

typedef struct {
int i, j;
char s[32];
} Type;

int main(void)
{
Type t;
t.i = 0xabadcafe;
t.j = 0xdeadbeef;
strlcpy(t.s, "foobar", sizeof(t.s));
unsigned char *uc = (unsigned char *)(&t);
printf("0x%x\n", *(int *)uc);
printf("0x%x\n", *(int *)(uc+4));
printf("%s\n", uc+8);
return 0;
}

$ ./a.out
0xabadcafe
0xdeadbeef
foobar

なんか別のところで間違えてるんじゃないの?
0843デフォルトの名無しさん2008/12/25(木) 00:32:23
>>840

なるほど、ありがとうございます。
シンボリックの扱いを実験してみることにします。
0844デフォルトの名無しさん2008/12/25(木) 00:32:38
>>842
一応こちらでも実験したつもりで居るのですが、
boost::serializeの仕様が関わってるのかもしれませんし、速度重視で実験コード書いたので失敗したのかもしれません。
が、ちょっと今日は時間がないので明日以降に再質問したいと思います。
ご丁寧にありがとうございましたmm
08457962008/12/25(木) 00:36:01
>>798
遅くなりましたがレスをどうもありがとうございます。

>DMA するかどうかはプログラミングの外の話じゃないかな。

素人ですみません。DMA するかどうかを調べる方法を
議論するとしたら、例えばどのあたりの板が適当でしょうか?

>それとメモリに読み込むより mmap した方が良いんじゃね?

ランダムアクセスは行わずに、シーケンシャルアクセスのみで、
また、一度読んだ領域は2度と読みません。
また、HDD からの読み込みが終了しているタイミングに、別スレッドから
占有的に,、同じHDDに対して高速書き込みを行いたいと考えてますので、
mmap のように必要になった時に初めてメモリ転送を行うのではなく、
決まったタイミングに全てのデータを一気にメモリに転送してしまいたいと
考えており、fread (or read?)文が適切かなと考えています。
0846デフォルトの名無しさん2008/12/25(木) 00:54:19
>>845
DMAはデバイスドライバが行う。Windowsではアプリケーションから制御できない。
0847デフォルトの名無しさん2008/12/25(木) 01:14:50
796がDMAと呼んでいるものは、
DMAではなくlibaioとかFILE_FLAG_OVERLAPPEDとかの
非同期IOのことではないだろうか。
0848デフォルトの名無しさん2008/12/25(木) 01:17:07
fread使ったことないとか?
08497962008/12/25(木) 01:24:03
>>846
レスをどうもありがとうございます。
linux であれば、O_DIRECT フラグをつけて
open する事により、DMA 出来る(?)ようですが、
windows の場合は、DMA を行ってくれるかくれないかは、
プログラマレベルでは全く制御できず、運任せという事でしょうか。
ファイル転送ブロック容量等を色々と変えてさまざま条件で
転送速度を計測し、各々の条件でデバイスドライバが
DMAを行ったか否かを推測して、DMAを行ってくれる条件を
試行錯誤して探してみるしかないでしょうか?

08507962008/12/25(木) 01:31:01
>>847
レスをありがとうございます。
cygwin ではなく VC++ で FILE_FLAG_OVERLAPPED
を使った経験はあり、実際に速度向上を体感できていましたが、
libaio というのは全く知りませんでした。これはcygwin で使えるのでしょうか。
ぜひ勉強してみようと思います。
0851デフォルトの名無しさん2008/12/25(木) 01:38:11
>>849
君が言ってるDMAって、誰に教えてもらったの?
08527962008/12/25(木) 01:46:30
別に誰に教えてもらったわけでもないですが。。
1 TB×16 台(16TB) の RAID0 に 2Gbps の速度で
高速アクセスを行うようなハードウェア+アプリケーションを作成しており、
可能な限り高速なアクセスをしたいと考えております。
DMA 転送は、DSP やFPGA のアプリケーションで扱った経験は
ありますが、PC 上で確実にDMAを行いたいという経験は
初めてです。
0853デフォルトの名無しさん2008/12/25(木) 01:59:00
今時のパソコンなら、HDDアクセスはDMA転送してるんじゃないの、ドライバが?
0854デフォルトの名無しさん2008/12/25(木) 02:11:21
>>849
> O_DIRECT
それはやっぱりDMAとは呼ばない。
間にディスクキャッシュを噛ませないという意味でしかない。
ちなみにWindowsだとFILE_FLAG_NO_BUFFERINGが近い。

O_DIRECTがなくても、ディスクとOSキャッシュのメモリとの間の転送はDMAが使われる。
DMAなんてものは1アプリケーションが介入する領域の話ではない。

DMAがされるかどうか確認・設定したいなら、
WindowsではデバイスマネージャでATAコントローラのところを見ればいい。
もちろん可能ならDMA有効が初期設定、不可能なものなんて今時存在しないだろ。
08557962008/12/25(木) 02:30:37
>>853
>>854
レスどうもありがとうございます。大変勉強になります。
理論値よりもだいぶ遅かったので、DMA できていない事が原因なのかなと
思いこんでいたのですが、別の原因で遅くなっているのかもしれませんね。

>O_DIRECTがなくても、ディスクとOSキャッシュのメモリとの間の転送はDMAが使われる。

OSキャッシュという概念がよくわかっておらず恐縮ですが、
O_DIRECTがなくても、DMAは必ず行われ、CPU の2次キャッシュや3次キャッシュは
汚染されないという理解でよろしいでしょうか?

とりあえず、
1.ディスクキャッシュを使用せず
2.非同期 I/O を用いる
という方法が考えうる最速の方法という事でしょうか?
可能であれば、cygwin でwindows/linux のマルチプラットフォームに対応したいと
考えていましたが、各々の OS で固有の API を使うしかないという事のようですね。
0856デフォルトの名無しさん2008/12/25(木) 02:36:03
if (suuti > 100){

printf("100以上なので修正します\n");

suuti = 100;
}
printf("数値は%dです\n",suuti);

100以上の数字を入力してもメッセージを表示してくれません

何か間違ってるのでしょうか・・?
0857デフォルトの名無しさん2008/12/25(木) 02:39:23
>>855
なんかキミ、用語だけは知ってるけど全然理解してないみたいだね。
本読んで勉強してきなよ。
08587962008/12/25(木) 02:45:05
>>857
すみません。。元々ハードウェア設計が専門で正直、PCは
あまり詳しくありません。cygwin を使うのも初めてです。
具体的に855のどのあたりが致命的に間違っている点でしょうか?
0859デフォルトの名無しさん2008/12/25(木) 02:49:15
>>856
きっと間違ってるんでしょうね
どっかが
0860デフォルトの名無しさん2008/12/25(木) 06:36:50
>>858
CPUのキャッシュがどういう性質のものかも理解できていないじゃん。

>>856
100を超える比較しかしていないから、100を入力してもメッセージは出ないね。
0861デフォルトの名無しさん2008/12/25(木) 06:52:34
(kata)自作関数()

本来ならこのkataにはどういったものがはいるのでしょうか?
0862デフォルトの名無しさん2008/12/25(木) 06:53:50
>>861
断片を貼られてもなんとも言えません。いい加減大人しく全体を提示するか、さもなければお帰りください。
0863デフォルトの名無しさん2008/12/25(木) 07:32:11
教科書をじっくり時間をかけて読む事をお勧めする
0864デフォルトの名無しさん2008/12/25(木) 07:33:38
>>862
全体は個人的なものじゃないので無理なのです・・・
考えられるパターンとしてはやっぱり戻り方では?
0865デフォルトの名無しさん2008/12/25(木) 07:41:03
>>864
にほんごよめますか?
>862には「かえれ」、>863には「きょうかしょをじっくりよめ」とかいてあります。
0866デフォルトの名無しさん2008/12/25(木) 07:56:49
手を隠したまま手相を見てもらおうとするようなもので
それはもう常人ではなくエスパーに頼むしかない
0867デフォルトの名無しさん2008/12/25(木) 08:15:44
携帯から失礼します
自分は最近C++に手を出し、今classで止まってます
本当に基礎の概念
classは設計図みたいなものである
と言うことやコンストラクタ、デストラクタ、メンバ変数
くらいは理解したのですが、ここから先(プロパティ、継承)などが理解できません

使い道が分かればもう少し理解が深まると思うのでどなたか、「なるほど、これは確かにclassと言う概念が必要だな」
と思うようなソースなり、コピペなり、ありましたら教えてください

例えば関数なら、何度も使うような処理を複数回書かないため
とか
マクロなら、あとで値の変更が容易なのと、見通しをよくするため
とか

色々「なるほどこれは必要だな」と思える理由があります。
しかしclassに関しては何も見えてこないんです
よろしくお願いします
0868デフォルトの名無しさん2008/12/25(木) 08:35:02
継承は置いておいて、クラスに関して簡単に。

例えば何かのアプリケーションがあり、それには複数の設定があるとする。
そのアプリの実装において、設定ファイルがどういう構造かは決定的ではない場合、
しかも一箇所では一部のデータのみを読み書きしたい場合、
普通は設定の一部のみを読み書きする関数を用意すると思う。
しかし、データの管理を呼び出し側に委ねることになる。
クラスにしておけば、データ構造を隠蔽することができるので、
呼び出し側にデータの管理を任せることなく密かに管理できると言う次第。
0869デフォルトの名無しさん2008/12/25(木) 08:37:41
>>867
例えばMFCでは
ウィンドーを作るだけのCWndクラスがあって
それを継承して表示用のクラスCViewが作られる
CViewを継承してCScrollViewクラスやCListViewクラスなどが作られる
こうすればCListViewを作るときウィンドー関係や表示関係の処理を複数回書かなくてすむし見通しも良くなる
(ここでいうウィンドーはボタンやテキストボックスやバーなどの表示単位のこと)
0870デフォルトの名無しさん2008/12/25(木) 08:47:15
>>867
まずオブジェクト指向を学びたまえ
そしてJavaやC#やVBへと旅立つのだ
0871デフォルトの名無しさん2008/12/25(木) 08:52:34
>>867
カプセル化とか多態性とかいろいろ利点はあるんだけれども、
はじめのうちはデータと関数を一緒に管理できる、ってとこかな
囲碁のプログラムを作っているとして、駒を置く・目の数を数える、等の
盤面のデータ(int board[15][15]みたいな)を引数にとって何か仕事をする関数をたくさん作ると思うが、
それなら盤面のデータもそれに付随する関数もclassの中に取り込んでしまえば、管理が楽になる。
0872デフォルトの名無しさん2008/12/25(木) 11:48:07
>>858
個々の技術は知っているようだが、PCという括りじゃなくて、(OSを含む)コンピュータ
システムの全体像をを理解していない。
各々の技術が「記憶階層」のどの位置にあたるのか調べて理解してから出直しなさい。
0873デフォルトの名無しさん2008/12/25(木) 11:57:16
大した事言ってないのに偉そうにしとるな
0874デフォルトの名無しさん2008/12/25(木) 11:59:39
うん、基本的な事知らないの奴に無料で詳しく教えるほど暇ではないのだ。
「記憶階層」からたどれば必要な項目は手繰れる。
0875デフォルトの名無しさん2008/12/25(木) 12:39:22
言葉に騙されてる感じ
0876デフォルトの名無しさん2008/12/25(木) 13:10:43
C++でなんか作りたいんだが良いプログラムのアイディア教えてくれ
0877デフォルトの名無しさん2008/12/25(木) 13:29:14
int *p;
p = malloc(sizeof(int));
*p = 1;

p = realloc(p, sizeof(int) * 2);


こうするとp[0]には1が入っててp[1]で2番目を参照できる、でおk?
0878デフォルトの名無しさん2008/12/25(木) 13:41:22
>>876
ずばーんとDYNAMICでどかーんとIMPACTがあって
ずきゅーんとHeartをゆさぶるDreamなソフト

とりあえずP2Pで匿名を謳(騙)っておけば脳タリン厨房は釣れそうだぜ
0879デフォルトの名無しさん2008/12/25(木) 13:51:56
>>877
pがNULLでなければOK
0880デフォルトの名無しさん2008/12/25(木) 14:09:00
>>879
�d
reallocの取っ掛かりが掴めた
0881デフォルトの名無しさん2008/12/25(木) 14:31:58
>867
そうだなぁ…例えば、こんなのとか?
#include <vector>
#include <iostream>
class MyObject {
public:
virtual void method() = 0;
};
class MyObjectA : public MyObject {
public:
void method() {
std::cout << "A" << std::endl;
}
};
class MyObjectB : public MyObject {
public:
void method() {
std::cout << "B" << std::endl;
}
};
void func(std::vector<MyObject *> &objects) {
for(int i=0; i<objects.size(); i++) {
objects.at(i)->method();
}
}
0882デフォルトの名無しさん2008/12/25(木) 16:30:18
while(1)
printf( "どかーん\n" );
0883デフォルトの名無しさん2008/12/25(木) 18:31:25
#include <stdio.h>

int main(void)
{
int i;
for (i = 1;i <= 10;i++) {
printf("メッセージ\n");
}
return 0;

このプログラムの中に1ってあるじゃないっすか
この1ってただの綴りみたいなものなんですか?
それともほかの数字とか入れたりしちゃうんでうすか?
なんか、そこんとこ解っとかないと前に進めません!!
0884デフォルトの名無しさん2008/12/25(木) 18:44:06
ググらない
調べない
やることもしない
試しもしない
感謝の言葉もない
0885デフォルトの名無しさん2008/12/25(木) 18:46:17
そういう人に私はなりたい
0886デフォルトの名無しさん2008/12/25(木) 19:00:55
という気がしたという夢を見た
0887デフォルトの名無しさん2008/12/25(木) 19:59:25
>883
そのコードの場合、やりたいことが単に10回繰り返すだけだから
開始番号の1と終了条件の10自体に特に意味はなく
10回繰り返せるように開始番号と終了条件が設定されていれば良い。
for(i=0; i<10 …としてもちゃんと10回繰り返すことになるから
「そのコードに限っては」1や10という数字自体に特に意味はない。

ただ、そのループの中で i の値を利用する場合には事情が違ってくる。
i の値を利用出来るように適切な開始番号と終了条件を設定することになるだろう。
0888デフォルトの名無しさん2008/12/25(木) 20:03:06
>>887
ほぉほぉ・・・

サンクス☆

0889デフォルトの名無しさん2008/12/25(木) 21:22:08
main(){}

↑このプロ負らむのを時に、言われましたが、何かいい方法?が?
0890デフォルトの名無しさん2008/12/25(木) 21:25:53
日本語でおk
0891デフォルトの名無しさん2008/12/25(木) 22:58:53
俺は
int main(){return 0;}
にして、起動元のOSに正常終了したことを返したい。

まあ、これより先は宗教戦争。
0892デフォルトの名無しさん2008/12/25(木) 23:00:11
Cの次期規格ではreturn 0を省略できるんだっけ?
0893デフォルトの名無しさん2008/12/25(木) 23:03:40
現規格でできる。
0894デフォルトの名無しさん2008/12/25(木) 23:05:29
宗教論争っていうか、return 0を省略できるのを知らないで、人に書けって
指摘してたけど、それ省略できるよって揚げ足取られて、暴れだす人とかは
何度もみてる。
0895デフォルトの名無しさん2008/12/25(木) 23:06:40
旧規格でも問題ないな。
警告出すコンパイラはあるけど。
0896デフォルトの名無しさん2008/12/25(木) 23:11:07
>>894
VC6 とか対応してないし、古いコンパイラ対策として書いた方がいい場合もある。

>>895
確かに省略はできるなw
何が帰るかは分からないが。
0897デフォルトの名無しさん2008/12/25(木) 23:19:11
>>894
省略できるって言うけど、どういう状況でそう言えるのか、言わないあんたもどうかと。
値を返す必要の無い関数なら必要ないが、値を返す場合、何かしら return 値 を書かないと
コンパイラが警告を出すし、関数が返す型を指定しておいて値を返さないのはおかしいし。
あと、mainに関しては、ANSI、ISO準拠ではプログラムの開始が main とし、
int型の値を返すスタイルを推奨しているから、int main(void) return 0; が標準”スタイル”
とされているが。その辺も、それを使うか使わないかは人それぞれだが、
筋を通すなら必要なコードは書くべき。
0898デフォルトの名無しさん2008/12/25(木) 23:20:25
>>889 は何を言ってるか意味分からんけど、
まあ、それみたいに掲示板とかに貼る書き捨ての数行のとかのコードとかは
return を省略したりするんだけど、それにいちいち >>891 みたいに
ツッコミ入れてくる奴がいるんだよ。
>>891 はちがうけど、ムダにあおり気味に。

で、それにreturn 書かなくてもいいだろって、揚げ足をとってやると、
「書くべきだ」とか、暴れだすってのがいつもの流れっていうか。

それは宗教論争じゃないだろって。
0899デフォルトの名無しさん2008/12/25(木) 23:24:59
>>897
ちょっと文章から読めないんで違ったら悪いんだが、
ここで 「省略できる」って言ってるのは、一般の関数とか
たまたま省略しても問題ない、というケースの話じゃなくて、
プログラムが正常終了する場合は main の return は省略
してもよいって規格で正式に定められてるっていう意味だよ?
0900デフォルトの名無しさん2008/12/25(木) 23:39:31
移植性考えると納得いかなくても書かざるを得ないというのはもう結論出てるだろう。
規格は所詮規格。まともに実装されてないこともあるわけで。
0901デフォルトの名無しさん2008/12/25(木) 23:44:28
移植性は関係ないだろ。
0902デフォルトの名無しさん2008/12/25(木) 23:48:17
そういえば、移植性を考えるならreturnよりexit()で返すべきとかって議論もみたことあるな。
詳細はわすれたけど。
0903デフォルトの名無しさん2008/12/26(金) 14:33:29
性別を選択するだけで好きなものがわかるプログラム作成してみました

#include <stdio.h>
int main (void)
{
int mange;
printf("男性なら0、女性なら1を入力してね: ");
scanf("%d",&mange);
switch (mange) {
case 0:
printf("まんこ大好き!!\n");
for (;;){
printf("%d←マンコ好き度\n",mange);
mange++;
}
break;
case 1:
printf("ちんこ大好き!\n");
for (;;){
printf("%d←ちんこ大好き度\n",mange);
mange++;
}
break;
default:
printf("きもい\n");
break;
}
return 0;
}
0904デフォルトの名無しさん2008/12/26(金) 14:43:51
改行しないバージョン
printf("%10d←マンコ好き度\r",mange);
0905デフォルトの名無しさん2008/12/26(金) 14:50:58
で、質問は何だ
0906デフォルトの名無しさん2008/12/26(金) 15:11:45
TCHAR szPath[MAX_PATH

szPathのszはどういう意味?
0907デフォルトの名無しさん2008/12/26(金) 15:28:26
string zero terminated じゃね?
0908デフォルトの名無しさん2008/12/26(金) 17:23:52
>>903
子供すぐる
0909デフォルトの名無しさん2008/12/26(金) 17:24:04
* bBusy : boolean
* cApples : count of items
* dwLightYears : double word (systems)
* fBusy : boolean (flag)
* nSize : integer (systems) or count (application)
* iSize : integer (systems) or index (application)
* fpPrice: floating-point
* dbPi : double (systems)
* pFoo : pointer
* rgStudents : array, or range
* szLastName : zero-terminated string
* u32Identifier : unsigned 32-bit integer (systems)
* stTime : clock time structure
* fnFunction : function name

* pszOwner : pointer to zero-terminated string
* rgfpBalances : array of floating-point values

* hwndFoo : handle to a window
* lpszBar : long pointer to a zero-terminated string

* g_nWheels : member of a global namespace, integer
* m_nWheels : member of a structure/class, integer
* m_wheels : member of a structure/class
* s_wheels : static member of a class
* _wheels : local variable
0910デフォルトの名無しさん2008/12/26(金) 17:45:22
参考になる
0911デフォルトの名無しさん2008/12/26(金) 20:31:37
自作関数がうまくいかない・・・・・

プロトタイプガンダムとかも・・うまくいかない・・
レス数が900を超えています。1000を超えると表示できなくなるよ。