【初心者歓迎】C/C++室 Ver.28【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/06/09(金) 10:08:51ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0449デフォルトの名無しさん
2006/06/19(月) 22:13:51このスレは
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
0450デフォルトの名無しさん
2006/06/19(月) 22:33:45C/C++室ってところがうまいよなぁw
0451デフォルトの名無しさん
2006/06/20(火) 00:29:290452デフォルトの名無しさん
2006/06/20(火) 00:35:49今度会社のコーディング規約で「//のコメント禁止」が入るらしい。
なぜかと聞くと「コメントの最後が日本語で「\」を含む場合継続行と見なされるから」
つまり下の例でb=2;が前の継続行と見なされてコメント扱いされてしまうからというのですが
本当でしょうか。
会社は組み込み系なのでCは今でも現役だし、コンパイラはCPUのメーカによって異なります。
VC++では大丈夫とかC99では採用済みとか以外の回答をお願いします。
例
int a,b;
a=1;//○○可能
b=2;
0453デフォルトの名無しさん
2006/06/20(火) 00:37:22全くの嘘ですが、波風立てたくないなら、おとなしく従いましょう
0454デフォルトの名無しさん
2006/06/20(火) 00:38:42組み込み系ならASCIIのみというコンパイラもあるだろう
そういう場合はヤバス
0455仕様書無しさん
2006/06/20(火) 00:44:14コンパイラが日本語(2バイトコード)を含むソースに対応していなくて、
ソースがシフトJISで書かれている場合に限定される話だろ。
今時、そんなラベルの低いコンパイラは捨ててしまえ。サポートもロクに
期待できないだろう。あるいは、そんなコーディングルールを決めるような
会社はさっさと辞めたほうがいいかも。バカは伝染るぞ。
0456デフォルトの名無しさん
2006/06/20(火) 00:44:52大学のLinux端末が少し前に更新されたがそれまではその問題があった。
結構有名な話なんで覚えておいても損はない。
0457デフォルトの名無しさん
2006/06/20(火) 00:45:43全くの嘘ではありませんが、万に一つくらいの可能性でマルチバイトに対応していないコンパイラがあるかも知れません。
それを禁止するなら文字列リテラルの直接表記を禁止するとかコメント閉じの前にスペースは必須とかもコーディング規約に入れるべきだと思います。
0458デフォルトの名無しさん
2006/06/20(火) 00:49:09まだザラにあるんじゃないか?
0459デフォルトの名無しさん
2006/06/20(火) 00:52:21組み込み系でマルチバイト文字を処理させるとは
考えにくいけどどうなんだろうね?教えれ>>452
0460デフォルトの名無しさん
2006/06/20(火) 00:54:30SJISでコメント入れたときの話だろ?
作成するプログラムでマルチバイト文字を扱うわけじゃない。
0462デフォルトの名無しさん
2006/06/20(火) 00:55:12#空白は拙いな。行末の空白を取り除く余計なお世話なエディタがあるし、毛嫌いする人もいる。
0463デフォルトの名無しさん
2006/06/20(火) 00:57:27ウィンドウのデザインを変更する事はできるのでしょうか?
よくフリーソフトでウィンドウのスキンを変更できるソフトあるじゃないですか。
私の場合はexeにした時点でウィンドウデザインを変更しておきたいのです。
ググっても載っていなかったので、
ご存知の方いらしゃいましたらアドバイスお願いします。
0464デフォルトの名無しさん
2006/06/20(火) 00:59:510465デフォルトの名無しさん
2006/06/20(火) 01:17:22「コンパイル時にウィンドウスタイルを変更したい」
だと語っている
0466デフォルトの名無しさん
2006/06/20(火) 01:18:13あ、不明確ですみませんorz
ビルドする前にコード打つ段階でウィンドウスタイルを変更する
コードが打てるのか、もしくはコンパイラのフォームデザインから
変更できるのか分からないのですが、ビルドしてexe形式にして
配布できる状態になった状態の時点でデザインの変更をしておきたいのです。
普通ウィンドウズですと、タイトルバーが青くてフォームがグレーじゃないですか。
それを画像を用意して張りかえるか、コードで変更できるのか、もしくはできないのか
分からないので、現在もググりながら書き込んでます。
0467デフォルトの名無しさん
2006/06/20(火) 01:19:20セイントktkr
0468デフォルトの名無しさん
2006/06/20(火) 01:23:35まぁそういう問題があるコンパイラなら、
a=1;/*○○可能*/
b=2;/*hoge*/
でもb=2はコメントアウトされてしまう(またはコンパイルエラー)から、気をつけとけ
0469デフォルトの名無しさん
2006/06/20(火) 01:42:48これでも見てマターリしろ
ttp://www.youtube.com/watch?v=P4mZlwuOg50
0470デフォルトの名無しさん
2006/06/20(火) 02:16:04ヒント: WM_NCHITTESTを処理せよ。
0471452
2006/06/20(火) 04:09:00ほとんど大丈夫だが、中には当てはまるコンパイラがあるかも知れないということですね。
コーディング規約に入れられたら反論できないわけですね。
0472デフォルトの名無しさん
2006/06/20(火) 08:22:53「その規約だと>468の問題もありますよね」って突っ込んでみると面白いかもしれない。
0473デフォルトの名無しさん
2006/06/20(火) 08:59:34行連結って行末の \ + 空白xn + 改行 でしか行われないような・・・
そもそもそんな構造のコンパイラがあったら"\"(0x5c)を含むコードが一切使えなくなる気が
0474デフォルトの名無しさん
2006/06/20(火) 11:25:11"能"の次の*がエスケープされて、"*/"というコメント終端文字列とはみなされず、
次の行の終わりの"*/"までをコメントとみなしてしまうおそれがある。
0475デフォルトの名無しさん
2006/06/20(火) 11:35:02って言うかそんなの気にするぐらいなら
コメント中の行連結文字を検出するツールでも
作った方がいい希ガス。
0476デフォルトの名無しさん
2006/06/20(火) 11:59:59/* */ のコメント中にエスケープなんか効かないよ。
0477デフォルトの名無しさん
2006/06/20(火) 12:03:53まあ、実在するかは(´・ω・`)知らんがな
0478デフォルトの名無しさん
2006/06/20(火) 12:10:44自由にしてたらコンパイラごとにソースの意味が変わっちゃうからダメだろ。
0479デフォルトの名無しさん
2006/06/20(火) 12:16:59/* */の中はエスケープは効かないが、//の後ろは効くという主張?
0480デフォルトの名無しさん
2006/06/20(火) 12:21:58改行のエスケープは規格で定められている。
0481デフォルトの名無しさん
2006/06/20(火) 12:25:03そういうプロジェクトいくつかあったよ
0482デフォルトの名無しさん
2006/06/20(火) 12:25:46それはコメント中もだっけ?
0483デフォルトの名無しさん
2006/06/20(火) 12:25:51#include <stdlib.h>
#include <time.h>
int myRand(int a)
{
return rand()%a+1;
}
int main(void)
{
srand( (unsigned)time(NULL) );
int a;
printf("整数を入力\n");
scanf("%d", &a);
printf("%d", myRand(a));
return 0;
}
このプログラムで、srand((unsigned)time(NULL));を書くとコンパイル時にエラーが出てしまうのですがなぜですか?
まったく原因が分かりません。
0484デフォルトの名無しさん
2006/06/20(火) 12:26:59コメント処理は翻訳段階3だからねー。
規格合致処理系なら
/\
*\
*\
/\
もコンパイルは通る。
0485デフォルトの名無しさん
2006/06/20(火) 12:27:39日本語に対応してないコンパイラ(Cygwin の gcc とか)
0486デフォルトの名無しさん
2006/06/20(火) 12:28:540487デフォルトの名無しさん
2006/06/20(火) 12:29:26エラーメッセージ嫁。
0488デフォルトの名無しさん
2006/06/20(火) 12:32:10Cでは、変数の宣言はブロックの先頭でなければならない。
関数呼び出しの後ろで宣言するな。
0489483
2006/06/20(火) 12:32:29です
0491デフォルトの名無しさん
2006/06/20(火) 12:42:43それは確かに。
でもそういうコンパイラを使うプロジェクトなら
それこそ日本語禁止にしないと駄目だよな。
0492デフォルトの名無しさん
2006/06/20(火) 12:50:54もう 3.4 になってるから、 -finput-charset 使えば問題なし。
0493デフォルトの名無しさん
2006/06/20(火) 14:17:43お、使えるんだ。
0494432
2006/06/20(火) 15:20:14おお、ありがとうございます!
それで、質問というのは
そのプログラムをVC++に入れてコンパイルしても、エラーが沢山出てしまって
動作してくれなくて困っています。
具体的にどういじって、どんなファイルを用意すれば良いのかなど、
ご教授してくれると有難いです・・・。
程度が低すぎて申し訳ない。
0495デフォルトの名無しさん
2006/06/20(火) 15:36:24もしかして、
サンプルのtxtファイル自体をVCに食わせようとしてる?
あと、単にエラー出たとか言われてもエスパーじゃないのでエラー内容は君にしかわからん
0496435
2006/06/20(火) 15:50:26ビルドしたプロジェクトをうpしといた。受信パスはsuganuma。
ttp://www.uploda.org/uporg421601.zip.html
普通、ひとつのクラスの実装はひとつのcppで行うので、そのようにファイルを作った。
誰かへの説明のためなどの理由で、ファイルを分割するひつようがあるなら、
このビルドできるプロジェクトをいじってね。
次に質問するときは、エラーメッセージをコピペすること。
0497435
2006/06/20(火) 15:57:42ttp://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/18-sho.htm#e-18-4
にあるように、
実行可能ファイル名 制御データファイル名 構造データファイル名
で起動する。引数に与えるデータファイルは、そのページの赤字のところそのものが
入ったファイルを用意してやればいいよ。何してるのかさっぱりわからんけど。
0498435
2006/06/20(火) 16:04:220499デフォルトの名無しさん
2006/06/20(火) 21:50:36・
・
・
//抜けたい場所
・
・
・
}
whileやfor文ならbreakで抜けれますが、
returnを使わずに関数を途中で抜ける方法ってありますか?
0500デフォルトの名無しさん
2006/06/20(火) 21:52:440501デフォルトの名無しさん
2006/06/20(火) 21:54:27もしかして値を返さなくてもreturnできるですか?
0502デフォルトの名無しさん
2006/06/20(火) 21:54:58質問自体が矛盾している。
0503デフォルトの名無しさん
2006/06/20(火) 21:58:06何かつけないとダメと思ってました。ありがとうございます。
0504デフォルトの名無しさん
2006/06/20(火) 22:05:28それか、gotoやら例外で飛ぶこともできる。前者の濫用はやるべきではないが。
0505デフォルトの名無しさん
2006/06/20(火) 22:05:50たしかCだとvoid以外の関数でも戻り値をせずにreturnが使えるはずだから、
一応念のため言っておくけど、returnに戻り値を書かなくても済むのは、
戻り値の型がvoidである関数限定だと思っておきなさい。
0506デフォルトの名無しさん
2006/06/20(火) 22:06:02たまたまEAXレジスタに入ってたゴミが返るとかそんな感じなのかな。
今まで考えたこともなかった。
関数を途中で抜けて、しかも戻り値を使わないような場合って
ほとんどエラーが起こった状況だと思うんだけど、エラーが
起こったことがわかるように戻り値を返してやるのが親切かも。
0507デフォルトの名無しさん
2006/06/20(火) 22:24:250508504
2006/06/20(火) 22:28:45この場合setjmpとlongjmpを使う。
つっても例外使った方がいいと思うけど
0509デフォルトの名無しさん
2006/06/20(火) 22:37:46Cではたしか不定の値(ようするにごみ)が返ることになるんだったと思う。
(もしかしたら未定義だったかもしれない)
C++ではコンパイルエラー。
0510デフォルトの名無しさん
2006/06/21(水) 00:19:11実装依存なので、律儀に0を返すコンパイラもあります。
0511デフォルトの名無しさん
2006/06/21(水) 03:26:58メモリが節約できると思うのですが、そうすると他人に理解しにくいというか、
間違ってると思われるでしょうか?
0512デフォルトの名無しさん
2006/06/21(水) 03:42:30殆どメモリの節約にならないばかりか、最適化の妨げになるのでintで充分です。
0513デフォルトの名無しさん
2006/06/21(水) 14:48:12gettimeofday関数を使用して実行時間を計測したいのですが、
#include <sys/time.h> が見つかりません とエラーが出てgettimeofday関数を使用できません。
このファイルは普通どこにあるんでしょうか??
VisualStudio.NET2003使用。
0514デフォルトの名無しさん
2006/06/21(水) 14:55:230515デフォルトの名無しさん
2006/06/21(水) 15:40:40落ち着いてどんな質問がしたいのかもう一度考えて。
0516デフォルトの名無しさん
2006/06/21(水) 16:29:450517デフォルトの名無しさん
2006/06/21(水) 16:38:19まあ、VCのライブラリには無いようなので適当に<time.h>includeしてclock()使うとか
0518デフォルトの名無しさん
2006/06/21(水) 17:06:09(略)
準拠
SVr4, BSD 4.3
0519デフォルトの名無しさん
2006/06/21(水) 17:08:490520デフォルトの名無しさん
2006/06/21(水) 17:35:59実行時間の計測ならプロファイラ使え
0521432
2006/06/21(水) 17:44:32こんなにご丁寧に、親切教えて頂いて、
本当にありがとうございます!
アップして頂いたコードも落とさせて頂きました。
ビルドしたら、上手くいったのですが・・・
こんな事を聞くのも心苦しいのですが、
VC++で実行すると、***error 入力データファイルを指定してください。
と出ます。
435さんが教えてくださった通り、data1.dat、data2.datというファイルを作り、
中に制御データ、構造データを入れるところまではやったのですが
ここから起動する、というのがよく分からないです・・。
ここまで親切に教えてくださいましたし、あまり甘えるのもアレかと思うのですが
もし宜しければ、起動の方法を教えてください。
0522デフォルトの名無しさん
2006/06/21(水) 18:13:28そうじゃないなら、[Windowsキー]+Rで、cmdと入力して、exeがあるところまでcdしてから>>442
0523432
2006/06/21(水) 22:58:59出来ました!
ありがとうございました!
>>444さん、>>435さん
お世話になりました!
特に435さんは、とても丁寧ににして頂いてとても感謝しています。
素人の程度の低い質問に答えてくださり、
皆様本当にありがとうございました!
0524デフォルトの名無しさん
2006/06/21(水) 23:11:26まぁ全部の発言が俺なわけだが・・・。
なんにせよ、よかった。いろいろ頑張れよ。
0525デフォルトの名無しさん
2006/06/21(水) 23:35:09ワロタww
524親切だな
0526デフォルトの名無しさん
2006/06/22(木) 00:46:16STL の情報が網羅されている(出来れば)日本語のサイトが見たいのですが、
std::deque
std::list を使うか、 std::vector を使うかで迷っているのですが、
1. 二つのコンテナをつなげて一つのコンテナにする
2. 末尾に要素を追加
3. 先頭から要素を取り出して、削除する
4. 要素の数を取得する
という4つの操作しかしないのですが、std::listの方が速いですか?
0527速度が気になるなら試せばいい
2006/06/22(木) 00:47:23日本語でどうぞ。
つーか、文章は完結させましょう。
0528526
2006/06/22(木) 00:48:21書く内容を纏めている途中で送信してしまいました。
でも大体書きたいことは伝わったかなと思います。よろしくお願いします。
0529デフォルトの名無しさん
2006/06/22(木) 00:52:32短く言うと、std::dequeは大抵は お そ い と知っておいてくれ。
0530デフォルトの名無しさん
2006/06/22(木) 01:05:52ttp://www.wakhok.ac.jp/~sumi/index.html
>>529
どうも。とりあえず std::list でやってみたいと思います。
merge() もあるようですし。
0531デフォルトの名無しさん
2006/06/22(木) 01:48:200532笹井奈琴
2006/06/22(木) 03:14:41次のプログラムのコンパイルが通らない...
---ファイル:bigger.h
enum e_bigger_t { MEGUMI, HOSHINO, SAAYA };
---ファイル:momu.h
enum e_bigger_t;
void momu( e_bigger_t eb );
---ファイル:momu.cpp
#include "momu.h"
#include "bigger.h"
void momu( e_bigger_t eb ) {
// なんか処理
}
$ g++ momu.cpp
ってやると
momu.h:1: error: use of enum `e_bigger_t' without previous declaration
「e_bigger_tってなんだよ?」って...
つか、e_bigger_tは列挙体だよ、って、そこで教えてるのに...
0533デフォルトの名無しさん
2006/06/22(木) 03:23:490534デフォルトの名無しさん
2006/06/22(木) 03:43:09ギャグでやってるのかなw
0535デフォルトの名無しさん
2006/06/22(木) 03:50:450536デフォルトの名無しさん
2006/06/22(木) 03:57:30結論を言えば、ダメ。
enumは不完全型として認められていない。
0538デフォルトの名無しさん
2006/06/22(木) 11:09:030540デフォルトの名無しさん
2006/06/22(木) 11:34:47SGIの実装がlinearなだけ
ttp://www.sgi.com/tech/stl/FAQ.html
仕様では、constant timeのほうが良いとされているけど。
0541デフォルトの名無しさん
2006/06/22(木) 11:57:04ほんとだ。
でも constant と要求されてるわけじゃないから、 constant とも言い切れないな。
困った規格だ。
0542デフォルトの名無しさん
2006/06/22(木) 12:08:47public:
void f() const {}
void f() {}
};
定義がconstの有無だけのオーバーロード?関数はどうやって呼び出しを区別するのですか?
こういう定義をする意味もよく分かりません。
どういった場合に使われるのか良ければ教えてください。
0543デフォルトの名無しさん
2006/06/22(木) 12:27:22A a;
A const ca;
a.f(); // こっちは const 付いてない f()
ca.f(); // こっちは const 付いてる f()
コンテナの operator [] とか、オブジェクトの中身への参照を返すときに
戻り値の型にも const を使い分けてよく使われる。
0544デフォルトの名無しさん
2006/06/22(木) 12:57:24回答ありがとうございます。
0545デフォルトの名無しさん
2006/06/22(木) 14:01:34ここ2ヶ月そのことしか考えてません。
0546デフォルトの名無しさん
2006/06/22(木) 15:41:34ttp://www.catb.org/~esr/faqs/smart-questions.html
0547デフォルトの名無しさん
2006/06/22(木) 15:46:50確かthisにconstが付くんだっけ。typeidで表示されてみればいいか?
0548デフォルトの名無しさん
2006/06/22(木) 17:36:28#include <stdio.h>
#include <stdlib.h>
typedef union {
double a;
unsigned char b[8];
} D8;
double swap(D8 s) {
return (double)((s.b[0] << 56) |(s.b[1] << 48) |
(s.b[2] << 40) |(s.b[3] << 32) |
(s.b[4] << 24) |(s.b[5] << 16) |
(s.b[6] << 8) |(s.b[7]));
}
int main() {
D8 a;
int i;
a.a = 0.0;
a.a = swap(a);
printf("%g\n", a.a);
}
gcc ttt.c
ttt.c: In function
[minomura@mozart07 minomura]$ ttt.c:10: warning: left shift count width of type
ttt.c:11: warning: left shift count width of type
ttt.c:12: warning: left shift count width of type
ttt.c:13: warning: left shift count width of type
■ このスレッドは過去ログ倉庫に格納されています