[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 02/07 11:19 / Filesize : 18 KB / Number-of Response : 83
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 05:42:06.64 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.81【環境依存OK】
toro.2ch.net/test/read.cgi/tech/1354116880/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

NG推奨:半角にして登録してくだい
◆QZaw55cn4c
/tech/1313183984/

2 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 08:07:50.75 ]
>>1
80代からテンプレートが変、次代にはちゃんともとどおりにしておくように。

3 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 15:32:11.13 ]
>>2
どうおかしいのか書けよ臆病者

4 名前:デフォルトの名無しさん [2013/02/04(月) 17:51:35.52 ]
モルピグの開発とかやろうと思ったらCとかC++をやったほうがいいですか?

5 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 18:04:06.04 ]
まずモルピグとは何かの定義からどうぞ。

6 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 18:12:29.10 ]
>>4
仕様が分からんから何とも言えんが、蔵ならまだしも鯖側の処理は莫大になる可能性があるからCで作ったほうがいいだろうね
全プレイヤーの処理が集中するわけだからね

まずは作ろうと思ってるモルピグの設計からやれ

7 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 18:20:31.63 ]
C必須だろ。
サーバ処理をPerlとかRubyでやってたら遅すぎて話にならない。
CGIと違って常時接続なうえに、恐らくマルチスレッドも必須。

8 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 20:00:46.39 ]
Win32API質問箱はなんでキチガイの巣窟(スクツ)なんですか?
なんかwinでC/C++を使うとキチになるじゃと心配です
あとC/C++使っている人にはキチが多いんですか?

9 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 20:09:31.19 ]
このスレでんなこと書いてるお前もキチ
こんな風に反応してる俺もキチ

10 名前:デフォルトの名無しさん [2013/02/04(月) 20:27:11.01 ]
便乗質問
今動いてるモルピグ鯖はCで書いたんだけど、これC++にしたら遅くなる?
クラス使いたいからC++に少しずつ書き換えていきたいんだけども、C++にすると遅くなるともかいた
モルピグ鯖として致命的なほど遅くならないならC++にしたい



11 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 21:16:28.92 ]
ゲーム系やろうとしてる割にはガキみたいな質問してるな

12 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 21:17:50.34 ]
「C++にしたら遅くなる」とか言ってるのは
殆どの場合お前みたいな伝聞での思い込みか設計が糞
まともなコード書ける自信があるならC++でいい

13 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 21:26:19.93 ]
>>8
あのスレに対して強烈な悪意を持って執着している変質者が
継続的に荒らしているからスレが機能していない。

14 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 21:31:45.43 ]
たまにAPIスレに限らずこの板全体でたまにレス改変があるけど
あれはどうやってるんですか?

15 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 21:41:56.35 ]
>>10
アホみたいな質問だなおい
C++にしたら遅くなる?とか、例えばCのソースをまんまC++のコンパイラでコンパイルしただけじゃ何も変わらないし
少しずつ書き換えていきたいって思ってるのなら、書き換えないと実際に速度は変わらないからそれで実践しろよ

ま、俺の勘と経験と、あとどこかの記事の情報によると、継承を用いた多態をほぼすべての個所でガンガンに使ったり
した上で、遅くなるとして(Cが100%として)96%くらいだがな
この言葉を信じるも信じないも自由だが、たった4%の為にびくびくするくらいなら、自分で実際に元のコードを残しつつ試してみたらいいと思うよ

ちなみに一番重要なのは「CのコードをC++のコンパイラでコンパイルしたところで速度は変わらない」ってとこな。ベンダによっては違うかもしれないがw

16 名前:10 mailto:sage [2013/02/04(月) 22:50:05.80 ]
サンクス
ちょっと書き換える方向でチャレンジしてみるわ

17 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 22:55:17.51 ]
もるぴぐ作ってる奴ってサーバはやっぱリナックスなのかな。

ウィンドウズは確か同時接続数に限界があったはず。

18 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 23:15:29.66 ]
#include <stdio.h>
int main(){
int a;
a = 3 + 5;
printf( "3+5は%dです" , a );
return 0;
}

>bcc test.c
>test.exe
>3+5は8です

なにこれ、8って表示したいだけなのに随分面倒だな。
真っ暗な画面に8ですとか出ても退屈で面白くないし。
つーかこんなことやっててゲームなんか作れるの?
数当てゲームとかじゃなくてファイナルファンタジーみたいなやつ作りたいんだよ。
こんなことやってて作れるようになるの?

って最初思ってたけど作れるようになったわw
基礎は重要。
ゲーム作ろうと思い立ってまず書店にC言語の入門書を買いに行ったのは正解だった。

19 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 23:50:47.27 ]
>>17
俺は鯖はLinuxだよ
Linuxはなぜかwinsock使えないし
Segmentation Faultとか出て落ちまくるから
かなりきつい

20 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 00:40:18.20 ]
>>13
片山とかいうゴミコテだろ?
あいつ荒らししかしてないだろw



21 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 00:42:12.11 ]
>>19
>Linuxはなぜかwinsock使えないし
普通にBerkeley/POSIX socketが使えるでしょう、というか、winsock は erkeley/POSIX socket を windows に移植したもの

>Segmentation Faultとか出て落ちまくるから
そりゃプログラムのバグでしょう

22 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 00:48:47.15 ]
>>19がひどすぎるw

23 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 01:14:21.26 ]
でもWindows環境(BCC)で問題ないコードをLinux環境(GCC)でコンパイルするとセグメンテーションなんたらよく出るよな

24 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 01:19:21.06 ]
はあ?

25 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 01:36:33.15 ]
それはwindowsで顕在化しなかったバグが出ただけだろ

26 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 01:50:13.12 ]
逆にコードに興味が出てきた

27 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 01:52:40.36 ]
変数のサイズを覚えるコツってありますか?

longって何バイトだっけ?8バイト?
shortが2バイトだから4バイトくらいか?
いや、そもそもshortって2バイトだっけ?4バイト?
booleanは1バイトだよな?1バイトか?1ビットあれば十分なのに1バイトか?
intって環境によって変わるんだっけ?

という状況に頻繁に陥ります
以前はポストイットに書いてディスプレイの端に貼っていたのですが
ヲタっぽさに耐えきれず剥がしました
そんな今では分からなくなるたびに検索している始末です
覚えるコツがあればお願いします
化学の元素記号を覚えるために「すいへーりーべ・・・」というのがありますが
ああいう語呂合わせみたいなのがあると最高です

28 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 01:55:17.90 ]
サイズなんて覚えねーよアホか
覚えるにしてもこれくらいだろ
short≦int≦long

29 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 01:58:30.05 ]
#include <stdint.h>

30 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 02:06:28.90 ]
booleanとか規格に無いもん持ってくんなよ



31 名前:27 mailto:sage [2013/02/05(火) 02:12:09.86 ]
>>28
コーディングしながらざっくり計算したいときとか困らないですか?
malloc( sizeof( long ) * 100 * 100 )
だと、

ああ、だいたい40キロバイトか・・・
ちょっと多いような気がするな、
半分くらいにしとくか

ってな具合にコーディングしながらだいたい見当をつけられるじゃないですか

32 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 02:28:22.88 ]
必要な時に必要な量しか取らないので気にしない
そんなメモリの確保の仕方はしない

33 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 02:29:59.85 ]
サイズは環境に依るし、本当に頻繁に陥るなら勝手に覚えてしまうものだと思うが。
いっそのこと毎回毎回 sizeof 表示するプログラムでも書きゃ覚えるんじゃね?

34 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 02:41:12.70 ]
茶碗 (char 1) と
ショーツ (short 2) は
長いよん (long 4) 、

不老死 (float 4)
ダブルへ伊藤 (double 8)。

35 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 02:45:41.37 ]
茶碗とショーツは長いよ〜ん♪
不老死のダブルへ伊藤〜♪

36 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 04:07:52.98 ]
>>32
アプリケーションによっては新規作成するとき等にとりあえず適当な量を確保するだろ
他にはストリーミングのときのバッファサイズとか

37 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 04:26:40.33 ]
多いような気がする、なんて決め方はしねえよ
値を決めるんなら根拠を持て

38 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 04:57:27.56 ]
そのうち嫌でも覚えてしまうわ

39 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 07:09:51.35 ]
バイト数を決めて確保するなら要素数は不定
要素数を決めて確保するならバイト数は不定

40 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 08:30:15.26 ]
>>27
依存するのなら面倒がらずに sizeof で記述する、でも
書き捨てならとりあえずほとんどの環境で
32bit: sizeof(int)=sizeof(long)=32 と覚えておくとよい
ほとんどの環境で 64bit: sizeof(int)=32, sizeof(long)=64 なのには違和観を覚えてしまうが、なぜこうなってしまったのだろう?

boolean が 1bit なのは自明、short はそのつど sizeof している



41 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 08:51:24.04 ]
釣りはよそでやってね

42 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 09:48:41.91 ]
だいたいで量を決めるって根拠が薄いんだけどな。演習だからとかそういうことではなく、自分が決めなくちゃ
いかんことを決められないって話。

43 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 11:15:49.38 ]
booleanとか無いし、boolのことなら「最低限真偽値を表現できるサイズ以上」でしかない
VC++でもバージョンによって4Byteだったり1Byteだったりするし、そんな○型だから○Byteとか覚えるものではない

どうしてもサイズを完全に指定したいなら、処理系に依存したビットサイズ指定の型でも使えば楽なんじゃないか?

44 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 12:28:33.22 ]
typedef して word, dword, とかね。

45 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 13:17:44.22 ]
codepad.org/BoeeHL03

このコードって何をやっているのでしょうか?
頭が悪すぎて、この関数がどういう処理をしているのか理解できません。
どなたか、コメントつけて解説してくれませんか?

46 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 13:18:37.17 ]
WORDとかDWORDとか使うぐらいならshortとかlongとか使うわ

47 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 13:51:38.71 ]
>>45
機械語なら俺に質問しろ!その2
toro.2ch.net/test/read.cgi/tech/1356735624/
アセンブラ 13
toro.2ch.net/test/read.cgi/tech/1314512680/

辺りで聞いたほうがいいと思う

48 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 14:03:11.38 ]
まず何の機種のものなのかを書かないとね〜
機種関係なく、コードの流れとして結果何をやっているかだったら応えられるが

49 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 15:11:17.65 ]
>>47
ありがとうございます。
ひょっとして、スレチでしょうか?
ソースコードがないので逆アセンブルした物を元にCで書き直しました。

codepad.org/Mwek5qUR

出力が110C8531C00・・・となっています。
110C8531D00 = 123456780 (32進数)に近いので、32進数的な何かだと思うのですが。

50 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 16:36:42.48 ]
ただ、逆汗しても、何もわからないでしょう
それが、何するものなのか、わからないと...



51 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 18:35:41.82 ]
>>46
いや、その short とか long が環境によって違うので、ラップして好きにかえられるように、と。

52 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 18:59:47.49 ]
>>51
手抜きのつもりが#ifのネストですごいことになるんだよな

53 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 20:02:45.52 ]
>>40
釣りすぎる

54 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 20:34:44.48 ]
>>53
し、しまった、8で割るのをわすれてしまった‥‥

55 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:17:08.51 ]
>>54
そういうレベルの問題ではないんだが・・・

56 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:25:52.25 ]
そうそう、もっと根本的な日本語のレベルの問題

>違和観

なんだこれ

57 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:40:27.32 ]
そういう低レベルな話じゃないから

58 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:43:17.67 ]
>>55
ideone.com/UlZ9uF
sizeof(bool) は 1 でしたね。
あとなにを間違えているのでしょうか?

59 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:51:43.84 ]
64-bit 環境では
VCは sizeof(long) == 4 で
gccは sizeof(long) == 8

ほとんどの環境でlongが64-bitとか噴飯もの

60 名前:デフォルトの名無しさん [2013/02/05(火) 23:13:46.65 ]
longでも環境によって違うってマジかよwwwww
俺のソフトがやばい
あ、それってコンパイル環境のこと?実行環境のこと?



61 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:20:38.87 ]
実行環境で変わるわけないだろ

62 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:24:39.91 ]
だからbit数保証したいならtypedef使えと・・・

stdint.h があるならそれ使うといいが
ない環境を考えるなら自前で定義だな

63 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:41:33.21 ]
C言語でintが64bitでないのは64bit環境ではない

64 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:48:59.40 ]
マヌケはレスする資格無し

65 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 02:50:48.25 ]
long long と勘違いしているのに 100 ペリカ

66 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 07:54:49.94 ]
solarisだよ。ううん知らないけど

67 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:11:05.92 ]
unsigned int 同士の足し算で桁あふれ検知したいんだけど
キャストなしで先に検知する方法あるかな

68 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:13:03.69 ]
レジスタ見ればいいんじゃね

69 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:29:17.54 ]
unsigned x,y;
unsigned msk=0xffff; // 32bit
unsigned w=(x&msk)+(y&msk);
unsigned u=(x>> 16)+(y>> 16)+(w>> 16);
if (u>> 16){ ・・・// OF

やっぱフラグレジスタ見れ

70 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:30:18.96 ]
>>61
サンクス
じゃあ安心だ



71 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:34:46.37 ]
int8_t, int16_t, int32_t, int_32_t とか使えばいいんじゃ

72 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 14:22:03.12 ]
>>67
x86でVC++ならこんな風にできるけど、ちょっとなあ・・・

unsigned int a = 0x80000001;
unsigned int b = 0x80000002;
unsigned int sum;
bool overflow;

sum = a + b;
__asm
{
  jc OF
  mov [overflow], 0
  jmp END_OF
OF:
  mov [overflow], 1
END_OF:
}

// sum == 3, overflow = true

73 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 14:25:16.18 ]
>>67
ttp://ideone.com/UypVGL

あまり美しくないけど

74 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:04:10.77 ]
2で割って足して、先頭bitを確認するとか?
余った分を足すのを忘れないように

75 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:06:27.48 ]
#define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))

76 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:07:51.80 ]
>>75
間違った
×> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))
○> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (y))

77 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:20:07.55 ]
>>76
片方だけでいいんちゃう?

78 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:27:34.92 ]
#define isOverflow(x, y) (~(x) < (y) )
これでいいか

79 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:29:41.18 ]
>>77
#define isOverflow(x, y) (((x) + (y)) < (x))
だけでいいね

>>74
#define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
かな

80 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:37:39.60 ]
uint32_t
isOverfloow(uint32_t x,uint32_t y)
{
uint32_t z;
uint32_t a;
a=x%2+y%2;
a/=2;
z=x/2+y/2;
z+=a;
return z&0x80000000;
}



81 名前:79 mailto:sage [2013/02/06(水) 15:52:30.85 ]
>>80
ああ、そうだった。
ということで>>79
×> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
○> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1)) & (1 << (sizeof(unsigned int) * 8 - 1))

82 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 20:13:44.65 ]
いっそのこと64bitで計算して判定すれば?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<18KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef