[表示 : 全て 最新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が重い事があるのでここも利用)

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