[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 08/20 22:23 / Filesize : 74 KB / Number-of Response : 314
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



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

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
前スレ
【初心者歓迎】C/C++室 Ver.91【環境依存OK】
peace.2ch.net/test/read.cgi/tech/1400394837/

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

2 名前:デフォルトの名無しさん [2014/07/31(木) 19:15:07.44 ID:17Xd3Yqq]
テンプレここまで

3 名前:デフォルトの名無しさん mailto:sage [2014/07/31(木) 21:38:29.86 ID:cIGHixSb]
>>1

4 名前:デフォルトの名無しさん mailto:sage [2014/08/01(金) 07:55:38.07 ID:4+2xbBXr]
>>1乙乙

5 名前:デフォルトの名無しさん mailto:sage [2014/08/01(金) 10:19:34.67 ID:ZbseM8Xc]
また読みもしないのにスレ一覧に加えてしまった。

6 名前:デフォルトの名無しさん [2014/08/01(金) 23:35:44.60 ID:Q1xcVL69]
文字コードについて質問です。
charやWCHARでマルチバイト文字とワイド文字を扱うと学びました。
しかしこれは、いわゆる「文字セット」であって文字コードではありませんよね。
例えばマルチバイト文字にはShift-JISやANSI、cp932、EUC-JPなどがあるみたいですが、標準ではそのような指定はどこにもないように思えます。
マルチバイト文字セット=cp932
ワイド文字=UFT-8
とみなし、それ以外の文字セットは基本的に用いないという暗黙的な了解なのでしょうか。

webページを作成する際には当然だった文字コードの指定が見当たらず不安に思っています。

7 名前:デフォルトの名無しさん mailto:sage [2014/08/01(金) 23:47:26.94 ID:xmbDbUKF]
UTF-8はマルチバイトだよ
マルチバイト文字とワイド文字を変換する時にそれぞれの符号化方式を指定する
さらにOSによっては、ファイルシステムに使用可能な符号化方式が指定されている場合もある

8 名前:デフォルトの名無しさん [2014/08/02(土) 00:02:40.42 ID:yAhCEHKv]
マルチバイトとワイドは一文字長での区別だろ。
機種や環境によって違う。
windowsのUTF-16もWCHARで一文字を表現できないことからマルチバイト的だし。
一文字が一変数に格納可能という条件がワイドで、
一文字に複数変数がないと格納不可能という条件がマルチバイトでは。
一変数の単位が7ビットとか8ビットとか16ビットとか32ビットとかコアな状況でも変わると思う。

9 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 00:09:39.32 ID:qRelH0Iu]
ワイドはPCの内部で、Javaや.netが使っているUTF-16だけで、
マルチバイトはそれら以外すべてで、UTF-8など

10 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 00:19:54.08 ID:TsFH3rUF]
UTF-32!UTF-32!



11 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 00:31:36.16 ID:aXuilSuQ]
今はもう固定長でないUTF-16もwideとよばれてるんじゃよ
ちなみにwchar_tはWindows以外の大半は4バイトな

12 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 00:33:15.75 ID:QyMYNts0]
utfのオリジナルはstarの文字コードセットな

13 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 02:02:12.74 ID:LgAU6+Tw]
>「文字セット」であって文字コードではありませんよね

いいえ、文字セットではありません。
文字コードであり、より正確にはテキストエンコーディングです。

日本語Windowsの場合、
 MBCS: 文字集合=Windows-31Jのアレ、エンコーディング=いわゆるシフトJIS
 ワイド: 文字集合=Unicodeのアレ、エンコーディング=UTF-16

14 名前:デフォルトの名無しさん [2014/08/02(土) 02:06:07.54 ID:yAhCEHKv]
一文字の確保メモリサイズが常に一定がワイドだろ。

15 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 02:08:53.66 ID:ihMKWWqt]
1文字に使うバイト数が1バイトや2バイトと複数あるのがマルチ
1文字に使うバイト数が2バイトのみなのがワイド
Windows以外は知らない

16 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 02:27:56.74 ID:qRelH0Iu]
ワイドには4バイトのサロゲートペアもあるから、
2・4バイト

マルチバイトは、3〜6バイトで(もっと長いのもある?)、
3バイトが多い

17 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 02:29:47.48 ID:LgAU6+Tw]
>>6
>文字コードの指定が見当たらず

Visual C++の設定がユニバーサル文字の場合、
コンパイル時にソースはUTF-8またはシフトJISの仮定の下に解釈され
charはシフトJISに、wchar_tはUTF-16に、TCHARはUTF-16に変換される。
Visual C++の設定がマルチバイト文字の場合、
コンパイル時にソースはUTF-8またはシフトJISの仮定の下に解釈され
charはシフトJISに、wchar_tはUTF-16に、TCHARはシフトJISに変換される。
いずれも実行時はwchar_tの文字はそのままで、
それ以外はコントロールパネルの言語の設定で指定した文字コードで解釈される。

18 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 07:58:58.76 ID:uphwpvI8]
>ワイドには4バイトのサロゲートペアもある
こういう糞レスを見るとUnicodeがencoding formとencoding schemeの
概念を別に分離したのがいかに大切だったかを実感する

19 名前:デフォルトの名無しさん mailto:sage [2014/08/02(土) 09:08:07.32 ID:2F7KFjBZ]
合成文字

20 名前:6 mailto:sage [2014/08/02(土) 15:23:13.72 ID:4nNjqrDL]
ありがとうございました。



21 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 03:10:05.25 ID:AqnF5WVU]
クラスを使用する時にこのメンバ関数は絶対1回だけ呼ばれるって場合
コンストラクタで自動で呼ぶってのはあり?

22 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 03:23:55.71 ID:rNEZw/2H]
はい

23 名前:デフォルトの名無しさん [2014/08/03(日) 19:38:15.30 ID:ea9Ca7zy]
こんばんは
Visual studio 2013を入れたのでC++のハローワールドをテストしてみたのですが
ビルドが上手くいかず、ヘッダファイルが開けませんと表示されます

2010であればプロジェクトのヘッダファイルの所に使用したいヘッダファイルを入れて、ソースファイルでインクルードしてやればそれで良かったと記憶しています

初期設定を何もしていないのですがそれが原因でしょうか?ネットで調べて見ても情報が得られず困っています

解決方法を知っている方、教えてくれませんか?

24 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 19:41:58.53 ID:yCTzYi3M]
関数の引数の参照が良く分らないのですが、
とりあえず全ての引数に&を付けておくと良いでしょうか?

void func(int &i, double &d, std::string &str)
{
 // ...
}

void main()
{
 int i;
 double d;
 std::string str;
 func(i, d, str);
}

25 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 19:47:43.07 ID:lrcEZtj9]
>>23
エラを張れ

>>24
実質的に*を付けないポインタみたいなもの。

26 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 20:09:02.39 ID:ea9Ca7zy]
>>25
i.imgur.com/7AyiLCS.jpg
一応ヘッダファイルです↓
www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h

27 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 20:28:26.74 ID:F9uiJQaz]
>>26
ヘッダのパスが通ってないだけでしょ

28 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 20:31:49.84 ID:dJ8y5LvH]
>プロジェクトのヘッダファイルの所に使用したいヘッダファイルを入れて
ヘッダファイルが居る位置はソースと同じフォルダじゃないと、
(デフォルトでは)ダメなんじゃなかったっけ?

VSのヘッダーファイルのツリーからファイルの追加で、
ソースがおいてあるフォルダとは余所のフォルダのファイルも指示できるけど
そこへは基本的にパス通ってないから include "" では見えない

29 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 20:38:56.48 ID:dJ8y5LvH]
端的に
 SRC_DIR/hello_wordl.cpp
 SRC_DIR/std_lib_facilities.h
なら通ると思う

 SRC_DIR/hello_wordl.cpp
 SRC_DIR/INCLUDE/std_lib_facilities.h
という位置関係とか
 SRC_DIR/hello_wordl.cpp
 INCLUDE_DIR/std_lib_facilities.h
という位置関係とかで

そのソリューション指示だと依存関係は IDE 管理下で確認できるけど、
コンパイラには ファイル名 から ファイルのある位置を知る術が無いので、
デフォルトのパスから探索して終了する

30 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 20:54:26.56 ID:eFW9hWaw]
バカに複雑な事指示しても理解出来ない。
ヘッダーファイルを新規作成して、std_lib_facilities.hの中身をコヒぺ



31 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 21:20:15.57 ID:AqnF5WVU]
自分でどこにあるかわかってんなら相対パスでもええやん
#include "..\〜\std_lib_facilities.h"

32 名前:デフォルトの名無しさん [2014/08/03(日) 21:23:54.44 ID:ea9Ca7zy]
>>27
>>28
>>29
ありがとうございます、おかげで解決しました。パスが通ってませんでした。
(全く別の所にあってもIncludeの後にヘッダファイルのパスを書くと出来ました!
ソースファイルの上の階層にヘッダファイルがある場合は../../の表現を使っても出来ました!)

>>30
それは(´・_・`)最終手段ですね(´・_・`)

33 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 21:24:55.99 ID:ea9Ca7zy]
>>31
ありがとうございます、それで出来ました!

34 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 21:44:32.68 ID:wVcpRmRy]
いや、むしろ安定の絶対パスだろ

35 名前:デフォルトの名無しさん mailto:sage [2014/08/03(日) 22:50:17.34 ID:1KfsaatJ]
問題原因の切り分けをするときはまず絶対パスだな

36 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 00:16:53.93 ID:cek/HGoY]
>>35 切り分けできる男
>>34 切り分けできない男

37 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 02:14:34.43 ID:LgeiXwf0]
クラスをnewして失敗した時の動作はどうするのがポピュラー?
・if( == NULL)
・try catch
・他(プロセス強制終了etc)

38 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 02:21:35.90 ID:cy2se7Pq]
そもそもなんでnewするんだ?
先ずはそこからだ。

39 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 02:36:26.93 ID:VfXJ4NBK]
newの失敗は、メモリ不足などのシステム要件のエラーだから、
プログラムでどうこう出来るものではない

メモリを多くするなど、システム要件を満たす環境に、
変えてもらうしかない

40 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 02:38:52.49 ID:NH51Dz+L]
限界はあるけど使用量を少なくするように工夫するぐらいはあるだろ。



41 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 03:23:26.97 ID:LgeiXwf0]
ありがとう

>>38
論点とずれてる気がするが
WM_DESTROYで使用できなくなる機能Aをデストラクタで使用する場合
static宣言してるとWM_DESTROY後にデストラクタが呼ばれて機能Aを使用しようとして停止する
それを回避するために
deleteクラス
→機能A解放
ってやるようにしてる

>>39-40
つまり基本的には失敗=プロセス異常終了でもokと言う事でいいのかな

42 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 05:36:16.73 ID:VfXJ4NBK]
OSにも、2GB以上などのメモリの要件があるのと同じで、
使用条件を満たしていなければ、どこかでシステムダウンする

ただし、プログラムのバグや、何万回も再帰したのなら、
プログラマーの責任

43 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 06:05:08.09 ID:hDvHywGx]
メモリは使い切ってなくても
メモや断片化で希望のサイズが
確保できなくて失敗することがある

44 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 06:23:01.79 ID:UAhHAw7M]
>>37
> クラスをnewして失敗した時の動作はどうするのがポピュラー?

って聞かれたら、ファイルをほぞんするとか、再起動して回復を図るとか、ログ取ってそのまま終了とか... って答えるんだが。
なので、

> ・if( == NULL)
> ・try catch



> ・他(プロセス強制終了etc)

は、レベルが違うように思う。

45 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 12:20:39.89 ID:dahEKpKn]
>>24
カメレス
怖くないっすか

46 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 13:38:12.42 ID:FbNkdJ2c]
少なくとも「プロセス終了。ハンドルされない例外」とユーザーに表示されるのと
「エラーが発生しましたお問い合わせください」と表示されるのでは
ユーザーの怒りの度合いが違う。

どうしようもないので何をしてもいいというのは
犯罪は犯す奴が悪いので警察は要らないという程度に乱暴な発想

47 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 15:44:51.27 ID:hieQ0nGz]
何をしてもいいとはだれも言ってなくないか
プログラム側でメモリ不足をどうしようもないってのは、
カギを閉めても窓を割られたらどうしようもないから、その時は警備会社と警察に任せるよという程度に普通の発想だと思うが

つーかエラー表示をどうしたらいいかって質問でもないしな

48 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 15:59:27.42 ID:jcCYniN9]
問題が発生した瞬間のプログラムの動作
について質問している>>37にたいして
アスペは
「メモリを増やすしかない」
「警備会社に任せて事後処理するのが普通」
などとずれたことを言い出すから困る

49 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 20:48:03.69 ID:UAhHAw7M]
>>48
>>37 の質問自体がちょっとずれてるから無問題

50 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 21:43:04.51 ID:4x8QxR6V]
Windowsで自作のC++のライブラリで、関数実行時のエラーコードをどうするか
悩んでいます。とりあえずwinerror.hで定義されているエラーコードを
そのまま流用する方式で行こうかなと思うのですが、どうでしょうか?
return ERROR_SUCCESS;
みたいに。
他に良い方法ありますか?



51 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 21:47:18.34 ID:NH51Dz+L]
>>50
Windows意外で使わないならそれでもいいんじゃない?

52 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 22:00:41.67 ID:4x8QxR6V]
>>51
レスありがとうございます。
Windows以外でも使う場合は、どうすればよいでしょうか?

53 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 22:02:28.90 ID:LgeiXwf0]
ありがとう

>>42,43,44,46,47
できなかったらその時点でできる終了処理と通知して終了する事にするわ

>>44,49
> ・他(プロセス強制終了etc)
ってのは自分が思いつかない何かがあるかも知れないから書いただけで他意は無いよ
プロセス強制終了はetcつけたからわかると思ったけどあくまで例えね

54 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 22:34:49.43 ID:UAhHAw7M]
>>53
いや、例なのはわかってる

if( ) とか例外はメモリー確保失敗を検出する方法で、プロセス終了はそのあとの動作でしょ?

なので if( ) でチェックしてプロセス終了させるとかのように使うから、選択肢として並べるのはおかしい。

みんな親切だから、多分確保失敗時にどうするのが普通なのかを聞きたいんだろうなと、推測して答えてるんだろうと思う。
だから、誰も if( ) とか try に触れてないでしょ。

もしプロセス云々書いてないなら、好きにしろとか言われて終わってたと思うぞ。

55 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 22:36:00.54 ID:eWAxusEw]
www.buzzword.jp/img/face10.png

56 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 22:55:06.04 ID:LgeiXwf0]
>>54
○○だからifの方が〜
××だからtry catchの方が〜
異常終了前は△△した方が〜
ってのを期待して3つ書いたけど

・判定は(if) or (try catch) どっちが主流か
・判定後から終了までの処理はどんな感じが主流か
って感じの書き方の方がよかったかな

3つから選んでって意味では無かったすまん

if or tryは好きにでいいのかありがとう

57 名前:デフォルトの名無しさん mailto:sage [2014/08/04(月) 23:17:17.44 ID:zBF47n0e]
少なくともC++ではメモリ確保出来ないときにnullポインタチェックは(new( nothrow)使うのが)一般的ではないな。

58 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 05:27:27.61 ID:B8XLPQcD]
デストラクタが走るタイミングを制御したくてnewしたいだけなら、
そもそも確保に失敗することもないような。
それはさて、フェーズに分けて考えるなら、こんなもんだろ。

・検出
try catch

・対処
可能ならダイアログを出して異常終了

59 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 05:30:00.42 ID:ANChekkV]
殺人トラクターに見えた

60 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 23:23:02.28 ID:P2cYkmKJ]
VBScriptファイルをC++で実行したいのだが、くぐっても良く分らないのだが、
そもそも可能なのか知りたいのだが、可能な場合デバッガーでステップ実行
出来るのかな?



61 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 23:31:11.10 ID:JYX/3P/h]
>>60
たぶん自分が何をしたいのかがよくわかってないと思う

ところでくぐるってなんだ?ググるのことか?

62 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 23:39:31.76 ID:AfbB56Nf]
VBSをJavaバイトコードかLLVMに翻訳して処理系を作れば?

63 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 23:44:05.44 ID:AfbB56Nf]
>>60
「コンパイラ・スクリプトエンジン」相談室16
peace.2ch.net/test/read.cgi/tech/1405822579/

64 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 23:48:46.07 ID:P2cYkmKJ]
>>61,62,63
レスありがとさん。
いや、そんな高度な事したいのではなく(やる知識もないので)、
やりたいのは
string s1="VBScriptファイルの1行目";
string s2="VBScriptファイルの2行目";
string s3="VBScriptファイルの3行目";
...
execute_VBScript(s1);
execute_VBScript(s2);
execute_VBScript(s3);
...

的な感じでいいんだけれど。

65 名前:デフォルトの名無しさん mailto:sage [2014/08/05(火) 23:59:50.28 ID:AfbB56Nf]
codezine.jp/article/detail/1827

これはJScriptの場合だが(以下略

66 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 00:10:58.30 ID:hW+yaDMz]
>>65
おお、サンキュウ。このページは初めて見る。
ちょっと試してみるわ。

67 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 00:28:06.25 ID:hW+yaDMz]
それは砂丘の座敷わらしだろ

68 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 00:29:28.55 ID:hW+yaDMz]
ああ、間違えた。

69 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 00:43:44.34 ID:ejJORmgK]
なんだこの座敷童。

70 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 01:08:15.49 ID:hW+yaDMz]
ちょっと試してみたのだけれど、JScript版をVBScriptに
移植する能力が無いので困っている。



71 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 02:24:54.75 ID:Rc+eyo3S]
DLL内の関数で
class {
public:
void func(void);
};
このfuncをexeから利用する事ってどうやればできる?

それともfuncをクラス外に出すのが普通?

72 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 03:00:47.98 ID:Wb6IUvWi]
ttp://msdn.microsoft.com/ja-jp/library/81h27t8c.aspx
vsならこれでできる

73 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 03:28:23.21 ID:q+H8JIOY]
>>72の方法って、.libでエクスポートする場合に有効な方法で、
.DEFなどによる名前でエクスポートする場合には使えないんじゃなかったっけ?

.libでエクスポートする場合DLLがアップデートされDLL内の(classのメンバ)関数の
アドレスが変わったらそれを使うEXE(やDLLなど)もリビルドが必要。

アプリのプラグインDLLやWindowsUpdateなど、DLLのみ差し替えても
EXE(やDLLなど)をリビルドせずそのまま使える "名前でのエクスポート" で
DLLを実装したいなら、仮想関数テーブルを挟むのがポイントですね。

※              ↓「サクラ」を「sakura」に変えてください(sakuraのURLを書こうとすると「さくらが咲いてますよ。」で書けない)
blackscarecrow.サクラ.ne.jp/junk/C&C++/PP03.htm
のサンプルコードが分かりやすいかも。

間違ってたらすみません。

74 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 07:17:14.75 ID:PEaAzLNP]
>アップデートされDLL内の(classのメンバ)関数の
>アドレスが変わったらそれを使うEXE(やDLLなど)もリビルドが必要

んなわけねーだろ

75 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 08:24:14.21 ID:3bVUJ5Fe]
>>73
.defはたしかにC++では使えんが、dllexportならC++のクラスやメソッドも名前がexportされるから
別に問題じゃない。
#コンパイラの混在はできないが。
逆に仮想関数はvtable内の位置が変わるとまずいから、よくわかってないなら避けたほうが無難。

76 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 08:42:42.67 ID:sXmmxXua]
コンパイラの混在はけっこう不安要素だね
古いVSに新しいVSで作ったDLLが結合できなかったりしそう

77 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 08:43:27.11 ID:Wb6IUvWi]
そういう時こそCOMですよ

78 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 13:48:02.21 ID:hW+yaDMz]
Win7のVS2013のC++で
MessageBox()を表示した時にタスクバーに表示されるアイコンを
指定する方法ありますか?

79 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 13:50:22.52 ID:7Yid+G+a]
メッセージボックスごときがタスクバーに顔を出さないでください

80 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 13:53:43.62 ID:hW+yaDMz]
>>79
普通にやったらタスクバーにアイコンが出るんですが。
皆さん、出ませんか?



81 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 15:56:18.98 ID:N2WBO7yk]
でない。
hWndを0にするとアプリと重なって出るけど…

82 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 16:10:52.00 ID:WSzGEN/V]
質問失礼します。
入力画像が、複数あるテンプレート画像の中のどの画像と最もマッチングしているかをSURFを使って調べるにはどうしたらよいでしょうか。
よろしくお願いします。

83 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 16:12:58.71 ID:3t2H8u7I]
MessageBoxに限らず、システムメニュー持ったwindow で
オーナーが NULL なら、タスクバーに積み重なってくけど、
非NULLなら タスクバー上には出ない

84 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 16:19:36.33 ID:3t2H8u7I]
>>82
ここいらへん ttp://aidiary.hatenablog.com/entry/20091102/1257167398
から続けて読むともしかしたら

入力画像から得られる 特徴量ベクトル郡Vs
テンプレート画像の 特徴量ベクトル郡Vt x テンプレートの種類分

特徴量ベクトルのつきあわせ

85 名前:デフォルトの名無しさん [2014/08/06(水) 20:02:55.18 ID:hW+yaDMz]
アプリ実行時に使う2キロバイト程のテキストデータを
現状はテキストファイルから読み込んでいる
のですが、それだとまる見えなので、プログラム中に
入れてしまいたいのですが、
char data[]="テキストファイルの中身をここに貼り付ける"
みたいな方法以外にお勧めな方法有りますか?

86 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 21:45:58.99 ID:MTWJpzk3]
拡張子を.unkoにする

87 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 22:21:35.52 ID:1M326YIX]
>>85
Windows ならまずリソースに入れることを検討するのでは?

88 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 22:52:26.07 ID:CTQUcynJ]
データ=リソース
という短絡的発想がバカっぽい

89 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 23:03:24.22 ID:Rc+eyo3S]
非難だけして解決策は無いレスは気にしなくていいからな

90 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 23:08:55.87 ID:PY3MTauC]
て言うか、プログラムと一体化 ⇒ リソース は珍しくない
>>88 は観点がちょっとおかしい



91 名前:デフォルトの名無しさん mailto:sage [2014/08/06(水) 23:53:57.11 ID:l8HQ1jfJ]
>>89
ブーメラン乙

92 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 00:38:43.18 ID:zC3TsviY]
>>88>>90は無限ループ

93 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 01:19:10.54 ID:1cACSwRn]
>>92
ループの意味がわからん

>>89>>91 ならまだしも

94 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 01:54:45.98 ID:3T9P4myy]
>>85
つ ユーザー定義リソース
何でも抱けるよ

95 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 08:15:40.74 ID:OmP50o4u]
>>74,75
そうなんですか。訂正ありがとう。

>>75
名前がエクスポートされるって言っても、
「zzz@@aaa」とか記号の並んだ文字列として…じゃなかったかな?
あと、stdcallにすればコンパイラ混在しても大丈夫では?

たびたびスミマセン。

96 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 11:01:52.77 ID:7UtLjkdT]
関数ポインタpFuncがNULLならpDummyFuncを呼びたいんだけど
pDummyFuncがクラスのメンバ関数の場合どうすればいいかな?

97 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 11:33:51.91 ID:JKDdryz1]
みなさんありがとうございました。
リソースファイルでうまく行きました。

98 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 11:42:42.26 ID:qKlYqGRI]
>>96
std::functionで

99 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 13:03:07.98 ID:7UtLjkdT]
>>98
ありがとう

関数ポインタpfuncがNULLの場合何もしないようにするのはどうすればいいかな
typedef VOID (WINAPI *Sample)(VOID)
((Sample)pfunc)()
この場合
if(pfunc == NULL) {
((Sample)pfunc)()
}
とするしかない?

というのは呼ぶ時に分岐するんじゃなくて内部で分岐させるために1つ関数挟んで
BOOL check(result, pfunc)
{
if(pfunc == NULL) {
return FALSE;
}
result = pfunc;
return TRUE;
}

if(((Sample)check(&result, pfunc))() == FALSE){
//nullだった
}
どうにかしてこんな感じにできないかな

100 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 13:17:50.40 ID:7UtLjkdT]
前半
正 if(pfunc != NULL)
誤 if(pfunc == NULL)



101 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 13:20:19.39 ID:gf97lcsK]
何したいのかわからん
check()の返り値はboolでしょ?
nullチェックはできるようだし何を聞きたいのかも分からん

102 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 14:18:26.01 ID:7UtLjkdT]
>>101
わかりにくくてごめん

やりたい事としては
check(result, pfunc) // 引数を指定してpfuncを渡したい
→pfuncがNULLならFALSEを返す
→pfuncがNULLじゃなければpfuncを実行してpfuncの戻り値をresultへ格納してTRUEを返す
でこのpfuncの戻り値・引数の型や数は一定ではない

こんな場合checkを呼ぶ時点でpfuncの引数を指定するのはどうやったらできる?
自分でも意味わからんようになってきたわ

103 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 16:46:06.51 ID:7QbgVQGZ]
すごく乱暴な方法だけど、マクロ経由のインライン展開かねぇ
codepad.org/W8080HvO

制限: 関数ポインタ部分は リテラルの 0 や NULL を渡せない 変数経由でよろ

104 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 16:56:01.26 ID:7QbgVQGZ]
追補: pfunc が 戻り void の関数ポインタ になるのはだめー

105 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 18:58:47.05 ID:gmnku58x]
C++なら可変個引数テンプレート一択
Cなら可変個引数のマクロだろ
あVisual C++には無いんだっけ?

106 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 21:02:01.27 ID:7UtLjkdT]
>>103
ありがとう!

>>105
VC++でも
macro(value1, ...) sample(value1, __VA_ARGS__)でできるよ

107 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 23:20:45.31 ID:yuOaZbMp]
>>95
「マングリング」でググれ。
マングリング規則はコンパイラごとに違うから混在はできないものと思っていたほうがいい。
呼び出し規約の話とはまた別だ。

108 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 23:33:38.33 ID:PVmoVqTz]
引数のスタックへの詰み順
(スタックの巻き戻しを呼び出し側でやるか、呼び出され側でやるか)
まだ何かあるんだろうな 呼び出し規約

109 名前:デフォルトの名無しさん mailto:sage [2014/08/07(木) 23:39:20.38 ID:GYiGBmdZ]
64bitになって情報が錯綜したことで呼び出しはさらにカオスに

110 名前:デフォルトの名無しさん mailto:sage [2014/08/08(金) 00:45:04.00 ID:B23vVFp/]
64bitはfastcall固定だろ?



111 名前:デフォルトの名無しさん mailto:sage [2014/08/08(金) 00:51:34.75 ID:m6I/Kwd1]
バカは新たに覚えることが一つ増えることが大きなストレスなので

112 名前:デフォルトの名無しさん mailto:sage [2014/08/08(金) 01:39:02.11 ID:KHsP8XKA]
__vectorcallは別物だっけ?

113 名前:デフォルトの名無しさん mailto:sage [2014/08/08(金) 22:48:59.68 ID:x6pgPkV/]
c++での重力多体問題のプログラムについての質問です。
物体同士の距離を計測し、その間に働く力を調べるという単純なものです(計算回数は物体数の二乗になる)。
このプログラムで扱える物体数の限界を知りたいのです。

パソコンのスペックや限界をどう決めるかにも依ると思うので物体数と計算時間の関係式を教えてくれませんか?

一応自分でも考えてみました
計算時間=(物体数^2 × 1ループのステップ数)/CPUのクロック数
で求めることが出来そうだと考えたのですが、四則演算やその他演算などのステップ数が分かりませんでした。

114 名前:デフォルトの名無しさん mailto:sage [2014/08/08(金) 23:53:46.60 ID:01BFu9Gu]
>>113
計算式にもよるしCPUの種類にもよる。
実験して計測すれば、1ループあたりの時間がわかるから、
あとは物体数から全体の時間が推定できるでしょ。

115 名前:デフォルトの名無しさん mailto:sage [2014/08/08(金) 23:58:20.12 ID:gKCHEkZ/]
try {
}
catch(int i, char *&s) {
}

こんな感じで複数の引数で例外をcatchってできる?
できるとしたらthrowする時どう書けばいい?

116 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 00:36:57.87 ID:kN50ePbr]
>>115
出来ない。
std::exception派生してメンバに入れろ。
tupleで括ってthrowも出来るけどそもそもstd::exeption以外をthrowするのはあまりよろしくない。

117 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 00:43:50.18 ID:6vo/MVse]
>>116
ありがとう

118 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 04:44:32.02 ID:6vo/MVse]
こんな感じで可変引数を展開せずにそのまま別の関数の引数にするってできる?
func(format, ...) {
 func2(format, ...);
}

119 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 04:52:21.78 ID:RARSJSh7]
もちろん

120 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 06:02:40.10 ID:AkXpz4Sp]
いいえ、できません



121 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 06:03:29.08 ID:sPU18Xtd]
>>118
func2()がvprintf()などのようにva_listを受ける関数ならできる。
逆に言えば、func2()のプロトタイプがfunc1()と同じならできない。
func1()内で環境依存の方法を使えば、或いはできるかも知れんが。

122 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 06:38:12.95 ID:6vo/MVse]
>>121
ありがとう

123 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 06:38:39.99 ID:tuwrl1wM]
>>116
>std::exeption以外をthrowするのはあまりよろしくない

理由は?

124 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 06:49:28.67 ID:kN50ePbr]
>>123
受け取る側が対処しづらい。

125 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 08:25:13.71 ID:s/pNwkYb]
wchar_tに対応してない糞なstd::exceptionは使う気がしません

126 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 09:13:14.64 ID:kN50ePbr]
wchar_tってなににつかうの?

127 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 09:40:59.82 ID:Vxx37Jb0]
そんなにwchar_tが必要なら
派生して対応させればいいだろう。

128 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 10:12:48.97 ID:+T7xdrkU]
> 受け取る側が対処しづらい。

意味わからん、>>124 が対処できないだけじゃね?

>>125
ほんこれ、そろそろなんとかしてほしいもんだ。

129 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:10:41.36 ID:aGEftFoO]
>>114
ありがとう

130 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:13:49.49 ID:Vxx37Jb0]
完全に中で閉じて使う分にはどうでもいいんじゃね。
まあそういうつもりの仕様すら公開されていない例外が、間違って外に漏れてきたら
取り合えずstd::exceptionで受けてwhatで
素性を見てみたくなるな。



131 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:22:15.53 ID:gYP0Auob]
今更wchar_t使うメリットって何よ

132 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:23:23.89 ID:RARSJSh7]
今更char使うメリットって何よ

133 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:31:22.87 ID:gYP0Auob]
>>132
wchar_tよりマシ。

134 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:32:58.93 ID:Vxx37Jb0]
utf-8で扱うのが楽すぎて

135 名前:デフォルトの名無しさん [2014/08/09(土) 12:39:57.76 ID:gH6dyz5c]
wchar_tの_tって何?
wchar のほうが良くないか

136 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:41:59.21 ID:RXuWJHc/]
アプリケーションは外部(ファイル/通信)とのやりとりはUTF-8でして
内部処理はwchar_tの方が扱いやすい

137 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:44:27.16 ID:gYP0Auob]
char32_tとかならメリットわかるけど、
wchar_tは一文字の長さ固定で扱えない環境あるし。Windowsとか。
そんな環境でも固定長だと思って途中でぶった切るバカが必ずいるし。
固定長で扱える長さの環境と固定長で扱えない長さの環境が存在してるからどう扱えばいいのかわからないんだけど。wchar_t推してる連中はどうしてんの?


>>135
ググれ

138 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:46:46.07 ID:Vxx37Jb0]
合成文字とか言う仕組みのせいで
wchar_tでも結局手間は変わらないような

wchar_tが16bitなwindowsだとサロゲートペアで日本語限定でも問題出てくるし

139 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:58:27.92 ID:RARSJSh7]
合成文字なんて使うやつが悪い
問題になってから考えればいい

140 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 12:58:32.23 ID:RXuWJHc/]
文字の管理単位がUnicodeのコードポイント単位なのとバイト単位なのでは
扱いやすさがぜんぜん違うんだが
可変長をいいわけにして思考停止してね?



141 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 13:00:52.29 ID:gH6dyz5c]
>>137
_tでググっても分からんかった。
stringに対しwstringなら
charに対しwcharの方がスッキリする。
それにタイプする時にアンダスコア入れにくいし。
一体誰がこんなヘンテコなwchar_tなんて名前を
付けたのかな?

142 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 13:08:06.07 ID:gYP0Auob]
>>140
UTF-16だとコードポイント単位ですらないって言ってるんだけど。
どうやって1コードポイントを16Bitで表すんだい?

143 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 13:38:40.81 ID:+T7xdrkU]
>>141
> 一体誰がこんなヘンテコなwchar_tなんて名前を付けたのかな?

size_t って決めた奴に言ってくれ

144 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 14:38:48.88 ID:gRSnwdty]
後付である以上
既存のコードとかぶらないために
あえて選りすぐりのへんてこな名前をつけざるを得ない

145 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 14:44:17.42 ID:gH6dyz5c]
俺だったら
whar
にするな。

146 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 15:00:35.46 ID:gYP0Auob]
型名を_tで終わらせるのはPOSIXで予約されてるから付けやすいのよ

147 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 16:26:58.59 ID:kN50ePbr]
>>140
思考停止して固定長だと思い込んでたことを指摘された気持ちはいかがですか?

148 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 18:56:27.64 ID:ogb0Lg1q]
入力された段階でサロゲートペアを弾けばあとは固定長で扱えるから楽だな

149 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 22:23:42.91 ID:XnzTvHrT]
>>143
なんか、わらったよ。

おまえらはsize_t 、wchar_tってなんて読んでいる?
サイズテー、だぶりゅーチャーてー?

150 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 22:26:34.63 ID:MOaw4cY+]
さいずてぃー
うちゃーてぃー



151 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 23:01:51.78 ID:aGEftFoO]
「ティー」じゃなくて「テー」って言う所に老いを感じる

152 名前:デフォルトの名無しさん mailto:sage [2014/08/09(土) 23:19:07.91 ID:Vxx37Jb0]
いやテーはともかく後は普通の読みなんじゃ

153 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 03:00:14.18 ID:/shRHOr1]
>>151
聞き間違いを避ける為にあえてそう発音する人もいるらしい

154 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 03:44:09.58 ID:eHhQsmny]
B ビー
D デー
みたいなもんだな

charのポは半角の|と被るとかあるから
wchar_tに変換してからのがいい

155 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 06:49:28.06 ID:9YqDJ7QI]
>>154
char=MS932として話されても

156 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 06:57:04.45 ID:9YqDJ7QI]
ここって環境依存OKなんじゃなくて、一つの環境しか知らない人が多いだけだな。

157 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 07:20:18.40 ID:eHhQsmny]
「とか」って書いてんのに突っ込まれても

158 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 08:43:19.26 ID:YKEPe6r6]
>>107
なるほど。C++でエクスポートされる関数名が暗号化みたいにされるのは
「マングリング」と呼ぶのですね。ありがとうございます。

やはり素の名前で関数・変数やclassをエクスポートしたければ
.DEF使うべきですね。

159 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 11:31:57.69 ID:qvEZGcVl]
>>151
ドイツ語読みじゃ、霧

160 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 12:05:22.40 ID:lKd2tZDO]
ドイツ語読みでキャラテー?w



161 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 22:50:54.62 ID:qjKPAjiz]
今、数値を計算しファイルに出力するプログラムを作っています

162 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 23:01:10.90 ID:YfIekyq6]
>>160
学生か?

163 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 23:21:57.97 ID:qjKPAjiz]
>>161です
途中で切れていました

今、数値を計算しファイルに出力するプログラムを作っています
計算過程に -3/2乗が出てくるのですが、どう書くのが一番良いのでしょうか?

あと、計算結果が少数で出てきます
fixedで小数点以下6桁まで出せますが、さらに制度を上げることは可能ですか?
また、精度は少数を文字で出力するかバイナリで出力するかによって変わりますか?

164 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 23:32:40.91 ID:vHA1jMYS]
有理数計算ライブラリを使えば?

165 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 00:56:37.77 ID:IThaQfUx]
>>164
おすすめのライブラリはありますか?

166 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 02:32:28.41 ID:HrAPsGYd]
>>163
x^(-3/2)ならpow(x, -3/2)

167 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 02:35:49.60 ID:vtRcS5Vo]
惜しい
pow(x, -1.5)やpow(x, -3/2.0)が正解。
整数どうしの除算は整数に切り捨てられる

168 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 03:30:31.58 ID:HrAPsGYd]
>>167
xが型がdouble,floatなら問題無い

169 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 03:43:55.13 ID:LBc4eQ0i]
>>168
ideone.com/hexYNp
> 2.000000 ^ (-3/2 ) = 0.500000
> 2.000000 ^ (-3/2.0) = 0.353553

170 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 05:25:45.52 ID:zN3pWoAl]
>整数どうしの除算は整数に切り捨てられる

そういやC++は2011年改訂でそうなったな



171 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 07:43:57.75 ID:OcxdK7AV]
> そういやC++は2011年改訂でそうなったな
ええぇ〜〜〜〜 なんだってぇ〜〜〜〜

172 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 08:06:18.35 ID:xvvy75By]
整数リテラルどおしの除算の結果は整数に切り捨てられるのは
Cからの流れでC++の起こりの段階からそうじゃなかったのけ?

173 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 08:20:28.49 ID:63aliZJh]
この類いの奴は、負数の割り算で余りの符号が定義されたぐらいしか知らんわ

174 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 10:03:38.34 ID:IpMoPrzW]
整数リテラルの除算の結果は(規約がどうかは兎も角)事の起こりからずっと切り捨てられてきたね。
切り捨ての方向が確定したのはC++11かもしれないが。

>>163
doubleの精度のままファイルに出力するには、幾つか手がある。
・(エンディアンを考慮する必要があり、IEEEであることが前提になるが)バイナリで出力。
・有効精度を充分大きく採った指数形式で出力("%.20g"くらいで運が悪くない限り大丈夫)。
・(利用側で演算する制約はあるが)計算結果ではなく、計算過程を出力。

175 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 11:20:26.59 ID:GA9i869X]
昔MS-DOS時代に「ポータブルなdoubleの保存を
標準Cの範囲で実現するコード(基数は2限定)」というのを見たな。
ソースを見たけど「こんなことするくらいなら環境依存でいいや」
と思った記憶がある

176 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 11:49:09.33 ID:IThaQfUx]
>>166
>>167
ありがとうございます

>>174
ありがとうございます、二番目の方法が良さそうなので採用させてもらいます

177 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 21:47:42.55 ID:IThaQfUx]
%.20gを使ってもdoubleに20桁を格納出来ないので最高15桁のようですね。
15桁もあれば十分ですが

178 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 23:32:08.05 ID:A+39Zpbs]
ちら裏だけど
素粒子や半導体関係で、18桁要求されたことがあったなあ
C#のdecimalが欲しかった

179 名前:デフォルトの名無しさん mailto:sage [2014/08/11(月) 23:51:43.06 ID:9WMqh+ch]
>>178
x86の浮動小数点演算は80bitで精度が約19桁だから余裕だろ

180 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 00:33:05.70 ID:pMraHo9U]
>>179
x87よりSSEの方が速い。でも64ビット。



181 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 01:49:42.79 ID:TnGKLUiy]
ベクターをベクターのまま何処か(HDDなど)に保存することは出来ますか?

182 名前:デフォルトの名無しさん [2014/08/12(火) 02:07:55.52 ID:IbGC0kFi]
シリアライズするといい

183 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 04:39:03.48 ID:r1RLL3ei]
>>178
decimalの存在意義を理解してないおまえには無理

>>179
>x86の浮動小数点演算は80bitで
ばーか、ばーか

184 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 05:08:54.18 ID:FpmNu2on]
>>180

185 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 05:12:55.50 ID:qXgriP/E]
>>181
できません

186 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 07:15:05.97 ID:pMraHo9U]
>>184 ????????????????

187 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 08:59:35.37 ID:NDNq9sGA]
>>181
boost::serialization使え

188 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 11:15:17.65 ID:rw+rZn9f]
.NET4.5ならBigIntegerクラスがあるじゃん

189 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 13:00:10.27 ID:utQRXpD1]
正数と実数の区別がついていない188には無理

190 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 20:03:37.07 ID:N66cEg2t]
>>182
>>187
ありがとう
シリアライズ一度調べてみます



191 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 00:13:50.77 ID:+ie/z7le]
このコードがどういう考えで動作しているのかさっぱり解読できない
誰かなぜこれで動作してるのか解説してほしい
問題:ttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0036
回答:ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=122035

最初は判定用の回答をそのまま出力しているだけかと思ったけど
自分で入力を与えても正しく出力することは確認済み

192 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 00:25:30.02 ID:+ie/z7le]
ちなみにできるだけ読めるように展開していっている途中のコードは以下
ideone.com/NO0rOd

193 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 01:06:08.42 ID:La+C0YSw]
>>191
最初に '1' が出現してからの続く 0 と 1 のパターンは、全部ばらばらだろ?
ここで、最初の '1' が出現すると i と n のカウントが始まって、
次に 1 が出現するまでの変化値が異なり、その積 i *= n も変わる。
すると、うまい具合に剰余でパターン別に別れる最小の値が % 11 ってわけよ。

194 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 01:13:55.33 ID:La+C0YSw]
puts(...) に int 型の変数のアドレスを渡している部分は解説いらないよね

195 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 02:04:34.81 ID:yUu6IlV+]
>>193
i *= n の積はやってないんじゃない? ||演算子の評価結果は 0 か 1 じゃなかったっけ?(処理系依存?)
だから、 i *= 0 か i *= 1 のどちらかにしかならない。
i *= 0 になるのは、初めて ‘1’ が出現して c%2==1 のとき n++ == 0 となって、i *= 1 || 0 となるとき。
このとき i は 0 にリセットされる。
最初の‘1’と最後の‘1’の位置の差が図形ごとに固定かつバラバラなので、i でその差分をカウントして判別してる。

196 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 05:59:28.24 ID:gYHJhUS8]
初心者以前の者ですがC系の言語って
if (x>=0){〜} //A
else if (x==5){〜} //B
else{〜} //C
という処理をする場合、x=5だった時Aの処理だけでBの処理は行われないって事でいいでしょうか?
C系とまとめてますが、CとC++じゃ全然違ーよ!って感じでしたらすいません

197 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 06:09:41.88 ID:gAzc5rgf]
はい

198 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 06:14:16.74 ID:gYHJhUS8]
どうもありがとうございました

199 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 10:55:08.47 ID:Vw1Vsh7W]
ABC全部有効にしたいなら
if (x==5){〜} //B
else if (x>=0){〜} //A
else{〜} //C
という順で判定する

200 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 12:15:42.85 ID:+ie/z7le]
>>193,194
解説ありがとう!まだコードを理解しきってないですが
考え方がわかったので解読できそうです

実はputsのほうもさっきまでよくわかってなかったのですがint型と言われて気が付きました
(リトルエンディアン限定で?)1byte目に文字で2~4byte目が0になってるから
うまいこと2byte目が'\0'と読み取られるんですね
ありがとうございました



201 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 12:21:44.33 ID:+ie/z7le]
>>195
解説ありがとう!
まだコードとしては何が正しいか読めていませんが
参考になります!

202 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 18:08:43.16 ID:MVRQguVP]
C++11だっけ?
λとか可変長天ぷらが導入されたあたりからC++触ってないのだが
最近はなんか大きな動きあったの?

203 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 21:09:51.62 ID:oMecd0hy]
>>201
その内、FEED C0DE に出会える日もくるさ
0xBAADF00D かも知れないが

204 名前:デフォルトの名無しさん [2014/08/13(水) 21:32:31.42 ID:/Dr5wPv9]
配列コピーなんですけど、たとえば old_array[i]にある奇数や飛び番の配列データを
新たに作ったnew_array[i]に[0]から連番でいれていくのは可能でしょうか

205 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 21:43:51.95 ID:MVRQguVP]
>>204
可能ですよ

206 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 21:46:55.24 ID:u8W9agvo]
そういうコードを書けば良い

int i, j = 0;
for (i=0; i<[old_arrayの領域分]; i++) {
 if (old_array[i] == 条件) {
  new_array[j++] = old_array[i];
 }
}

207 名前:デフォルトの名無しさん [2014/08/13(水) 22:11:32.74 ID:/Dr5wPv9]
>>205-206
有難うです。ど素人なもんで
new_array[j++] = old_array[i]; この辺手掛かりにちょっといじってみます

208 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 22:12:32.13 ID:Vw1Vsh7W]
>>203
B16B00B5がいい

209 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 22:27:45.98 ID:yUu6IlV+]
>>195
誰も気にしてなさそうだけど、変なこと書いてたのでいまさら修正。
> i *= 0 になるのは、初めて ‘1’ が出現して c%2==1 のとき n++ == 0 となって、i *= 1 || 0 となるとき。
正しくは
 i *= 0 になるのは、初めて ‘1’ が出現して c%2==0 のとき n++ == 0 となって、i *= 0 || 0 となるとき。
ごめんニャン

210 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 23:22:53.17 ID:ZCR6FKbx]
二次元のvectorにプッシュバックしたいのですがどう書けば良いでしょうか?

また、vectorのサイズを初期化しておいてからvectorに数値を入れていくのと、プッシュバックで数値を入れいくのではどちらの方が効率的ですか?



211 名前:デフォルトの名無しさん [2014/08/13(水) 23:29:46.05 ID:o4SLtD2/]
無初期化でプッシュバックは遅い。
reserveしとけばメモリ動的確保・変更が連発されない。

212 名前:片山博文MZ次期CEO ◆T6xkBnTXz7B0 mailto:sage [2014/08/13(水) 23:43:02.05 ID:JOE/IwkU]
プッシュアップしたvectorをプッシュアップする

213 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 23:57:45.27 ID:ZCR6FKbx]
>>211
ありがとうございます
reserveは初期化しない分速くなるというわけですね

>>212
>プッシュアップしたvectorをプッシュアップする
一回目のプッシュアップするvectorには名前がなく、プッシュアップの方法がわからないのですがどう書けば良いのでしょう?

214 名前:片山博文MZ次期CEO ◆T6xkBnTXz7B0 mailto:sage [2014/08/14(木) 00:13:18.26 ID:ZDq4sTlC]
vector<vector<int> > vv;
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vv.push_back(v);
vv.push_back(v);
vv.push_back(v);

215 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 00:15:11.69 ID:Eelz7SYO]
プッシュアップってなんだ?

典型的な二次元構造の確保方法。
std::vector<std::vector<T> > array2d;
for (int iy = 0; iy < height; ++iy) {
std::vector<T> tmpArray;
for (int ix = 0; ix < width; ++ix) {
tmpArray.push_back(T(0));
}
array2d.push_back(tmpArray);
}
実際には、初期値が一定ならtmpArrayは事前に一回作るだけで済むんだけどね。

216 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 00:20:49.92 ID:inXgLCev]
>>213
vector<vector<int>> vec;
vec.push_back(vector<int>());
vec[0].push_back(123);

217 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 00:33:00.37 ID:KyBdqph/]
vector<vector<T> > array2d(height,vector<T>(width,T(0)));
普通はこんな感じだろ

push_backはサイズ未定な時かreserveと組み合わせて使う

でも多次元配列なら1次元vectorで作って
添字計算するのが基本じゃね?

218 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 00:36:12.24 ID:tezU5ZGa]
>vector<T>(width,T(0))

なんで一本グソのような無駄な配列を作って
わざわざそこからコピーして初期化すんだよ
無駄が大杉だろ

219 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 00:50:02.85 ID:ZDq4sTlC]
emplace_backの方が早いかもしれんな

220 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 00:56:21.81 ID:Pr8GjnEP]
char s[3];
のようにして、まだ初期化していない文字列の中身をデバッグ中に見ると、'フ'が入っていました。
てっきり初期化しなければ\0が入っているか、もしくは何が入っているか保証されないと思っていたのですが、'フ'とは何を表しているんでしょうか?



221 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 00:57:18.15 ID:KyBdqph/]
まあ、拘るならreserveしてemplaceか、なければswapだろうけど。

Tの生成やコピーが軽いなら
あれが一番楽じゃね。

それでも元のループより効率が悪くはならんし。

222 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 01:05:12.41 ID:ZDq4sTlC]
VC++がデバッグ時に初期化されていない領域を「フフフフフフフフフ」で埋める

223 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 01:08:37.01 ID:Pr8GjnEP]
なるほど、VC++の仕様なんですね。

224 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 01:11:32.12 ID:ZDq4sTlC]
フフフフフフフフフ

225 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 01:11:46.83 ID:KyBdqph/]
TがPODでvectorのコピーコンストラクタが
memcpy使うように特殊化されているような実装ならemplace使うより速いかもよ。

226 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 01:20:20.26 ID:7eQlac2v]
素直に書こうぜ。こうだろ。
std::vector<std::vector<T>> array2d(height);
for (auto&v : array2d) v.resize(width);

227 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 02:00:35.61 ID:BNqK6z00]
>>214
>>215
ありがとうございます
二重ループを使えばよかったのですね
どうして気づかなかったのか•••

>>216
>vector<vector<int>> vec;
>vec.push_back(vector<int>());
>vec[0].push_back(123);
なるほど、これはきれいですね
ありがとうございます、使わせてもらいます

228 名前:デフォルトの名無しさん [2014/08/14(木) 02:08:46.40 ID:BNqK6z00]
>>226
forの部分がよくわかりません
それは大きさが分かっている場合ですか?
大きさが分かっていて初期化が必要ないならこれ↓で問題ないでしょうか?
vector<T> v_y;
v_y.reserve(y_max);
vector<vector<T>> v_x;
v_x.reserve(x_max);

229 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 02:09:52.12 ID:rkihjFNH]
>array2d.push_back(tmpArray);

なんで一本グソのような無駄な配列を作って
わざわざそこからコピーして初期化すんだよ
無駄が大杉だろ

230 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 07:18:11.14 ID:7UqN+IkX]
批判しかしないやつはスルーで



231 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 11:14:43.85 ID:VAiv/2zu]
ブーメラン乙
array2d.push_back(std::move(tmpArray));

232 名前:デフォルトの名無しさん [2014/08/14(木) 15:29:25.75 ID:8/lb7CTL]
そんな糞なことは止めて行列ライブラリを作るか既存のものを使え

233 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 19:02:21.63 ID:sAFDwER0]
確かに2D,3Dのシミュレーションする数値演算ならvectorはちょっとお呼びでない

234 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 21:08:35.96 ID:8EuqiR5k]
widthxheight固定なら素直に連続領域とれるビットマップのような二次元配列だな

235 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 21:51:37.55 ID:MeOL7pvQ]
キミはスパース行列を知らないのか?

236 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 22:29:17.20 ID:BNqK6z00]
>>232
>>233
>>234
おすすめのライブラリはありますか?
用途は数値の書き込みと読み取りをするだけです

237 名前:デフォルトの名無しさん mailto:sage [2014/08/14(木) 22:37:39.50 ID:BNqK6z00]
よく考えてみれば書き込みと読み取りだけならどのライブラリでも良さそうですね

238 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 01:33:12.65 ID:j/DUXog9]
なんでこんな需要の多そうなクラスが標準で無いんだろうと思ったけど
まさか
double unko[100];
((double(*)[10])(unko))[9][9];
って保証されてない?

239 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 02:20:11.21 ID:Wy6EwLn0]
[99]のアクセスと同じかどうかってことなら同じじゃね
通常の配列も多次元配列もメモリ上は一直線になることは決まってたはず
ソースは探してない

240 名前:デフォルトの名無しさん [2014/08/15(金) 07:18:12.35 ID:gY0bb4xI]
>>216
余談だけど、前 VS が無かったから Mac で久しぶりに XCode で書いてたら、

std::vector<std::vector<_T>> vec;

で構文エラー投げられた。>> を stdin の演算子として読まれたらしい
VS ではこんな事なかったのにやはり GNU は信用できn(ry



241 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 08:09:25.44 ID:1yOnOTpl]
>>240
それが昔からのデフォだ
vector<vector<T>>
と書いてOKになったのは C++11 からだね、VS で ++11 に対応しているの

242 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 08:10:41.78 ID:rBk8U20E]
>>240
その>>をきちんと解釈するのはC++11からだ。
C++03では> >と書かないといけなかった。

243 名前:デフォルトの名無しさん [2014/08/15(金) 08:49:10.77 ID:gY0bb4xI]
>>241 >>242
そうだったのか!
どうりで XCode では std::to_string() が使えなかった訳だ。

244 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 09:24:41.59 ID:Lne+Px+X]
そんなの常識タッタタラリラ

245 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 10:40:55.78 ID:vo9zRayR]
ピーヒャラピーヒャラ

246 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 12:54:12.49 ID:Aqg845W8]
www.buzzword.jp/img/face10.png

247 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 15:40:11.62 ID:rWnY0+Nz]
>>243
そのXcode古すぎじゃね?
それかオプションでC++03になってるか

248 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 17:57:41.55 ID:gY0bb4xI]
>>247
さあ、確か XCode で C++11 を導入するには
gcc を手動でアップデートしなければいけないという事も聞いたが...

XCode を貶すつもりなどないが、自分にとっては使い易いから
VS を使い続けるつもりでいるよ

249 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 18:01:50.30 ID:LpsonrOj]
こういうときにXcodeはカスと言うような輩が居るから困る
逆もしかり って言うか身近にいる

250 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 18:03:48.47 ID:EAoCiRcg]
C++はカス



251 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 18:58:08.91 ID:dVKltVs+]
どんな言語でも、3ヶ月以内に自分が書いたコード以外はカス

252 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 19:14:06.92 ID:FG/0ESXh]
設計ができない奴のコードはどれだけ高機能だろうとカス、汚物
しかも必ず「時間がなかったので」という言い訳付き
設計に基づくコードは1年前だろうと理路整然として美しい

253 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 19:19:42.09 ID:EAoCiRcg]
emacsを使うと設計しなくてもコーディング出来ます()

254 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 19:22:14.18 ID:2DtLTSpw]
初めから仕様の決められるようなプログラムって、創造的余地のまるでない
誰でも作れるものでしかないんじゃ

255 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 19:40:09.65 ID:71J7kCx5]
考えるという行為を知らない
コピペコーダーのたわごとだな
設計ってのは脳みそ使うんだぞ

256 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 19:49:52.48 ID:2DtLTSpw]
いやプログラムのほぼ最適な設計は仕様決まったらある意味自動的に出来る物だろ。

仕様が変わるからこそ、作業量優先で
増築繰り返して美しくない設計になる。
もちろんある程度の増築を想定した設計にはなっているけどね。

だからこそリファクタリングという工程が必要になるんだよ。

257 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 19:52:56.78 ID:UOqJaIfS]
と有機生命体のコード生成機械は自負しています

258 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 20:01:44.71 ID:nXBM096I]
外部仕様と内部仕様のどちらの話なのか区別すべき

>仕様が変わるからこそ、作業量優先で
>増築繰り返して美しくない設計になる
内部設計したこと無い人の常套句だね
こういう人は一生まともなコードは書けん

259 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 20:12:33.70 ID:rWnY0+Nz]
>>248
んなわけない。
それに今XCodeに使われてるコンパイラはGNUじゃなくてLLVM Clang
C++11の主要機能の実装はVisualStudioより一年以上早かったよ。

260 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 20:50:15.31 ID:2DtLTSpw]
何を言っているのか解らない。
内部設計位息をするように出来なきゃ
動くもの作れないだろ。



261 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 21:10:18.85 ID:aVUc5SAD]
内部設計しなくてコーディングするひとが多くて困ってます(≧∀≦)ゞ
それっぽく動くものができるのが不思議

262 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 21:48:52.69 ID:2DtLTSpw]
基本的に頭の中で内部の詳細について
設計したものを頭の外に出す作業がコーディングじゃね?
別の形で残す必要性が解らない。
言葉や別の言語で実態と乖離した説明聞くより直接コード見た方が早いだろう。

まあそこが直接繋がらない初心者には
何がしたかったのか意図を聞くこともあるけど。

263 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 22:06:36.47 ID:ZsqsNQIf]
ソース公開された時全部TCHAR依存(関数も_tstoiとか_tprintf)だとやっぱり嫌がられますでしょうか?
いろんな方のソースを拝見するとcharで統一されていたりTCHARでも文字セットがマルチバイトになっていたりするんですが

264 名前:デフォルトの名無しさん [2014/08/15(金) 22:35:54.17 ID:oVfRPgr4]
C言語のAPIやリファレンスってどうやって確認する物なんでしょうか?
javaならオラクルのwebサイトに仕様が有って、eclipseでshift+F2を押せば確認出来たりするのですが。
Cだと最初から作られている物の一覧を何処から入手すれば良いのかさっぱり分かりません。
コンパイラの作成元に別々に置かれている物なんでしょうか?

265 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 22:44:18.53 ID:tVn+C2pp]
>>263
ものによる
Windows以外で使う可能性があるならTCHARは殺害だし
Windowsで商用レベルのソフトならcharは許されない

266 名前:デフォルトの名無しさん [2014/08/15(金) 22:49:52.18 ID:yLhHHOyz]
charで書いといてマクロで書き換えてunicode対応にする。面倒だがこれならwindows以外ではいいだろ。

267 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 23:02:39.26 ID:WUgX6twt]
内部utf-8にする必要があるとかじゃなけりゃwchar_tだな。
Win32APIは明示的にW版を使うようにして。

268 名前:263 mailto:sage [2014/08/15(金) 23:44:35.57 ID:ZsqsNQIf]
>>265
>>266
>>267
ありがとうございます
オープンソースの場合あまり環境に依存させないほうがいいということですね
C++においてもし決め打ちをするならcharとwchar_tならどちらがいいのでしょうか?
charじゃないといけない時というのはどういう時でしょうか?

269 名前:デフォルトの名無しさん mailto:sage [2014/08/15(金) 23:44:45.59 ID:dqHjjjVM]
>>265
TCHAR定義されてなかったら#defineすればいいだけでコスト0

270 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 00:19:24.37 ID:xuwM529Y]
>>268
いや、別にWindows専用ならTCHAR使ってもいいと思うぞ。



271 名前:263 mailto:sage [2014/08/16(土) 01:24:29.38 ID:k3e0e9h7]
>>270
一応windows環境のソフトウェアですがなにか変なことをしていないかと思って質問しました

272 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 03:06:47.92 ID:FC037fxL]
>TCHAR定義されてなかったら#defineすればコスト0

そんなことをしたらマイクロソフトに親を殺された人たちに因縁をつけられて
とんでもないコストが発生するだろう

273 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 05:40:01.26 ID:HsWLjWa1]
>>271
クロスプラットフォームなオープンソースソフトウェアのソースでも見てみたら?
例えばsqliteなんかだと基本的にchar(UTF-8)でファイルパスなんかもUTF-8で受けとる。(一応sqliteのAPIにはUTF-16を受けとるものもあるけど中でUTF-8に変換してる。)
ファイルパスの文字列操作もUTF-8で統一してる。
UTF-16へ変換するのは基本的にWin32APIへ渡す直前

同じコードが動く事が重要で、サイズが変わったり中身のエンコーディングが違ったりするのは好ましくないからTCHARは嫌われるんだよ。エンコーディングが違う可能性があると迂闊に文字列操作も出来ないから。

あとWindows専用ならもうTCHARじゃなくてwchar_tかchar16_t(UTF-16)でいいんじゃない?今更ASCII版のAPI使うことなんて無いでしょ。

274 名前:デフォルトの名無しさん [2014/08/16(土) 06:02:24.34 ID:5flrnqyZ]
内部でUTF8(1バイト長)を使うと固定するように、
内部でUTF16(2バイト長)を使うと固定してもマルチプラットフォーム化は可能。
昔から次世代のPHP6は内部UTF16化しようとしてた。

275 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 06:15:22.75 ID:HsWLjWa1]
>>274
今からUTF-16は中途半端でしょ。プログラムの外に文字列出すときはUTF-8の方がベターだし、メリットが無い

276 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 06:34:07.99 ID:4+vOhLId]
>>273
ソースをUTF-8で保存して
L"ほげ"でリテラル埋め込んでると
VC++のコンパイラが暴れるんです

277 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 08:25:20.68 ID:KA+KE7+G]
Visual C++のCランタイム関数やC++のstreamクラスってUTF-8対応していないの?

278 名前:デフォルトの名無しさん [2014/08/16(土) 08:45:24.88 ID:5flrnqyZ]
次期PHPは「PHP 7」になる? 2014年07月25日

いつまで経ってもリリースされないPHP 6だが、PHP 6はスキップして次期バージョンはPHP 7としてリリースするという案がPHPの開発チーム内で真剣に議論されているそうだ。
PHP 6については、当初文字列の内部処理をUTF-16で行うという方針で開発されていたが、2010年にこれを転換、開発ブランチがロールバックされるという事件があった(過去記事)。
その後4年が経ったが、未だPHP 6はリリースされていない。
PHP 6の開発は長きにわたり、かつて「PHP 6で導入される新機能」として紹介されたものが、実際には次期PHPには導入されない可能性もあるという。
そのため、新しい「PHP 7」というバージョンにすべきだ、という話のようだ。
developers.slashdot.jp/story/14/07/25/040238/

279 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 08:55:34.89 ID:aJ9J0CdO]
    ↓Perl 6

  ( ゚д゚ ) ガタッ
  .r   ヾ
__|_| / ̄ ̄ ̄/_
  \/     /

280 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 10:48:50.82 ID:0XKtKnUw]
>>277
UTF-8 はそのまま通るんじゃない?

>>278-279
Perl の話かと思ったゎ



281 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 11:01:29.74 ID:xuwM529Y]
>>280
LC_CTYPEに依存する関数はロケールを適切に設定する必要があるな。

282 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 11:16:19.08 ID:x/55uCwJ]
windowsはlocaleでutf-8指定しても
マトモに扱ってくれなかったような

vcのバージョンによるのかもしれないが

283 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 11:51:54.48 ID:iDf+bXK3]
>>271
Win32 APIのA版はフォルダーの中に長い名前のファイルが混じってるだけで
ファイル一覧の列挙が動作しなくなったり
とにかくWindowsのフル機能を正常に使えない出来損ないだぞ
残念ながらWindowsアプリでは処理をマルチバイト文字に統一することは不可能

284 名前:デフォルトの名無しさん mailto:sage [2014/08/16(土) 23:26:59.16 ID:VKTgsMtd]
>>268
char で決め打ちして日本語対応しませんというのが一番楽

285 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 05:26:13.50 ID:3OAkF9Uq]
>>284
それ日本語だけじゃ済まないから

286 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 06:16:23.78 ID:4EYqeDv1]
>>284
ハゲどー。
そして申し訳程度に日本語に見えるバイナリ列対応w

287 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 06:35:37.54 ID:D8fOlFKd]
>>282
UTF-8へのロケール変更はできないはず

288 名前:デフォルトの名無しさん [2014/08/17(日) 06:43:50.32 ID:ruDVRpF3]
windowsAPIでUTF-8は使えるって聞いたことがない。
それだったら、linuxと一緒でwchar_t版が不要だろ。

289 名前:デフォルトの名無しさん [2014/08/17(日) 06:46:25.94 ID:ruDVRpF3]
マイクロソフト純正でないとおもうが。
仮にUTF-8が使えたとしても、ラッパーであってUTF-16LEへ変換して渡してるだろう。
windowsは内部が全世界統一でUTF-16LEだろ。

290 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 07:09:51.14 ID:2ZZ0upcs]
ソースコードをどう書くかの話をしているときに
裏での見えないラッパーの話をされても
>linuxと一緒でwchar_t版が不要だろ
encoding-schemeとencoding-formの区別がつかない人はすっこんでてください



291 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 13:30:39.71 ID:3OAkF9Uq]
え?ソースコードのエンコーディングの話してたの?

292 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 15:12:10.77 ID:H69Yv+5P]
>>288
Win32(Windows NT)ができた当時はUTF-8なんてなかったんだからしょうがない。
というか、今のようにUTFなんちゃらが乱立する状況なんて想像されていなくて
"UNI"CODEで文字コード問題は解決されると信じられていた時代だった。
#漢字Unificationの問題は別として。

293 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 23:26:46.65 ID:3BRjkNZj]
charと竹中直人は兄弟だと思っていた1977年の春。

294 名前:デフォルトの名無しさん mailto:sage [2014/08/18(月) 17:23:56.00 ID:ENGcdXzN]
std::regexが思っていたより遅いんですが、より速い正規表現での検索を利用したい場合には何を使うといいですか?
grepソフトの検索はすごく速いので、正規表現のコストがこんなに高いとは思ってなかった

295 名前:デフォルトの名無しさん mailto:sage [2014/08/18(月) 17:26:46.65 ID:BFPWuSMs]
最適化入れてないとかデバッグモードで実行してるとかそういう話じゃないの

296 名前:デフォルトの名無しさん mailto:sage [2014/08/18(月) 17:42:45.77 ID:0GH1txVb]
何百回も呼ぶような場合はキャッシュというかコンパイルすべきかも
regcomp()

297 名前:デフォルトの名無しさん mailto:sage [2014/08/18(月) 18:16:45.57 ID:ENGcdXzN]
Releaseモードにしたら劇的に速くなった
コンパイルもやってみます

298 名前:デフォルトの名無しさん mailto:sage [2014/08/18(月) 21:02:44.92 ID:0GH1txVb]
いや、解決したならやらんでいい

299 名前:デフォルトの名無しさん mailto:sage [2014/08/18(月) 22:01:41.52 ID:uDUM2zni]
>regcomp()

んなもんは無い。

>コンパイルすべきかも

コンパイルするのが>>294に書かれてるstd::regexじゃねーの

300 名前:デフォルトの名無しさん mailto:sage [2014/08/19(火) 07:36:05.01 ID:tg7i16ue]
>>299
> >regcomp()
> んなもんは無い。

ググレカス



301 名前:デフォルトの名無しさん mailto:sage [2014/08/19(火) 12:02:47.11 ID:F3IU7kyP]
>>294の質問をしたものだけど標準ライブラリのisupperが遅かったので、
代わりにwchar_tをintにキャストして、0x41〜0x5Aの範囲にあるかを調べる関数を作ったらだいぶ速くなりました
これだけで大文字アルファベットを漏れなく拾えるかな?
isupperが遅い理由はファセットがどーたらとあったけど、要するにすべての文字コードに対応する作業で遅い?

302 名前:デフォルトの名無しさん [2014/08/19(火) 12:32:08.96 ID:qv1p14qX]
正規表現の話で無くなってる。
あと文字コードによっては、英文字と2バイト長以上の文字に重複部分あるかもしれない。

303 名前:デフォルトの名無しさん mailto:sage [2014/08/19(火) 12:37:35.60 ID:F3IU7kyP]
文字列でなく1文字の判定をする部分があって、そこにまで正規表現を使うことはないだろうとisupperも試してみた結果です
日本でUnicode使う分には大丈夫そうかな

304 名前:デフォルトの名無しさん mailto:sage [2014/08/19(火) 20:41:30.24 ID:Mliou7o7]
>>301
ctype.hのisupper()の実装は、配列を引いてand演算するぐらいだから速いと思うけど

305 名前:デフォルトの名無しさん mailto:sage [2014/08/19(火) 21:33:22.76 ID:APzI7Yv4]
>>304
?

306 名前:デフォルトの名無しさん [2014/08/20(水) 16:13:47.13 ID:vZ4195p+]
列挙体にマイナスの値は許されていますか?

307 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 16:24:48.87 ID:lf2AdZUe]
>>306
許されてます。

308 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 17:06:17.01 ID:cYiGvIKn]
enum EnumDayo : unsigned long {
AAAA,
BBBB,
CCCC,
};
もおk

309 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 19:26:51.17 ID:YTuxoJAp]
staticなメンバ関数内(TimerProcとか)でthisポインタを使うためにSetWindowLongPtr使うってあるけど
thisポインタを保持するstaticなメンバ関数(例えばSaveThis())をTimerProcで呼んでThisポインタ取得でもok?

310 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 19:44:36.47 ID:lf2AdZUe]
>>309
そこまでするならシンクルトンにしなよ



311 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 20:24:01.41 ID:YTuxoJAp]
調べてみたらそのまんまだったありがとう

312 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 21:28:31.99 ID:TfPzovZL]
いい加減なやり方を教えるなよ
スレッドなりタイマーなり
thisを渡せるように設計されてるだろ

313 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 21:49:29.16 ID:G+JA3SG/]
windows の話だとして スレッドなら this を渡す機構あり
タイマーは window proc/dialog proc の一部分でしかなく、そのインターフェース上には無い
が、渡ってくる window handle や dialog param に this を持ち越す機構がある






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

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

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