【初心者歓迎】C/C++室 Ver.88【環境依存OK】
1 :
デフォルトの名無しさん :
2013/11/10(日) 14:31:34.81 エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.87【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1382185936/ ◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
【重要】
hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。
もう88スレ目か
hoge
6 :
デフォルトの名無しさん :2013/11/10(日) 20:22:38.46
hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage hage ここはhageOKスレ
C++ってCを混在させて書けるからついつい混在させてしまうんだけど 混在させないほうがいいのかね?
>>8 元々Cで書かれてるとかCで書かなきゃいけないコードのテストとかなら混在するのは分かるが、
それ以外で混在さす意味が分からない
単に拡張子を.cppに変えればいいんでないの
>>9 CだとmallocだけどC++だとnewじゃん
キャストが必須か否かとか色々ある ってのを何処かで書いたなー
mallocしたのをdeleteしたりとかしなきゃなんでもいい
個人的な思い込みに基づいて"hoge"の使用に過剰な反応をする人がこのスレに住み着いていて、 最近は「hoge禁止」がスレ住人の総意であるかのように見せる工作を繰り返しているようです。 あまり気にしないでやってください。
16 :
デフォルトの名無しさん :2013/11/10(日) 23:44:46.44
char *foo,*bar,*baz; foo = (char*)malloc( 1024 ); bar = new char[ 1024 ]; baz = foo; foo = bar; bar = baz; って入れ替えとかできるのかね この場合ってfooはどっちで解放するんだ? free?delete?
ポインタはアドレスの値でしかない したがって入れ替えたなら、freeおよびdeleteするポインタも入れ替わる
>>1 乙
前スレの時は一人で一日に100レスぐらい自演して
949で次スレ立てた粘着がいたから
よくやった
19 :
デフォルトの名無しさん :2013/11/11(月) 01:04:41.87
そりゃintVint8_tなんて存在しないからな
#include <stdint.h> uint8_t 〜
22 :
デフォルトの名無しさん :2013/11/11(月) 05:35:35.14
┃│衛││自│ || ┃
>>1 と自衛隊乙
┃│隊││衛│ || ┃
┃└─┘│隊│ || │ ┃
┃┌─┐└─┘ || │ ┃
┃├─┤┌─┐ || ┃
┃│自│├─┤ || ┃
┃│衛││自│ || ┃
┃│隊││衛│ || │ ┃
┃└─┘│隊│ || │ ┃
┃ /\└─┘ || ┃
..━┛/俺/┌─┐ || ┃
\/ ├─┤ || ┃
..━┓┌─┐│自│ || │ ┃
┃├─┤│衛│ || │ ┃
┃│自││隊│ || ┃
┃│衛│└─┘ || ┃
┃│隊│┌─┐ || ┃
┃└─┘├─┤ || │ ┃
┃┌─┐│自│ || │ ┃
┃├─┤│衛│ || ┃
┃│自││隊│ || ┃
┃│衛│└─┘ || ┃
┃│隊│┌─┐ || │ ┃
┃└─┘├─┤ || │ ┃
陸にしろ空にしろ、公道運行で右側埋めることしないハズだけど。。。
26 :
デフォルトの名無しさん :2013/11/11(月) 12:42:50.70
すみません。色々とプログラムをしてきたんですが、JavaGUI、Qt、WindowsAPIとやってきましたが、 JavaGUIは面白みがない。Qtはバージョン毎にソースを改変する必要がかなりある。 と嫌な部分がけっこうあるので、やはりWindowsAPIがいいなぁと思っているんですが、 GUIコンポーネントの少なさはなんとかなりませんか?COMとかActiveXとか良く知らないのですが そういうのなら、たくさんGUIコンポーネントがあるんでしょうか?それともどこかのWebにGUI部品を載せているところがあるのでしょうか? .NETは嫌です。
GUIコンポーネントの種類なんてどれもそう変わらないと思うけどなあ
無かったら自分で作ってる
あれば使う なければ作る それがプログラマ 何も作らない ブログに短いコードを書いて自己満足 それがブログラマ
31 :
デフォルトの名無しさん :2013/11/11(月) 16:36:55.31
>>1 > ※sage禁止です(と代々スレに書いてありますが自己判断で)。
代々? Ver.88という事だが、いつから代々なんだ? ねつ造すんな。
精神異常者のアンチhoge厨は死ね。
質問では sageずに質問する。 回答者側は随意に。 こういうのあったよ
WindowsAPIなんて、碌なテーブルもない。
c++の文法学べるサイト、どこかオススメあったら教えて下さい(>_<)
無限ループの関数を別スレッドにしてミューテックスで同期しようとしたけど、 デッドロックになったとか例外が出る 何とかならんでしょうか #include <thread> #include <mutex> #include <iostream> #include <windows.h> std::mutex mutex; void func() { for (;;) { mutex.lock(); std::cout << "func." << std::endl; } } int main() { mutex.lock(); std::thread thread(func); std::cout << "mutex unlock." << std::endl; mutex.unlock(); Sleep(1); thread.detach(); std::cout << "detached." <<std::endl; }
自分用にローカルプロキシ作りたいんですがサーバーソフトとしてポートを利用(接続待ち待機、受信等)する方法を教えてください VC++2005の製品版使ってますがExpressで可能ならそれ以降のバージョンでも .netのマネージコードではなくネイティブコードでお願いします
>>36 中身は読んでないがとりあえずrecursive_mutex使え。
あと自分でlock/unlockを呼び出すな。lock_guard使え。
>>36 for (;;) {
mutex.lock();
std::cout << "func." << std::endl;
}
なんだこのKUSOコードは死ね
>>37 WSAStartupしておいて、あとは普通のBSD形式のソケットAPIで終わり。
socket、bind、listen、accept、recv、send、closesocket。
あとselectとかshutdownとかsetsockoptとか。
WSAなんちゃらって高機能なAPIもあるけど、最低限BSD形式ので十分。
>40 ありがとうございます それらを取っ掛かりに調べてみます
42 :
デフォルトの名無しさん :2013/11/11(月) 23:47:22.87
>>39 ワラタw
>>36 もうちょっとマルチスレッドとミューテクスについて勉強したほうがいいと思う
>>40 チャットみたいに文字列を送受信したい場合もそれでいける?
他に適した方法あるならキーワードだけでも教えて欲しい
async()使った方が楽じゃん
>>44 いける。けどクライアントはconnectやIPアドレスの解決でgethostbynameとかも使う。
selectに含まれる話だけど、ブロッキングモードと非ブロッキングモード、スレッドセーフについて調べとくと良い。
マルチスレッドを積極的に使えば非ブロッキングモードもselectは不要だがスレッドセーフを意識する必要が増える。
selectを積極的に使えば非ブロッキングモードもマルチスレッドは不要…なのが理想だがWindowsの場合は難しい。
ウィンドウメッセージと、各種同期オブジェクトと、ソケット同期関連が混在してしまっている。
ソケットを直接触らない方法は色々あるけどお勧めとかは知らんので他の人頼んだ。
つ boost.asio
48 :
デフォルトの名無しさん :2013/11/12(火) 02:38:13.68
asioはWindowsではうまく動くんだけど、Linuxではうまく動かないから ダメだわ。 色々考えてみたんだけど、Linuxで非同期はかなり無理あるわ。 自分でasioっぽいものをつくろうとか思ってもasioの二の舞なるわ。 あと、一つのプロセスがあいてるコアをできるだけ使いたいとか無理っぽかった。 これは厳しいわ。 公平なスケジューリングと言えば聞こえがいいんだけど、これメニーコアとかなったら どうするんだろね。 こういう部分はWindowsのほうが得意っぽかった。 だから何って話だけど。
49 :
デフォルトの名無しさん :2013/11/12(火) 02:40:29.89
ああ、ちょっと誤解を招くな。 非同期が無理じゃなくて、非同期を抽象化するのが無理ぽかった。
50 :
デフォルトの名無しさん :2013/11/12(火) 02:45:14.66
Windows限定だったらasioは超お勧めだよ。 IOCP使ってくれるんで良い感じ。
Linuxでサーバーソフトを作るならinetd配下のプログラムにすると 標準入出力でソケット通信できて簡単
>>51 2000年以前に雑誌で話題になってたような懐かしい話題だな
>>51 15年くらい前にはやったね
そういうクソなサーバープログラムを作る奴は死んだ方がいい
gethostnameのUNICODEバージョンって無いのですか?
>>54 国際化ドメイン名はUnicode突っ込んでも動かないからな?
正規化したりPunycode使ったり色々処理しないとダメ。
>>55 Visual C++でwchar_tをcharに変換することなく使いたい
ってだけでは?
>>56 念のためだよ。
どうせWCHAR受け入れてたら(受け入れて無くても)、
そのまま放り込んで動かん言う奴はいるだろうし。
>>55-57 gethostnameはただ単にローカルホスト名を得るだけだろ
突っ込む・wchar_tをcharに変換・放り込む
どれも的外れ
>>58 !!bynameの方だとばっかり思ってたわ、すまんかった。
>>59 そうだとしても
GetAddrInfo使えでいいんじゃね
inet_addrのUnicode版ってありますか?
inet_addrよりinet_atonを使った方がいい inet_atonのUnicode版はWSAStringToAddress msdnにはinet_atonが載ってないけど inet_ntoaのUnicode版から推測できるよ
getservbynameのUnicode版ってありますか?
ntohsとhtonsってやってる事同じなのに2つもいらなくね? 01 02 03 04をntohsやってもhtonsやっても 結果は04 03 02 01になるんだから
ネットワークでのバイトオーダー(決まってる) ↑ ↓ その環境でのバイトオーダー(環境依存)
>>64 ばっかだなー
ソース見た瞬間に伝わるだろ
この処理でホストオーダーをネットオーダーに変えたんだと一目瞭然に
仕様書通りにデータは流れなければなりません。 『あれ? 仕様書にこの並びで書いてありますよね?』 『・・・』
>65 将来変換と逆変換が異なるCPUが現れるまさかの事態に備えて 2341とか
>>66 関数名見ないと戻り値と引数の値が何を指しているのかわからないようなコード書いてんのか?
ばっかだなー
>68 ミドルエンディアンて既に有ったよ。
ミドルエンディアンは2143と3412しか知らないが 元に戻らないやつもあったのか
実在しねーよ
>>40 ,46
ありがとう
gethostname, bind, listen以外はWSA系使って
_beginthreadex使わずにやる事ができた
hogeが駄目になってhogerが去り過疎スレになったな
>>75 自演で作り出した合意が合意じゃないって気が付いたらまた荒らすだろうから触れるんじゃねぇよ馬鹿。
15日1レスしかないぞぉ↓
今日は書き込み多くて盛況スレだね
嵐が去って過疎ってるのは もとから過疎ってるってことだよね
ここもあるだけで機能しないapiスレと同じになったってこと それがhoge基地の狙い
自分のグローバルIPアドレスへテスト通信するにはどうすればいいですか? socketでの家庭内PC同士の通信は成功しています
ルーターによっては無理なのでプロクシを通す
そのグローバルIPアドレスへテスト通信すればいい
>>81 内部LANと自分のグローバルIPと通信って普通はしないだろ
プログラムじゃなくルーターにこれを実現する機能があるかになる
家庭用ルーターにも出来る奴あるのかな
まぁ、自分でLinuxルーター立てやれ
85 :
デフォルトの名無しさん :2013/11/18(月) 03:44:53.82
ヤマハrtならできるよ家庭用つーより小規模事務所向けだが
>>82-84 グローバルIPアドレスが表示されるHPで確認したら
自分のPCと同じホームネットワークのPCと同じグローバルIPアドレスだったから詰みました
A <--Home Net--> B <--WWW Net--> C
Aから見た場合とCから見た場合で
Bのグローバルアドレスを知る方法はどうしたらいいですか?
ttp://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/02.html のソースをコピーしてsndPlaySoundを実行中リンクするのですが、wavファイルが鳴った後にエラーが出ます
The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared with one calling
convention with a function pointer declared with a different calling convention
そこで、typedef BOOL (sndPlaySound)( LPCSTR, UINT )の部分をMMSYSTEM.Hの宣言通りに、
typedef BOOL (WINAPI sndPlaySound)( LPCSTR, UINT )に変更したらエラーは出ませんが、
今度は音が鳴りません(戻り値は1)。原因と対処法を教えてください
OS - Windows Vista home edition
IDE - Visual Studio6 enterprise edition SP2
プロジェクト - Win32 Console Application
ちなみに実行時リンクでも同じくエラーもなく音が出ません。
>>87 非同期再生してすぐに終了してるせいだろ。SND_SYNCを渡せ。
>>88 できました。早速のご回答有難うございました!
>>86 プライベートネットワーク上にあるPCは契約プロバイダから割り当てられたグローバルアドレスを
共有して外部にアクセスに行きます。その仕組みを実現しているのがルーターです。
グローバルアドレスを使ってプライベートネットワーク上の特定PCにアクセスしたい場合は、
ルーターに「フォワーディング」または「静的IPマスカレード」と呼ばれている設定をします。
このやり方は、ルーターの取り扱い説明書を読むか、契約プロバイダに聞いてください。
VisualStudio2012にてC++で作成したスタティックライブラリを配布したいのですが、 利用者がVisualStudioの別バージョンや他のwin用コンパイラで利用できるように することは可能でしょうか? VS2012以外で利用すると、ランタイムライブラリのバージョン違いで リンクエラーになる気がしてます。
エラーになるような気がするけど、今までなった記憶がないな。 dumpbin /imports でライブラリがCRTを参照していなければ(埋め込まれてれば) いいんだよね。 ただ他のコンパイラとの互換性は保証されてないんでは
>>93 なるほど、ライブラリで標準関数を使うなら無理という事ですね。
DLLにするのが良さそうです、ありがとうございました。
/GL使わなければ後方互換だけ保障されていたはず
そうなんですか! VS2012上でライブラリを/GLなしでビルドすれば、 VS2010以前でも使える、という事ですか? VSの古いバージョンを もっておらず手元確認ができないのが辛いですが、VSのランタイムが そういう仕様になっているのは助かります。 利用側のexeが/GLなし、ですと利用者が不便なので難しいですね… 情報ありがとうございました。
それ前方
COMにしよう
>>96 VC2010の奴がVC2012でも使える
そうでした、古いVSが新しいVSの出力物を知っている はずがないのでそうなりますよね、勘違いしてました。 COM調べてみます、ありがとうございます!
WSAAsyncSelectで設定されたFD_WRITEが飛んでくるのは最初の1回だけですか? WindowProcで言う所のWM_CREATEですか? 初期化完了のメッセージをFD_ACCEPTで表示してるのですが そうなるとFD_WRITEの使い道がわかりません FD_ACCEPT(1度) -> FD_WRITE(1度) -> FD_READ(ループ) -> FD_CLOSE(1度) という流れだったらsocketの初期化をFD_ACCEPT, 初期化完了表示をFD_WRITEにしてしまおうと思うのですが FD_WRITEが他のタイミングでも呼ばれるのならまずいですよね
>WSAAsyncSelec そんなクソAPI使う奴の気が知れない なんでselectとか世の中の標準を使わないかねえ
>>102 Windows標準の同期オブジェクトをselectで同期できないからな。
逆にWindows標準のMsgWaitForMultipleObjects系APIでもソケットと直接同期できない。
WSAWaitForMultipleEventsはMsgWaitForMultipleObjects系と似てるが同期オブジェクトに互換性が無い。
WSA関連で使うイベントオブジェクトが標準のイベントオブジェクトだったらもう少しマシなんだが……
だからWindowsではマルチスレッドで回すか、WSA系の同期はウィンドウメッセージにしてMsgWaitForMultipleObjectsで待つかになるんだよ。
いまはapiなんて使わないで、普通にboost aisoじゃないの
WinAPI使ってるのにCreateFileじゃなくわざわざfopen使うようなのはちょっと
>>102 そんなクソな思考する奴の気が知れない
なんでWindows以外対応しなくていいって考えが浮かばないかねえ
>>105 テキストとして1行ずつの時はFILE使ってる
CとC++がごっちゃでも使えるのがVCのいいところでして。
リソースハンドルとC++のラッパオブジェクトが混在するのはうつくしくない
Win32APIの質問です ウィンドウが非アクティブ(他のウィンドウがアクティブ)なのを判定するにはどうすればいいですか? GetWindowPosみたいなのがあればいいのですが見つかりません
>>110 アクティブなウィンドウならキーボードフォーカス持ってるはずだから、GetFocusとかで
誰がキーボードフォーカス持ってるか調べれば分かるんじゃね?
GetActiveWindow
できました ありがとうございます
いえいえ
>>134 君はどうしてそういうことしちゃうのかなぁ…
134が一体何をした
なんだか良く分からんが、きっと真っ赤だな
122 :
134 :2013/11/21(木) 19:46:51.06
何ですかみなさん、失礼ですね
んだな、あの態度はちょっと許しがたい
自演楽しいか?
自治スレ荒らしてたのもこいつらだろ
荒らしじゃないよ 面白いと思ってやてる餓鬼だよ
くだらん
132 :
デフォルトの名無しさん :2013/11/22(金) 12:51:03.70
どうしてそういうことしちゃうのかなぁ…
いよいよ真打ちの登場です。 ↓をとくとご覧あれ。
…わかった。 この話はやめよ? ハイちゅんちゅん
>>135 そうだね。
wktkしてたが、低脳過ぎの寒いレスででがっくり
138 :
デフォルトの名無しさん :2013/11/23(土) 00:09:31.69
なんだかわからんがやっぱり謝ったほうがいい
>>134
今日の袋だたきスレ
たかが3秒のズレで・・
じえんのくせに
>>134 は泡吹いただろうなー
スレ開いたら133のはずが134になってるんだもんなー
みなさーん、最高ですかー?
サイコウでーっす!
初心者歓迎と幼児歓迎はちがいまーす みなさんかえりますよー
ここは朝鮮系歓迎スレで、非朝鮮系は来るなスレだよな
|ヽ、 | ヽ /:::::::::::::::::::::::::::::::::::::/:::::ヽ / ヽ─┘ ヽ γ:::::::::::人::::人::人::::λ:::::::::ヽ / (;;゚\)ll(/゚;;)\ /:::::::/ (;;゚\)ll(/゚;;) \:::::::ヽ / ⌒(__人__)⌒ .\ . i::::::::| ⌒(__人__)⌒ ,|:::::::ノ < ノ(, |r┬- | u > |::::::::l ノ(, |r┬- | |:::::::| \ ⌒ 、,|r l -ソ / ヽ,,,ノ、 ⌒、,|r l -ソ u , 'ヽ,,,ノ ノ_ _(_) `ー' ヽ ノ `ー' (_)-‐ 、 /l_j_j_j⊂) \ / (つl_j_j_j
まぁ連休ですしぃ って普通土日休みじゃんねぇー もったいなーい
お前ら、ちょっと過ぎたけどメリークリスマス!
あけおめ
ゴールデンウィーク楽しかったわ
ISO/IEC 14882:2003 の 12.2 Temporary objects によると、 下記のような一時変数の const 参照束縛のライフタイムって、 変数 a の存在できるスコープで保証されるじゃん? class A; A func() {return A();} const A& a = func(); そこでふと疑問に思ったんだけど、 下記のようにクラスのメンバで const 参照を保持する場合も、 一時変数のライフタイムって b のスコープで保証されるのかな? class B { pubic: B(const A& a) : m_a(a) {}; const A& m_a; }; B b(func());
一瞬 日付を忘れる時ってあるよねw
コンパイル時の処理とリンク時の可能性も有るメンバ初期化を同列に見るなんてセンス無いわ
>>152 func() の戻り値である一時オブジェクトで参照を初期化しているわけじゃない(class Bを初期化している)から
12.2 にある延命される条件には該当しない。
× 一時変数 ○ 一時オブジェクト
変数なんてない、あるのはオブジェクトだけ 豆ね
ばーか
class Model { std::vector<int> vi; } とするとvectorがサポートするメソッドをすべて公開し その中か呼び出すという七面倒なことになるのですがなにかいい案はありますか? public: push_back(int i){vi.push_back(i);} ....
>>159 hoge君、何をするためのなにかいい案なんだhoge?
>>159 public 継承する。
または private 継承して using を必要なだけ書く。
>>159 何をしたいのかよくわからんが、いっそのこと vt 公開すれば?
参照返すアクセサがあればいいだけのような。
typedefでいいじゃん
派生クラス側の仮想関数にも(それ以上継承されていなにも関わらず)virtualがついていたりいなかったりするんですが、 明示的に仮想関数ってことを表すためって解釈でいいんでしょうか?
はい
ありがとー
>>159 の質問はわざと低脳には理解できないようにした質問だろ
これは低脳排除するときにやる手だろ
でも、低脳は頓珍漢レスするからな
↑頓珍漢の王様が降臨しました
↑頓珍漢レスの最底辺民が降臨しました
頓珍漢同士仲良くしてろよ
頓珍漢の王様や最底辺民、さらにhoge、アンチhogeまでいる楽しいスレ
>>172 紹介するぐらい仲良しこよし
日本語、abcなどのアルファベットを人間では読むことができないように、 暗号化したいのですが資料とかないですかね? ついでに、暗号化したものの複合化など
真面目な暗号は資料はあるが実装は手間だし、暗号化ライブラリを使え。 適当暗号は資料化する価値がないし、資料化されてるくらいだと定型文過ぎて意味が無い。 適当暗号は適当に逆算可能な数値計算で各文字の値を撹乱すればよい。 簡単なところでは適当な固定数値や数値列、nバイト前の平文を組み合わせてXORとかな。 暗号文を文字列表現するなら最後にBASE64なり16進数なりに戻せばOK。
今時DESの名を挙げる人は死んだ方がいい お願いだから、他人の迷惑だから死んでくれ
>>177 歴史的事情というのは無しですかトリプルDESも死んじゃってRijndael 一色ですかそうですか
ハッシュじゃないSHAとかあったっけ? そこ無視しても本文の暗号化聞かれてRSA出すあたりもどうかと。 公開鍵暗号って普通は鍵の暗号化だけに使って、本文はその鍵使った共通鍵暗号だろ
複合できず DES, AES, RSA, 暗号に近いところにある SHA あたりを
181 :
デフォルトの名無しさん :2013/12/01(日) 12:51:09.55
GnuPGってライブラリあったっけ? あれば使うのが手だと思う。
>>179 >公開鍵暗号って普通は鍵の暗号化だけに使って
公開鍵暗号系はコストが高いから普通そうするが、テキスト全部を公開鍵暗号でおくったっていい
SHA を含めたのは、参考文献にあわせただけね、でもハッシュ関数も暗号関係のお話では重要だと思っているよ
下記プログラムでビルドがうまくいきません。 二項演算子 '=' : 型 'A' の右オペランドを扱う演算子が見つかりません とのことですが、定義しているのになぜでしょうか? class A { int m_d; public: A(int data) :m_d(data){} A& operator=(const A &obj){ m_d = obj.m_d; return *this; } A operator*(const A& obj){ return A(m_d * obj.m_d); } int print(){return(m_d);} }; class B : public A { public: B(int d) : A(d){} }; int main() { B t1(100),t2(2),t3(0); t3 = t1 * t2; return 0; }
初心者はただの関数つかっとけ。それで完全に補完できる。
t3 が class B で [class B] = [class A] こうなってるからじゃね?
class B の operator = に class Aを受けるのが無いYO っつーことでさー
CC++をwww上で解説してる人多いと思うけど なぜに他と同じことしか書いてないの?
知識がないから。
Linuxでユニークなファイル名を生成しようと思いmkstemp()を使ったのはいいのだが、 iostreamでアクセスしているロジックがあって困っている。 CならファイルハンドルからFILE構造体の変換にfileno()があるが、iostreamの場合はどうしたらいいんだろう。
どうでもいいけどfileno()は逆方向だった。fdopen()だね。
今でしょ
class Foo{}; std::string classname = "Foo"; classname foo; ってやれませんか?
>>195 Foo foo;のFooを動的に変更したいということなら、諦めろ。
つーか、クラスの継承で事は足りないのか?
#define DECLARE(C,name) C name ていうのじゃダメなんだろうな、多分 DynamicClass* createClass(std::string){ ... } という力技もあるけど、ダメなんだろうな、多分w
デリケートゾーンってどこ?
禿げるところね
ビラビラじゃないの?
テカテカでもあるな
そのためのテンプレート様ですよ
実行時にやりたいんじゃないの
素直にファクトリクラス用意すればいいんちゃう
C++ってリフレクション機能ないのか。おいおい言語じゃないか
そりゃ時代遅れのC++なんて絶滅寸前だからビャーネもやるきないだろ
実行時にやるなんて甘えだからな
リフレクション遅いからな
コンパイラ実行時リフレクション
リフレクションってなーに
自己書き換えコード
ク クラステンプレート じゃだめなのか?
テンプレートは静的だから
コンパイル時においては動的
216は知覚障害車
218 :
デフォルトの名無しさん :2013/12/06(金) 13:26:21.72
気ままだよな
int c[10]={}; 今日まで知らなかったw
書かなかったら0初期化されるんだよね
222 :
219 :2013/12/06(金) 19:15:55.60
い いつのまに? って感じでしょw
10年前からじゃね?
少なくともC++は最初(1998年)からだな Cは知らん
CはGNU拡張だった。
>>219 すげー。こんなやり方あるのか。
今までC++での配列の初期化はゼロフィルしてたよ
そして、Cではforでくるくるしてた
こういう事ってどうやったらできる? 式が必要ですってなってできない #define funcval_samp1 2, 5 #define funcval_samp2 5, 5 #define macro_func(val1, val2) macro_func(funcval_samp1); // macro_func(2, 5); macro_func(funcval_samp2); // macro_func(5, 5);
#defineを使ってです
#define funcval_sample (2,5) #degine _adv_macro_func(a) macro_func #a _adv_macro_func(funcval_sample);
配列じゃ無くて構造体だが、Win32APIでよく聞くTipsとして STARTUPINFO si={sizeof(STARTUPINFO)}; でSDK/ターゲットOSバージョンごとのcbフィールドを適切にセットしつつ他を0フィル ってのもあるな。
>>230 それはただ単に構造体の第1メンバを初期化してそれ以外を0セットってだけなんじゃ
>>231 似たような文法で似たような用途の小ネタってだけですし。
>>230 STARTUPINFO si={sizeof(STARTUPINFO)};
でcbフィールドを適切にセットしつつ他を0フィルってなるのか?
cb位置って決まっているのか?
>>234 STARTUPINFOは第1メンバがcbだろ
#define macro_func(val1, val2, val3, val4) func(val1, val2, val3, val4) #define macro_val23 2, 3 macro_func(1, macro_val23, 4); こんな使い方はどうやればできますか?
mblen にイテレータを使うにはどうしますか? const char* でなくて istreambuf_iterator 使ってファイルストリームバッファをmblenに直接読ませたいんです
>>234 Win32APIでcb(構造体サイズ)メンバを持つ場合、ほぼ第一メンバに来てるからな。
例外ってあったっけ?
>>236 #define macro_func(val1, val23, val4) macro_nothing(macro_func2(val1, val23, val4))
#define macro_func2(val1, val2, val3, val4) func(val1, val2, val3, val4)
#define macro_nothing(a) a
#define macro_val23 2, 3
macro_average(1, macro_val23, 4);
これで警告も無し(Level4)でいけたけど
macro_func -> macro_func2で怖い事してる気がする
あぁごめん macro_func(1, macro_val23, 4);ね
msのコンパイラじゃそれはとおらない #define hage(hige,huge) #define hoge 1,2 hage(hoge)は hage((1,2),)として展開される
macroがmankoになっただけじゃね?
>>234 何故サイズ値をもつ必要があるのかを考えれば自明
必要などない マイクロソフトのセンスを疑う
と、何にも作り出すことが出来なくてケチをつけるだけの人間が申しております
必要ないことは認めるんだ
は?どうして「必要ないことは認めてる」ことになるの?(笑) こんなのPOSIXのbind関数に第3引数が必要なのと同じようなもので ケチつけてもしようもないこと
OSによってサイズが変わる事があるだろ そのためのサイズだろ
252がバカ過ぎる件
>>251 >ケチつけてもしようもないこと
やはり必要ないことを認めている様にしか読めないのだけれど
必要性があろうとなかろうとそこに存在するのだから尊重すべきだ 最終的に必要だったかどうかを結果だけを見て判断するのなら小学生でもできる それでもあえて否定するのなら その前にオマエラの股間にぶら下がっている役に立たないものをちょ(文字数制限によりこれ以上書けません
必要性はないのですね。 あまり突っ込むとハゲーりんになってしまうよ。
>>255 >最終的に必要だったかどうかを結果だけを見て判断するのなら小学生でもできる
小学生ができようとできまいと
間違ったものを間違ったと認識することを否定しては
カイゼンはできません。
そういう人は組織にとって邪魔なので首つって死んで欲しいです
#include <iostream> #include <cstring> using namespace std; class person{ char name[32]; char sex; //男 M 女 F int age; public: int show(); person(char * ,char , int); }; inline int person::show() { cout << "氏名: " << name << endl; cout << "年齢: " << age << "歳" <<endl; cout << "性別: " << sex << endl; return 0; } inline person::person(char *nm, char se ,int ag) { strcpy(name,nm); sex = se; age = ag; } int main (void) {person Yamada("山田太郎",'M',26); person Tanaka("田中花子",'F',24); cout<<"---------"<<endl; Yamada.show(); cout<<"---------"<<endl; Tanaka.show(); cout<<"---------"<<endl; return 0; }
クソコード
> char sex; //男 M 女 F →enum class使え > person(char * ,char , int); →文字列はconstで受け取れ >strcpy(name,nm); →長さチェックぐらいしろ
>>244 とか荒らすのが目的で住み着いてるんだろ
何言っても無駄
構造体サイズが必要ないとか言ってる奴はOSのバージョンアップでAPIのパラメーター増やしたかった時どうしたらよかったと思ってるの?
APIを新設すればいいんじゃないの?
その新設されたAPI使った場合古いOSで動かなくなるんだけど? それともそのAPIを持ってるか事前に調べて使い分けるのか?C言語でそれかなりめんどくさいと思うんだけど
増えたパラメーターを使うならどうせ旧OSじゃ使えないじゃん
使えないなら無視していい程度のもんとかあるだろ
旧OSをターゲットにしてるソフトが、そのままで動くようになってるか否か
無視していい程度のパラメーターなんて増やす意味あんの?
>>264 別のAPIを用意するか、バージョン番号を含めるに決まってるでしょ
どうしてサイズとバージョンがリンクしちゃってるの?
サイズ変更なしの仕様変更はどうするの?
ばかなの?
動作や見栄えを細かく制御するとかいくらでもあるだろ 頭の悪い奴はこれだから使えねー
動作や見栄え変えたら旧OSで動かないじゃん バカじゃねーの
↑↑↑↑↑↑↑↑ これだから頭の悪い奴は使えねー 本当にかわいそうになってくる
言い返せないなら無理してレスしなくていいのよ
struct temp{ DWORD cb; /* 旧メンバ */ #ifdef NewVersion /* 新メンバ */ #endif } こうしたら新旧対応できるだろ というか定義されてるファイル見たりしないのか
LinuxやMacって知らないが、これらでもcbフィールドみたいなのあるのか
非実在青少年
>>271 > サイズ変更なしの仕様変更はどうするの?
互換性に拘るWindowsがそんな事するわけないだろ。それが許されたら古いOSは新しいバージョンの構造体が渡されたら何も読めないからまったく動けなくなる
>>277 無いLinuxの場合はカーネルのABIは変わらないようにかなり気を付けられてる。
そこはかなり限られた範囲で、Windowsでいうcb取る構造体を使うようなAPIは含まれていない。
そのあたりをカバーするGTKやらQtやらのUIツールキットは、それほど厳格にABIを守ろうとされてない。
オープンソースの世界だから、使ってる方を直せばいいって感じ。
ABIはディストリビューションによっても変わるしね。 最近SteamとかでLinuxに参入してるプロプライエタリのゲームとかアプリは自分専用に使うライブラリ一式持って行ったりstaticリンクにしたりしてディストリビューション間の違いや付属ライブラリのバージョンの変更に対応してる。 WindowsでいうとUser32.dllをアプリ毎に持ってる感じ
Macもカーネルに近い部分はLinuxと一緒 それ以外のUIとかのフレームワークはAPIを分けられてる Objective-CだからサポートしてないAPIかどうかの判定はメソッド一つでわかるので楽だけど、無いAPIを呼ぶと例外発生する。 iOSでもバージョンが上がったらかなりのアプリが動かなくなってるのを見ればアップルがそれほど互換性を重視してないのがわかると思う
>>236 変更可能ならこうすればマクロいらんぞ
#define macro_val23 2, 3
func(val1, val4, val2, val3)
func(1, 4, macro_val23)
286 :
デフォルトの名無しさん :2013/12/09(月) 17:50:05.57
VisualC++2010なのですが、 _controlfp_sで割り込み例外マスクを解除した場合、 どうやって例外を補足するのがスマートなんでしょうか? とりあえずC++例外として catch (...) で捕まえてますが、 例外の内容がわかりません。
例外にはC++の例外と構造化例外の二種類ある。C++の例外はtry-catchで捕捉できる。
それで説明したつもりか
289 :
デフォルトの名無しさん :2013/12/09(月) 19:09:11.63
構造化例外は__try-__exceptか__try-__finallyで捕捉可能。
それで説明したつもりか
291 :
デフォルトの名無しさん :2013/12/09(月) 19:16:22.18
ググれ
292 :
デフォルトの名無しさん :2013/12/09(月) 19:22:54.80
構文は __try { ... } __except (式) { ... } 式の中にはGetExceptionCode()を含めることができる。
それで説明したつもりか
MSDNを参照されたし
それで説明したつもりか
SEH例外を使うのが普通ですか? /EHaオプションでC++例外としてキャッチできているのですが、 それを生かす方法はありませんか
1.VC++では構造化例外とC++例外の二つがある 2.前者は__try-exceptなどでキャッチする 3._controlfp_sに関係するのは前者 4.catch(...)でキャッチできたのは偶然じゃね?
298 :
デフォルトの名無しさん :2013/12/09(月) 19:40:29.46
std::exception::what
299 :
デフォルトの名無しさん :2013/12/09(月) 19:45:38.06
/EHaオプションはパフォーマンスに影響するし、他のコンパイラで使えない。避けるべし
VS2013が出てたの知らなかった。 2008STDからうpだてできるかなぁ。
VC++使ってDLLを作る事になったのですが、今までVC++もDLLも触ったことないのでさっぱりです DLLってしょせん関数の塊ですよね? sub1という関数とsub2という関数を持つDLLを作ったとします 1.sub1で定義した変数をsub2で使うことは出来るのでしょうか? 2.例えばsub1が何回呼ばれたかをsub1内で覚えておくことは出来るのでしょうか? 関数って一度呼ばれて実行が終わると使われた変数とか全部開放されるような気がするのです なので関数間の値の受け渡しとか、関数が終了しても覚えておきたい値とかどうするのかなって こんな超初心者でバカな質問で申し訳ないがよろしくお願いします
VC++もDLLも関係無い static変数なりglobal変数なり調べれ
>>302 基本、アクセス毎、初期化されデータは消えるはず。
DLLにマルチアクセスする場合、アクセスした情報を残したい時、特有の手法がある。
一度のアクセス内ではふつうのC/C++のプログラムと同じでデータは保持されている。
>>303 >>304 なんらかの方法があるって事ですね
了解です。もっとググって勉強してきます
ありがとうございました
>>305 そのDLLは複数のプロセスから呼ばれるのか
単一のプロセスから呼ばれるのかでも変わってくる
>>302 VCのアプリケーションウィザードで DLL のプロジェクト一式をさくっと作れるから
最初はそれをいじって検証してみるといいんじゃないか
そかリンクの後、他のAPからもリンクされることもあるわけね。 そんな事全然考えずに作ってたなぁ。
>DLLってしょせん関数の塊 どうしてこう馬鹿が多いのか
すいません、なにか間違ってますかね?
リソースDLL
そういうレベルの話?w
うむ
COM DLL .NET Frameworkのライブラリ 関数をエクスポートするDLL クラスをエクスポートするDLL 変数をエクスポートするDLL つまり拡張子がなんとなくDLLになっている以上の意味はない
>>310 DLLは本来ドライバとアプリの橋渡しに使うもの
DLLを理解するためにはハード、ドライバ、OSのカーネル等を理解しないと駄目ニダアルネ
滅茶苦茶わろたw
>>316 DLL作成の前に必ずドライバ作りの勉強をやらされるよな
ドライバ作りの勉強にはビデオドライバが定番
ビデオドライバすら作れない奴がDLL作るってってありえない
だろ!
ネタをネタと
>>302 普通のlibを作るところからはじめろ。
ところで、C/C++の知識はちゃんとあるの?
エスパー力が足りてない
バビル二世さんは言うことが違う
いっぺんチュートリアルで作ればいいのだ。 そっからいろんな疑問が出てくるかと。 良くあるのがVCでDLL作って、VBから呼ぶってやつ? 今は違うのかもサセン
325 :
デフォルトの名無しさん :2013/12/13(金) 02:43:57.37
// A.h class A { いくつかの関数 B *b; }; // B.h class B { いくつかの関数 A *a }; // A.cpp void A::hoge() { b->foo(); } // B.cpp void B::bar() { a->foobar(); } 関数の引数としてとる場合や、メンバ変数としてポインタを持つのみならプロトタイプ宣言で循環includeを回避できるということを知ったんですが、 上記のように互いの実装部で互いの関数を呼び出している場合、関数を変更せずに循環includeを回避する方法はありますか?
>>325 A.cpp, B.cpp ともに、 A.h, B.h の両方をインクルードしていれば何も問題が無いように見える。
それのどこで「循環include」なる現象が起こると思うの?
あれ・・通った・・お騒がせしました
>>328 hoge厨はやっぱヴァカなんだな。
脳障がい乙。
330 :
重要 :2013/12/13(金) 06:19:17.04
【重要】
hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
※
>>1 をよく読んで下さい
俺、C++触らなくなってだいぶ経っちゃて、忘れてる 部分が多いのだけど 例えば、class Aってのがあって、A aobj;と、宣言してあるとして aobjに、フィールド(C++でフィールドって言ったけ?) 用に、セッターを、作っておいて、フィールドに 値を入れたとします。 で、class Bってのがあって、Bに、メソッドvoid setA(A & a) ってのがあるとして setA にaobjを、入れたらデストラクタは走ったけ? だいぶ忘れてる。
>>331 class A と class B の関係は?
走るわけねーだろ
フィールドのくだりを説明した意味がわからない
>void setA(A & a) aobjの実体が呼び出し元にあるのに Bに参照を設定しないで下さい void setA(A const &a) コピーする void setA(A *pa) ポインターで参照するのみ void setA(shared_ptr<A> a) 共有する void setA(A &&a) 意味的に移動する
>>330 とかレス番飛んでるけど、
「自分はスルー出来なくて、スルーしない奴は荒らしなので、自分は荒らしです」
って自己紹介がまだ続いてんのかな。
他人にスルーしろ言う前に自分がスルーしろよアホ。
338 :
331 :2013/12/14(土) 04:35:58.97
>>332 特に意味は無いです。
単純に、setA にaobjを入れた時に
class A のデストラクタが走ったっけな〜?
って、思っただけです。
まぁ、コードで確認しろと言われれば
それまでなんですけどね。
>>328 その書き方で通るわけ無いだろ。
hoge厨はやっぱヴァカなんだな。
やっぱりホゲは禁止でよかった
--A.h
class B;
class A {
B *pb;
};
341 :
重要 :2013/12/15(日) 21:01:43.98
【重要】
hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
※
>>1 をよく読んで下さい
このコピペ鬱陶しいし次スレ立てる時に
>>1 のhoge禁止取っちゃおうぜ
>>340 >レス番飛んでる
ってのはウザイからスルーするためにNGしたってことだろ?
完全にブメじゃねーか
なんだそのブメ。略し過ぎってもんじゃねぇぞ。
330はアンカー付けてないから336は意識過剰
>>342 コピペで済んでるだけマシ
昔みたいにhogeが書き込まれるたびに罵声の応酬が発生するほうが鬱陶しい
どうしても気になるなら「hoge」をNGに入れておけ
そうすれば
>>341 も見えなくなる
どう考えても
>>1 にhoge禁止のルールが入ってからの方が平和
クソレスも少なくなった
今後も続けるた方がいい
hoge禁止で状況改善?? 気のせいだろう。
hogeに過剰反応してるやつの方が遥かにうざい。氏ね
過剰反応してるのはQz コイツはhoge荒らしをあおって楽しんでいる
>>350 お前が一番必死に見える
特定コテハンに粘着するのはそもそも2chのルール違反
最悪板でやれ
>>352 いまは必死な奴が2chする
hogeに必死、アンチhogeに必死、こてに必死....
必死な奴は基地、ということで2chは基地の溜り場
>>343 NGする意図なんて人それぞれだろ。
>>347 荒らしてた奴がそのマイルールを連投するようになっただけだろ。
何も変わってない。
>>354 hoge基地大降臨以後、普通の奴がC++系スレから居なくなったって感じだし
ここもだけどC++スレも底辺スレになったよね。来年にはapiスレに並ぶ底辺スレかな
351,352,354,355,356,357 自演だよな?
>>357 自演だよな?ではなく、俺の自演だよって言いなさい
>hoge基地大降臨 hogeは禁止しません宣言でスレ立てして 700ぐらいで釣りでした宣言した件?
>>358 自分で自分にアンカするような奴だしなぁ・・・
超初心者な質問します。 現在中学生で将来ゲームを創る仕事をしたいと思っています。そこで、c++を勉強しようと思いますが、そのまえにc言語を勉強した方が良いですか?あと、c言語または、c++を使ってBF4などのFPSゲームを創る事ができますか?
全くの初学者ならC言語から勉強したほうが良い(というかそうせざるを得ない) FPSゲームはC++でなくても可能なんじゃないかな?もちろんC++でもできるが
363 :
デフォルトの名無しさん :2013/12/18(水) 23:51:12.88
C言語はいらん。 C++で十分。 C言語をやるのに、アセンブラや機械語が必要か?と同じ事。 あとHSPをすすめる。 これで作れれば手間さえかければC++でも作れる。
windows用じゃないですかーヤダー
365 :
デフォルトの名無しさん :2013/12/18(水) 23:59:35.94
≫362,363さん まだ僕には時間があるのでc言語からやって行こうと思います。回答ありがとうございました。
>C言語をやるのに、アセンブラ 勉強する と やる をすり替えた前提で話をしないで下さい。 C++はCに比べてコンパイラーが裏で生成するコードが多すぎるから 勉強としてはCもやって損は無いと思うけど、 せざるを得ないとまで断言されるとそれは違う。
いや、C言語-アセンブラ・機械語の関係とC言語-C++の関係は全くの別物だろ。CはC++の真部分集合だぞ 敢えてC言語のみの環境を整えて学習する必要はないけど、C言語的なプログラミングを先に学んでからC++特有のプログラミングに移るべき
Cから段階を踏んでという主張は一見真だが、 初心者をいきなり printf の罠に放り込んでのた打ち回らせるのは犯罪に等しい
なんだprintfの罠って
HSPってなんですかぁ オロオロ
printf("うんこ%d個\n",4);
printf("%d\n", "Hello, world!");
printfで躓くようなのはどの道ゲームなんか作れんでしょ それより初心者がCに躓く可能性は懸念するのに、Cの数十倍難解なC++に躓く可能性を考えないのはなぜだ
昔:C→C++ 今:Java/C#→C++
俺もCからC++に移った口だけど やっぱりCの知識がある分C++を学ぶの楽だったよ
そりゃCの知識を利用できるからな
CプログラムをC++コンパイラに通せば あら簡単 もうC++プログラム
ぶっちゃけCじゃプログラミングなんかできないよな C++なしにWindowsアプリつくろうと思ったら発狂するわ
出来る。 発狂するのは同意
VC++EE使ってるせいでCでやってるつもりでもC++の機能を使ってる可能性もあるで
昔はC使えればソフト作れたから、Cが入口として成り立ってた 今はCが使えてもソフトは作れないから…Cから始めてC++にせざるを得なかったってとこでしょ
今でもCでソフト作ってるよ 小規模の組み込みでw
楽して作るんならC#を使うし、 低レベルのチューニングを重視するならCを使うし。 C++は楽でもなければ低レベルでもない非常に中途半端な立ち位置。
>>386 低レベルのチューニングを楽にできるのがいいんじゃねーか
>>387 Cより実行速度が遅いとか思っちゃってる人なんだろ。
そっとしといてやれよ。
仕事が欲しいならJavaだしな 最近はC++の大規模プロジェクトなんてないしな
Cの課題でわからないことがあるのですがここでいいんですかね?
>>390 課題はお断り
ホゲも禁止
Cの質問なら歓迎
printf("%zu", sizeof(int)); どうしてvc++はこんな簡単なコードすらマトモに動かないのですか?
そりゃ原因を調べたりぐぐったりする能力がないからだろ 簡単に言えば無能だから
天下のマイクロソフトに対して無能とは大胆だな
文章読めないんじゃしょうがないな
>>393 VC++を使っている奴が少ないせい(WinでC++使っている奴が少ない)で、文句言う奴がほとんどいなくて
たくさんのバグが放置されているんだよ
VC++はユーザー少ないから新C++への対応すらあんまりやる気なしだし
MSはWinではC/C++ではなくC#等を使えだし
VCの%zuや%tdはどう考えても意図的 C99が嫌いなんだろ
zu対応してるのか?
2つ前のレスくらい読め
MSのC/C++は「御託はいいからVC6使わせろよ」と叫ぶ人向けの製品 lambdaじゃVariadic templatesじゃ言うヤツ等は対象外
WinのC/C++ってVC6だしね
>>403 は無知だなあ
1998年にvc6が出た後も、2002,2003,2005,2008,2010,2012,2013
とバージョンアップして
ラムダもVariadic templatesもあるのに
>>382 拡張子 .c にしとけば C++ の機能使ったらエラーになるよ。
auto fuck() const throw() -> void final override {} どうしてG++はこんな簡単なコードすら マトモにコンパイルできないのですか?
g++ではoverride finalを->の前にお書き下さい
VC6しか知らん奴だったのか 納得
VC6: 1998年6月 C++98: 1998年9月 これマメチな
VC2013になってもC++11をフルサポートしないってMSはC++やる気なしだよな
11に拘ってるのおまえらだけだからな
2012年9月出荷のコンパイラが2011年9月の規格をフル実装 してないからやる気がないだなんて MSをけなしたいだけに思えてならない。 よほどMsが嫌いなんだな
>>411 そうそう、WinのC++はVC6で十分
VSは言語なんてどうでも良い。IDEがすべて
415 :
デフォルトの名無しさん :2013/12/19(木) 22:38:36.76
言語(バージョン)が関係ないというやつほど 最新版がいいだろ。 バグや性能など面で。
416 :
デフォルトの名無しさん :2013/12/19(木) 22:43:18.55
VSで使えないならC++11の価値は十分の一。 VSで使えてこそ意味がある。 C++の流行り廃りはMSにかかってる。
417 :
デフォルトの名無しさん :2013/12/19(木) 22:53:18.24
みんなもうちょっと開発環境のモジュール化してくれればいいのに 好きなエディタとコンパイラーとリンカーとデバッガーを組み合わせて統合したい
エディタとコンパイラとリンカまでなら自作でもそう難しくない だがデバッガは選択肢がほとんどないし インテリセンスまで統合するには難易度が跳ね上がる
clangのおかげでインテリセンス相当のものは色んなエディタで使えだしてるよ。
>>415 最新版の方がバグが少ないの?
最新版の方が性能がいいの?
いみわからん
421 :
デフォルトの名無しさん :2013/12/19(木) 23:29:42.17
おまえがなー 性能劣化してたら新バージョン出す意味が無い
最新!高機能化!複雑化!盛りだくさんのバグ!
423 :
デフォルトの名無しさん :2013/12/19(木) 23:35:46.98
あまり見つからないがバージョン比較
http://crystalmark.info/special/VisualC71.html VisualC++ 7.1 の衝撃 [ 2003/08/14 ]
VisualStudio .NET 2003 の VisualC++ 7.1 はついに Pentium 4 最適化機能が実装されました。
VC7.1 で新たにサポートされた G7 オプションは Pentium 4 および Athlon に最適化されるそうで、適用したところ一部で非常に大きな効果がありました。
CrystalForce 400K (Pentium 4 HT)
QuickSort / RandMeanSS / Mandelbrot において劇的に性能が向上していることがわかります。
以前、NetBurst は予測困難な条件分岐に弱い(パイプラインの段数が多いため) ということが頻繁に取り上げられており、
私も Mandelbrot のように条件分岐のオンパレードな処理は苦手と考えていたのですが、どうやらコンパイラの改良で改善できる問題のようですね。
CrystalForce 500K (Moble Athlon XP)
RandMeanSS で神がかり的なスコアアップを果たしています。
総評
ここまでコンパイラで違うものなのか!! というのが正直な感想です。G7 オプションですが、Pentium III でも大きな効果があるようですね。
VisualC++ 7.1 マイナーバージョンアップかと思いきやこいつはとんでもない魔物のようです。
数値計算を Windows でやっている方は必須のバージョンアップではないでしょうか!!
未だにVC++6が最高だと思ってるような老害は放置してあげてください。 本人はそれが幸せなんです。
C++11とVC6の二択だと思ってるの?
>>425 MSDNの使い勝手はVC6のが最高。
ただ、ひたすら内容が古い。
たとえばwindowprocedureの中身だってlambdaを使えば小奇麗に処理関数を呼べるのに前世紀のHANDLE_MSGマクロのままだろ?
で?
言語(バージョン)が新しいと バグが少ない 性能がいい 小奇麗に書ける
バグと性能に関しては前バージョンよりも悪いことはあり得ると思うが 特に言語の規格が変わったあとはコンパイラが追い付いてないこともあるぞ
11推しの奴は言語verとソフトverがごっちゃになってる バグの多い少ないは、そのソフトがどれくらい保守されてるかによるから、 マイナーバージョンが大きい(保守された回数が多い)方が少ない。メジャーバージョンだけ大きい場合はバグが多いと思った方がいい 性能は何の性能のことだよ ビルド速度ならハードが同じなら古いバージョンの方が速い=性能が高い。これは言語verには無関係 ビルドされたバイナリの実行速度も同じ。言語verにはほぼ無関係 小奇麗に書けるってのは… ソースの綺麗な書き方を知らないだけだろw うまい奴が作ったマクロばりばり書式なんて読みやすくて笑えるぞ
433 :
デフォルトの名無しさん :2013/12/20(金) 02:56:44.38
VCのメジャーバージョンは、IDEとのセット販売に合わせてあげてるだけだろ。 中身は新規開発でなく以前改良だろ。
一般的にメジャーうpはそれ以前のバージョンに比べて変更箇所が多い 変更箇所が多い分だけバグの可能性も高まる 新規だから、改良だからってのとは無関係だよ
435 :
デフォルトの名無しさん :2013/12/20(金) 03:21:33.15
一般じゃねえ。明らかに統合環境の販売のときにあげてるだろ。 コンパイラは大して変わってなくても、変わっていても、 他との都合でメジャーバージョンが上がる。
>>434 の言うバグ=IDEを含めた開発ソフト全体でのバグ
>>435 の言うバグ=VSに含まれるC++コンパイラツールのバグ
どっちもソフトのバグの話題。言語バージョンのバグ(=C++仕様上のバグ)とは関係がないな
432は15年前で脳の進化が止まったようで 哀れ過ぎる
>>432 ビルド速度を高速化する修正とかもよくあるから一概には言えない。
実行速度も最適化アルゴリズムの修正とかもあるから一概には言えない。
メジャーバージョンが上がってたらそれこそ修正もありえるだろう。
long double が無くなって(泣)
>>439 80bits "long double" とか long long integer(爆笑) とか、修飾子を恥も外聞も問わずに接着して型を生み出そうという仕様は言語仕様としてはウンコだ
ウンコがいうんだから間違いない
long long は流布されている MSVCRT.dll が対応していないとか、いまだに迷惑している、これもいいかげんなんとかしてほしい
>long long は流布されている MSVCRT.dll が対応していない MSVCRT.dllを使う人がいたとは知らなかった
実際の話、windowsのVSのVC++のmfc使ってる人ってどんだけいんの? Qt使ったほうが万全良いと思うのですが。
>>443 cygwinとやらに内蔵のコンパイラーがMSVCRT.dllとリンクするクソ設計になっているのか。
それはcygwinがlong longに対応していないと言うべきだ。
Windows自体はC++の開発環境機能を持たないんだから
んなものはコンパイラが用意すべき
long longに対応してないの意味がわからん 全部の関数にlong版とlong long版を用意しろというのか??
446 :
デフォルトの名無しさん :2013/12/20(金) 15:36:42.17
プログラムのメモリサイズをls -lで確認するお笑い芸人の新しいギャグだろ
>>445 printfが%lldを認識しないってことでは
>>440 >ウンコがいうんだから間違いない
自分がUNKOだという自覚はあるのですね。
QZのなりすましはスルーして下さい。
winでC++は超少数派なんだから、いい加減対応で問題ないよ
は?
はぁ?
はぁぁ?
はぁぁぁ、hoge?
char* aaa() { char result[4]={0}; return strcpy(result,"aaa"); } はだめだとおもいますが、 char* bbb() { return "bbb"; } は良いのでしょうか?
そのresultは関数の中のローカル変数で、strcpyの返り値だが、関数を抜けるとスコープからも抜けて無効な値になる 一報文字列リテラルは内部的にstatic char[]なのでスコープを抜けても有効
初心者ではないですがw、 デストラクタが走って、内部メモリがクリアされるのは return が終わってからですよね。 a=func();
>>458 その func() は、セミコロンまで
a はスコープを抜けるまで
>>456-457 はアスペ
「その通りだが呼び出し側でメモリを用意してそこにコピーしろ」
と言うべきだ
errno_t manko(char *restrict p_result, rsize_t result_size)
{
return strcpy_s(p_result, result_size, "aaa");
}
今時そんなクソコードで「べき」とか
A: その回答はアスペだな。Xすべき B: そんなクソコードで「べき」とか Bはコミュ障 「回答が質問者の背景を考慮できていないのではないか」 という指摘が理解できなかった
>strcpy_s マイクロソフト大勝利だな
bbb()はconst無いと駄目なコードだけど、const付いてれば何の問題も無いコードだろ const char*返せばいい場所で一々文字列コピー要求されるとかの方がクソだと思う
>const無いと駄目 どして?
書き換えられないから
文字列リテラルの型ってconst char[]だよな? char*に文字列リテラル代入してもエラー出さないコンパイラが多いけど、これってCの仕様的にはどういう挙動なの?
エラーを出さないのが仕様です でも書き込んだら困ります
constは無くてもOKです 書き込んだらだめなだけです
プログラミングは、C言語から勉強しだして→C++→java(基礎) →C#→Android(java)ってな感じで、今はAndroidアプリ の製作を中心にやってるけど C言語での質問で、アセンブラの知識は無いんですが char *str="abc"; ってのがあったとして アセンブラ的には &strの番地(仮に123として)から 123にはa 124にはb 125にはc 126には0 が入ってると思って良いでしょうか? 間違ってたら、ご教示願います。
>>470 &strの値(str変数そのものの番地、仮に0x0100)、
strの値("abc"の番地、仮に0x0123)として、
リトルエンディアンの4バイトポインタで考えると
0x0100 23 (ココから4バイトで0x0123)
0x0101 01
0x0102 00
0x0103 00
0x0123 61 ('a')
0x0124 62 ('b')
0x0125 63 ('c')
0x0126 00 ('\0')
>>467 K&Rの初版本を100回読み直せ。
そういう事だ。
ROM焼きの障害になっている。
K&Rを持ち出すなんてどれだけ労害なんだ KoReanか?
>>467 確か、本来は const 付きが正しいけど、過去の経緯で const 無しでもエラーにしてないとかだったかと。
>>470 &str -> 0x2000
str -> 0x1000 (&str[0])
str[0] -> 0x2000 -> 'a'
str[1] -> 0x2001 -> 'b'
str[2] -> 0x2002 -> 'c'
str[3] -> 0x2003 -> '\0'
コピペの恐怖 &str -> 0x1000 str -> 0x2000
linuxだと実行時にOSがはねてくれるんだっけ? 昔某コンパイラで同一内容をもつリテラルのメモリ共有+書き換え可能の凶悪なコンボをみたことがあるけど
>linuxだと実行時にOSがはねてくれるんだっけ? それはコンパイラーが出力するコードに依存します
メンバ関数名を取得したいです。 printf("aaa:bbb()"); と書けばいいのですが、文字列を一々編集するのが面倒なので。。。
具体的なコードでお願いします
つ[puts(__func__);] 改行要らなきゃfputs(__func__, stdout)とでもかえとくれ。
>>478-479 コンパイラとリンカとOSのローダとOSの仮想メモリ機構に依存する。
どこかの段階で書き換え可能にマークされたらLinuxだろうがWindowsだろうが御仕舞い。
>>480 つ char* GiveMeMemberFunctionName() const;
>>472 おまえ、まだK&R100回とか言ってんの?
気色悪いですよ
そいつ、トリはずしたお笑い芸人 放置推奨
継承元のpulicなメンバ変数を継承先のコンストラクタで初期化しようとしています。 class クラス1 { public: int クラス1のメンバ変数; }; class クラス2 : public クラス1 { public: クラス2(int x0):クラス1のメンバ変数(x0){} }; 'クラス2' : イニシャライズ リスト内のクラス 'クラス1のメンバ変数' が基本クラスでもメンバーでもありません。 と怒られます。 なにが悪いのでしょうか?
> 継承元のpulicなメンバ変数を継承先のコンストラクタで初期化しようとしています 継承元のコンストラクタで初期化してください
どうしてもやりたいなら{}の中でやれ
今日は”中はダメ”っていわれましたorz
>>488 class クラス1
{
public:
int クラス1のメンバ変数;
クラス1(int i): クラス1のメンバ変数(i) {}
};
class クラス2 : public クラス1
{
public:
クラス2(int x0): クラス1(x0){}
};
日本語のエラーメッセージ読めないなら、チョーセン語のコンパイラ使えよ
>>493 死ねネトウヨ
あんま調子こいてると◯◯ぞ。
496 :
デフォルトの名無しさん :2013/12/23(月) 00:25:32.89
キモっ
わざわざAgeんな
よーしパパ上げちゃうぞ〜 アゲアゲ〜
499 :
デフォルトの名無しさん :2013/12/23(月) 01:38:31.53
age
B&&型ってなんぞ(ヽ´ω`)
すいませんが教えて下さい。 最適化をさせないために、volatileを、付けますが 最適化の弊害とは、例えばどういうコードが弊害に なるのでしょうか? 以前にも、同じ質問して、レス頂いたのですが そのレスの内容をコピペして保存するのを忘れてしまいました。 二度手間で恐縮ですが、再度 ご教示願います。 本当にすいません。
503 :
470 :2013/12/23(月) 07:53:54.52
>>471 さん
>>475 さん
すっごい遅レスで申し訳ありません。
471さんの例を見て、アセンブラの知識は
ほぼ皆無ですが自分なりに解釈すると
まず0x0100番地に&strの番地があり
0x0100番地の値?から論理和でstrの番地
に、飛んでると思って良いでしょうか?
505 :
494 :2013/12/23(月) 08:43:41.97
>>504 ネタのトリックコードを真に受けないでください
>>501 volatile をつけた変数は、
@それがアドレス空間に存在すること
A volatile 変数へのアクセス記述を端折ったりされなくなること
が保証される。
volatile int flag;
flag = 1;
flag = 1;
flag = 1;
とかけば、flag はアドレス空間に実在し、かならず三回 flag =1; を実現するコードが生成される。
ただし排他制御は別に自分で記述しなければならない。
他になにかあったかな?
>>501 Qzとかいうゴミカスの炎上学習法(でたらめ教えて訂正してもらう)に
巻き込まれちゃったね、このスレのレスは信用すんなよ
1.確認 USBメモリを用意します やや大きめのファイルをUSBに書き込みます ディスクをクローズする手順を省いていきなりUSBを抜きます 再びUSBを差し込んで内容を確認します 2.比較 USBメモリの表面に「ぼらたいる」と書きます 1.と同じ操作を行います 結果を比較してください
>>501 bool flag;
void func(void)
{
while(flag) {
処理
}
}
この場合最適化でwhile(true)に置き換えられるが
volatileを付けるとwhile(flag)のままになる
>>511 > この場合最適化でwhile(true)に置き換えられる
そんな処理系見たことねー
>>511 10年前の書籍を斜め読みしただけの知識で偉そうに最適化について
語んじゃねーよ どうせADW本だろw
肥え煮具
call clobber
ls -lをしのぐネタの仕込み中なんだろ
extern は要らない子っ!
>>517 同じネタばかり繰り返して痴呆症って言われない?
520 :
デフォルトの名無しさん :2013/12/23(月) 20:34:37.63
あれに匹敵するのは you is a big fool man! くらいしか知らないからねえ お前もっとすごいの知ってんの?
宿題を有料で解くスレは linux で kbhit を作ってくれというお題で、海外サイトのコピペでモリタポをせびった、とかはどう?
externが無いとerrnoみたいなグローバル変数が使えなくね?
マルチスレッド対応でそれぞれスレッド固有にする為に グローバル変数になっていない実装もあるよ < errno
524 :
デフォルトの名無しさん :2013/12/24(火) 01:28:01.20
ああそうよかったね
>>522 extern なくても C ならば何の問題もなくコンパイルできるよ、仮定義(tentative definition)、ていうんだよ
526 :
501 :2013/12/24(火) 04:08:51.15
>>509 わざわざ申し訳ありません。
それです。
>>503 >まず0x0100番地に&strの番地があり
&strは変数strの存在する場所を取得する「式」で「式」は「値」を持つけれど計算過程で出る「値」だから「番地」なんてないよ。
a=1+2;ってあった場合「1+2」って「式」は「3」って「値」を持つけど「番地」なんて無い。
&strって「式」で得られる値が(仮に)0x0100であったりするだけ。
>論理和でstrの番地
イミフ。どっから論理和なんて出てきた。
もういいから普通のアセンブラをいっぺん学んで来い。
525はどうしようもない馬鹿
>>527 >「番地」なんてない
&strは「0x100番地」という値を生み出す式だろ
何を言っているんだオヌシは
>>529 strの番地は&strで取れるけど&strの番地なんてねぇよ。
つ **
)**( ケツの穴が二つになっちまった
&&strでダメだっけ?
&42 を考えてみろ
&42は値42のアドレスを示してるわけだよね? &&42なら42のアドレスを指すアドレスがとれなかったっけ?
自分で試せばわかるだろ
アセンブリというかCPUわかんないとそうなるよね
んなもん、ブラックボックスのままでも理解できるだろう。 単に、メタ思考ができるかどうかだ。
意味がわからん もちっと噛み砕いて教えて下さい
int i=42; int *ip=&i; だとすると iが 0x10 42 &iとipが 0x12 0x10 &(&ip) が「&i」の演算を行ったアドレスである0x12 じゃないの?
load effective address = &演算子
int i=42; int *ip=&i; だとすると iが アドレス0x10 値42 &iとipが アドレス0x12 値0x10 &(&i) が「&i」の演算を行ったアドレスである0x12 じゃないの? だった
反論 int i = 42; int *ip = &i; int *ip2 = &i; とする ipとip2は(今たまたま偶然一緒の値を持った)別の変数なので当然別のアドレスが割り当てられているが では、君の見解だと&&iは何になるのか?
>>543 おお、演算のたびに変わる不定の値ってことですね!
>>544 そうじゃないよ
そもそもint *ipを定義しないで&&iを使ったらどうなると思ってるの
>>544 まだなんかおかしいな。
&i の演算に追加のメモリが使われるとも限らない。
したがって「アドレス」というものも存在しないかもしれない。
(追加のメモリが必要な別の演算(?)についてはその理解で近いかもしれない。)
いずれにしてもそんな不安定な要素はユーザーから使えないように言語仕様側で配慮されてる。
ここでいうと &&i がコンパイルエラーになるように。
&iを算出する際にメモリが使われないかもしれないし そもそも参照できないってことですよね?
はい
わかりやすい説明ありがとうございました!
550 :
蛇足 :2013/12/24(火) 14:45:57.50
変数にはメモリが割り当てられるって前提でコードを書けるものの、 実際に変数にメモリが割り当てられるかは最適化次第で変わるけどな。 int i=42;printf("%d\n",i); をコンパイルしてもiにメモリが割り当てられない場合もあるけれど、 int i=42;printf("%p\n",&i); をコンパイルするとiにメモリが割り当てられる事が期待できるとか。
そんな事言ってたら&&&&&&iとかどうなんのっと
int i=42; でメモリが割り当てられていなかったら42というのはどこに保存されてるの?
メモリ上のどこか
>>552 コードを解釈した結果、変数としてメモリに割り当てる必要がないと判断した場合はメモリを割り当てないということ。
レジスタに置いているかもしれないし、そもそも使われないかも知れない。
例えば、int i = 42;と定義していても、そのiを使わないのであればコンパイラは何もしないかもしれない。
>>552 例えばprintf("%d\n",42);のようにプログラムコードに埋め込まれる
一箇所に埋め込まれるとは限らないし元の値を保っていない可能性もある
int i=100,j=rand();printf("%d\n",j/i);とかだと逆数の1<<32倍だかそういう値として埋め込まれるんじゃないかな
int i=42;printf("%d\n",i); が printf("%d\n",42); に最適化されるってことでしょ
いや、>554の最後の行はprintf()さえしないケースだ。
整数除算で、割る数がリテラルの場合、掛け算になったりするよね。除算器がないマイコンとか。
除算器があっても除算は遅いから、普通のコンパイラなら掛け算にするね。 実数除算の場合も2の冪だったら掛け算にすると思う。
そんな時代もあったよね 今は、全部1クロックでできるんだから恐ろしい時代になったものだ
いやむしろパイプラインが当たり前になったから加算すら、最悪NOPですら1クロックじゃ終わらねぇぞ スループットなら1クロックになるかもだが
パイプラインが当たり前になったのって20世紀末だったような タイムワープでもしてきた?
パイプラインって消滅したの?
パイプラインって言われると石油を連想してしまう
埋まらないパイプライン問題がOoOの一般化でスルスルになったのが90s後半
>埋まらないパイプライン問題がOoOの一般化でスルスルになった 何いってるかちょっとわからないのでkwsk
簡単にいえばウ○コの太さは食事量で決まるって事かな 消化器機能の分化度はあんまし関係ない
アホみたいにパイプラインを長くして もせ3エンコ以外には使えないと噂されて 実際その通りだったPentium 4は21世紀だった様な気が。 スルスルだなんてとんでもない
>>570 今朝、寝ながらオナラして
うんこ漏れたかもと思って急いでトイレ駆け込んだわ
CPUキャッシュのサイズが〜とか前世紀末には言ってた気がする
大丈夫、今世紀も言っている。
575 :
デフォルトの名無しさん :2013/12/25(水) 22:53:26.21
重油のパイプラインって途中に穴が空けられて 少しずつ盗まれてるらしいな
577 :
デフォルトの名無しさん :2013/12/25(水) 23:05:59.98
>>576 そこまで詳しく知らんw
貧困で苦しむ国のドキュメンタリーか何かでやってた
それでさらにそういう盗人専用のガソリン精製屋がいて
盗んだ重油をそこに持ち込むとガソリンを精製してしてもらえるらしい
そしてそれを道端で売って生活の足しにするそうな
重油は精製済みなので、そこから揮発性の高いガソリンは 作れないかと。A重油であれば軽油替わりに使う事は可能。 原油と勘違いしているのではないかと
原油って粘度差とか不純物凄そうなんだけどパイプに流して詰まったりしないのかな。
>>578 原油の精製って結構コスト掛かるんじゃないの?
&&&&&func; *****fuck;
581 :
デフォルトの名無しさん :2013/12/28(土) 00:55:32.32
STLについて教えてください vectorに同じ値(int)を入れてsortとすると invalid operator< とエラーが出てしまいます。 std::vector<int> v; v.push_back(1); v.push_back(1); std::sort(v.begin(),v.end(),std::not2(std::less<int>())); 回避策は無いでしょうか?
>>581 >回避策は無いでしょうか?
STLという言葉を使う奴は本当に馬鹿だな
間違っているからエラーになるわけで
「正しい書き方を教えて下さい」って言うんだよ
エラーになるのはSTLのバグです( ー`дー´)キリッ
STLなどという用語を使う人の頭がバグです
>>581 これでエラーを出さないBCCも相当糞だな
VCかgccだけにしようっと
std::vector<int> v; v.push_back(1); v.push_back(1); std::sort(std::begin(v), std::end(v), std::not2(std::less<int>())); for (int i : v) std::cout << i << " "; std::cout << std::endl; おい、これgccでもエラーでないぞ 何かオプション付けないとだめなの?
588 :
デフォルトの名無しさん :2013/12/29(日) 12:59:20.76
っていうか、なんでエラー イミフなんだけど、同じ値が入ってるから? 同じ値が入ってるときはsortできないって・・・ STLも糞だなw
>>588 決まりを守らない方が悪い
だったらSTL使うなよ
使っておいて文句言う資格はない
エラーになるのはVC++のデバッグモードでの親切機能
VCでは確かにエラーになるな
592 :
デフォルトの名無しさん :2013/12/29(日) 13:21:30.97
>>589 使ってねーよ
だから、イミフってかいてんじゃんw
朝鮮人かよhw
>>588 イミフなのはお前の頭のせい。
>>582 のリンク先読んだか?
同じ値があるとsort出来ないんじゃないよ
馬鹿だから読んでも理解できない
>>593 念のため言っておくけど、規格上はおかしな比較関数を渡した時点で同じ値が無くてもダメだよ。
hwってなんですか? 新手の煽り?
はうー
http://www.cplusplus.com/reference/algorithm/sort/ >comp
>Binary function that accepts two elements in the range as arguments,
>and returns a value convertible to bool. The value returned indicates
>whether the element passed as first argument is considered to go before the second
>in the specific strict weak ordering it defines.
>The function shall not modify any of its arguments.
>This can either be a function pointer or a function object.
というわけだから、compがStrict Weak Orderingじゃなかったら既に未定義なんですよ
ソートの結果がどうなるとかいうレベルの問題ではない
まだやっとんのかいな〜 hitugi
使用通りではあるけれど「小さいかどうか」の lessでソートする糞設計だからこういう誤りが簡単に起きる
603 :
デフォルトの名無しさん :2013/12/29(日) 15:10:34.54
他人の作ったものに後出しで糞設計認定とか だったらお前が作れよhw
まるで小学生の「じゃあお前できるのか」発言だな。 動物園で「あのキリンさんだけ首短いね」という子供に 「短いというからにはお前はそのキリンよりクビが長いのか?」 というようなもの。
テレビで下手な歌を見て文句言う人にお前が歌えよ というようなもん
流れ読めてない奴がいるな
609 :
デフォルトの名無しさん :2013/12/29(日) 17:00:35.08
レスにリカージョンが使えるとわ勉強になりました
> レスにリカージョン 単なる無限ループだろ
613 :
デフォルトの名無しさん :2014/01/01(水) 20:20:46.03
大晦日に書き込みなしか
hoge荒らしがスレ立て間違えて自粛してるからだろう 嵐がいなければこんなペースでいい
クラスのポインタを突っ込んだlistのイテレータを取得して そのクラスのメンバにアクセスしたいんだけど、 以下のコードで、「-> か ->* の左には構造体のポインタが必要」と怒られる。 どうすればメンバにアクセスできる? std::list<TSampleClass *>::iterator itr = m_MyList.begin(); while (itr != m_MyList.end()) { int i = itr->member1; ++itr; }
(*itr)->
617 :
615 :2014/01/05(日) 11:09:38.08
はい、久しぶりに2次元配列扱おうと思ったらどっちがどっちだか忘れた double x[2][3]; は x[2]が3つあるって理解じゃダメなのか
ex1) int a[][3] = {{1,2,3,},{4,5,6,},}; ex2) (x[0])[2] = 3.14;
あくまで使うときに要素にアクセスする演算子だと思わなきゃダメなのか
>>618 char s[3][128] = {"aaa", "bbb", "ccc"};
文字列が3つある
つまりx[2][3]は3つのまとまった数値が2つある
型名のポインタやconstなんかの修飾順序が混ざってるのがなぁ… int* a,b;だとaしかポインタにならないってTipsが有るとか残念過ぎる。
>>622 そんな変な書き方をするからだ
int *a, b;
int がdecl-specifier
*a と b がそれぞれdeclarator
これでスッキリ
>>623 そんなバッドノウハウが必要な修飾規則になってるのが残念だって言ってるんだよ。
この程度でバッドノウハウとか頭湧いてますね
言語仕様をバッドノウハウとかキチガイ。 言語仕様自体がKUSOというのならともかく。
>>624 バッドノウハウとかあほじゃね
intという型のポインタa
intという型の変数b
当たり前やん
C所見では引っかかるポイントだから気持ちはわかる とりあえず、無理に、一行に複数書かなくていいんだぜ int *a; int b; C/C++は、ごちゃごちゃとしたstructの扱いに秀でてるから、そういうソースにも慣れてくる それこそ、いまどきなら、ごちゃごちゃとしたところをC/C++に追いやって、 上位をJavaなりC#なりで書き上げたっていいわけだ
629 :
624 :2014/01/05(日) 20:04:56.83
みなさんこの度は私のしょうもない発言で場を乱してしまい、 本当に申し訳ありませんでした。深く謝罪いたします。 とにかくバッドノウハウと言いたいの一心で書き込んでしまいました。 ほんとうに申し訳ありませんでした。
>>629 その程度で謝罪したりしていたら早死にしちゃうよwww
匿名なんだから大胆に書いて反応を楽しむ、くらいでもいいと思うよ、まあ粘着はやめておいたほうがいいね
QZみたいに図太くずうずうしく楽しむがよい
甘いな、謝れば済むなど
>>629 ナイスC++erになってナイス回答10本なw
632 :
デフォルトの名無しさん :2014/01/05(日) 23:37:52.38
重複で立てられた糞スレ削除されたなw hoge基地害ざまぁwwwww
int *a, b; int がdecl-specifier *a と b がそれぞれdeclarator これでスッキリ、かと思いきや int * や int がtype-id C++の文法はKUSO
>>633 はいはい、それはCを引きずってるだけだよ
お前にはC/C++は不向きでストレス溜めるだけだからもう2度と関わるな
635 :
デフォルトの名無しさん :2014/01/06(月) 04:02:04.27
質問させてください。 printf("%x", c); //c は char型 したときに ffffff80 と出力される変数cがあるのですが、 この変数cを int の 8に変換したい場合 どのようなコードを書けばよいでしょうか。 環境はWindowsのMinGWです。 よろしくお願いします。
636 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/06(月) 04:12:08.42
ffffffの部分は符号付きcharから符号付きintへの符号拡張。c == 0x80だな。charの一番上のビットが符号の1になってる。 8にしたいなら c >>= 4;でどうだ? ffffffをなくしたいなら、unsigned charにキャストだ。
printf("%x", 0xFF & c)
コテハンの後に間抜けな回答するなんてみっともないぞ。
何したいのかまったくわからんな BCDみたいな扱いで1桁だけ取り出したいとか
わからないならバカを告白しなくていいぞ
いや、出題が間違っているはずだ
644 :
デフォルトの名無しさん :2014/01/06(月) 12:32:21.61
命名規則で質問です。 今まで独自で規則を作っていましたが、いい加減ルールを統一しようと思いました。 とりあえず、googleのスタイルガイドでやってみようと思ったのですが、インスタンス(オブジェクト)の命名規則がよくわかりませんでした。 そこでみなさんの命名規則を参考にしたいのですが、独自で作成したクラスのインスタンスの変数名はどんな感じにしていますか? (例) ファイル名 myClass.cpp 使用時 myClass i_myClass; //iPhoneなので全角セミコロンすみません
>今まで独自で規則を作っていましたが、いい加減ルールを統一しようと思いました まず日本語が怪しい奴には無理だな
int i; i = _getch(); printf("入力された数値は%dです。",i);
>myClass クラス名にCamel形式は馬鹿っぽいので止めた方がいいぞ >i_myClass キモすぎだろう >iPhoneなので全角 馬鹿は死ぬまでなんとやら
648 :
645 :2014/01/06(月) 12:49:57.24
日本語が不十分ですみません。 ある程度規則を作っていますが、作っていくうちに、こっちの方がいいんじゃないかと試行錯誤してすこしずつ変わっていっています。 それなら、ベースをすでにあるものにすれば、そういった迷いが減るかなと思いました。
649 :
645 :2014/01/06(月) 12:52:21.86
>>647 キャメルじゃないとなると、スネークがオススメということですか?
オープンソースのソースを読め と一言ですむ
え、俺キャメル好きだけど変?
i_って何だよ?そんなの初めて見た クラス名は普通パスカルケースだろ?Java世界でさえ
654 :
645 :2014/01/06(月) 14:35:33.87
パスカルだろってことは、キャメルが変ってのはlowerキャメルのことを言ってるんですね。 インスタンス生成はどんな感じですかね。 クラス名の前後どちらかに何かの文字を入れてるんでしょうか? MyClass ?MyClass?
先頭一文字が大文字だとクラス名と判断する言語すらある
おまえらが仕事でcのコードを書くことはない
>>651 変です
Javaのメソッド名のように 動詞+名詞
のパターンではおかしくないが
先頭小文字名詞と先頭大文字名詞の混在や
先頭大文字形容詞と先頭小文字形容詞の混在ネーミングは
自然言語のセンスを疑ってしまう
longLongUnko
unko / unkoEater / bigUnko
658 :
デフォルトの名無しさん :2014/01/06(月) 19:31:41.30
自作のクラス名は全部大文字で書いてる そしてクラスは宣言する場所によって大文字小文字が変わるグローバルならg_を付けて小文字で始め、次から単語単位で大文字 ◇クラス名 MYCLASS ◇グローバル MYCLASS g_myClass; ◇構造体やクラス内では小文字で始まり次から単語単位で大文字 MYCLASS myClass; ◇関数内は全部小文字 MYCLASS myclass; これは構造体やその他変数の場合も同じ クラス以外は以下の通り ◇関数は最初から単語単位で大文字 int MyFunc(); 一目見ればどういった変数か分かる
俺はハンガリアン記法
>>654 オープンソースのmmdagentでも眺めてみたら
全部大文字はマクロみたいで嫌だな
663 :
デフォルトの名無しさん :2014/01/06(月) 20:25:41.54
>>657 wchar *wcpName;
int iHeight;
setName();
setHeight();
とかだな
あまえら馬鹿さ加減の自慢もたいがいに
便乗質問です コードの書き方って会社ごとに決まってるとは限らないのでしょうか? 前回はこう書いたけど今回はこうね!みたいな感じに
INT MAIN(INT ARGC,CHAR *ARGV??( ??) ) ??< PRINTF("HELLO WORLD??/"); ??>
誤 ??/ 正 ??/N
>INT コンパイルエラー
Unicode系の文字を使用する言語にトライグラフとか 時代錯誤が甚だしい言語仕様
int $; for ($=0; $ < 10; $++) printf("$ = %d\n", $);
std::string A$; A$ = "モジヘンスウノレンシュウ";
672 :
デフォルトの名無しさん :2014/01/06(月) 22:58:34.52
くらえ!必殺! 喪磁返崇 乃連襲!
auto* u = L"おちんぽじゅぽじゅぽ"; auto* s = R"(c:??ひみつ\test.csv)";
>>653 C++の規格のサンプルコードを全否定ですか?
この勢いなら聞ける
>>673 auto* ってできるの?
飯食ってくる
677 :
675 :2014/01/07(火) 16:24:16.83
久しぶりにあぼーん入ったな またhogeか
>>676 ,678
飯食ったらすぐ現場だった 異業種です
できるのか、こりゃおもしれえ。ためします
>>677 俺が二人いる
680 :
デフォルトの名無しさん :2014/01/07(火) 19:11:18.83
682 :
デフォルトの名無しさん :2014/01/07(火) 19:21:59.61
>>681 いや問題は無いけど・・・
Cの方ばっかりやってたからちょい感動したw
683 :
デフォルトの名無しさん :2014/01/07(火) 19:26:04.25
>>683 気持ち悪いからvectorをnewするな。話はそれからだ。
つーか、どうしても全く無意味にnewしたいならdeleteしろ。
685 :
デフォルトの名無しさん :2014/01/07(火) 19:36:05.19
>>684 そうだったdelete書き忘れてた・・・
deleteすれば間違ってはいない?
取り敢えず、vectorの初歩位何かで勉強しろよ。 それからCスタイルキャストはやめろ。
>>685 バグの温床で全く意味がないのにどうしてもnewしたいなら止めないが、
考え方としては大間違いだ。
688 :
デフォルトの名無しさん :2014/01/07(火) 19:39:26.53
>>687 ちなみに一番ベターな感じに書くとどんな感じになりますか?
>>688 >一番ベター
意味不明な言葉を口走らなくなってから出直せ言語障害
だまされるなよw newを恐れるようではこの先何も出来ない。 ちなみに、そんなすぐmainを抜ける短いプログラムでdeleteなんぞしなくていい。 deleteしたいときだけすればいいんだ。
>>682 このAとBの違いと一緒
----A
void test(void);
int main(void)
{
test();
}
void test(void)
{
}
----B
void test()
{
}
int main(void)
{
test();
}
693 :
デフォルトの名無しさん :2014/01/07(火) 19:50:50.42
>>690 ありがと
もう少しvectorについて勉強してみます
ベクターだろうとベターだろうと大して変わらん
こうやって賛否両論あるように見せかけて書いてやると
>>693 みたいな馬鹿が騙されて面白いw
>>690 いあ
どんなに短いプログラムでもdeleteする癖つけといた方がいいぞ
したいときにいつでもできる!
一番ベター わろた
>>684 newしたって構わないだろ
移動コンストラクタが無かった時代には
auto_ptr<vector<string> >とかやったぞ
目的があってやるのと意味なくやるのは違うだろ
あの場合はnewいらんだろ auto_ptrがあるなし関係ない
//690 free/deleteはクセつけといたほうがよくね? リークチェックが非常に面倒になるぞ valgrindで見なかった事リストを登録したり ヘタすればJava的手法になってしまう
free/deleteなんて_CrtSetDbgFlag()使えばいいし
newしたぶんをdeleteしたいんなら、そうすればいい。 ほっといていいなら、ほっといていい。
よほど長時間実行されるプログラムでなけりゃ 今時メモリ解放なんて気にするだけ無駄
長時間でなくても、頻繁にくりかえしたら、おかしくなったぞ。 「解放しなければなりません」とかいてあったら、解放してから次を確保
何か心配があるんならdeleteしろやw ええんやでw
>>708 どうせ他の部分にバグがあったんだろ
再現できる最小構成のソースをideoneにでもあげてみろよ
newした分をdeleteしないと許さないって専門学校の先生が言ってた
suppressionファイルなぞという見なかった事にしようかリストを書くぐらいなら普通に開放したほうがいいよ。 まじx11勘弁して欲しい
new した物を delete しないのは、必要ないフォームを閉じずに非表示にしてるだけなのと同じだ。 そんなバカなプログラムがあるか
それはちと違う。
deleteしなくていいなら、いっそstaticでいいじゃないか
自動変数でいいだろ…
ってか new/delete を隠蔽した一つの形が vector だろうに… わざわざその vector を new するとかマゾとしか思えん…
いや、マゾというよりマヌケ。
むかし
>>720 みたいな人がよくいた
配列の代わりにvectorを使えといいつつ
関数の戻り値に使いたいときどうするかの答えを持ち合わせていない奴が
今はムーヴで解決されたけど
ダウトきたこれw
>>723 変換operatorでvectorを返したいのですが
自動変数の参照を返してもよいのでしょうか
>>722 奇遇だな
俺もよく
>>722 みたいな人に会うよ
でもほとんどの場合、関数の戻り値に使いたいという点に合理的な理由が無い
>>726 何かの一覧を作成して返したい
というのは極めて一般的じゃないのか?
>>727 その場合は
>>723 で事足りるし、
関数型言語のような連結を行いたいなら、
受け取った引数の参照を返せば良いと言うのが僕の意見
結果を渡す手段に ・返り値として返す ・参照渡しな引数の内容を書き換える ・ポインタ渡しでもらって、指し先の内容を書き換える メモリコスト的にでかいものを返り値として返すのには抵抗があるな
730 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/07(火) 22:29:47.34
>>725 自動変数へのポインタを返すのと同じく駄目。参照引数で渡せ
731 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/07(火) 22:33:03.27
または参照でない値返し
>>716 起動時に作成して終了時に閉じるから必要ない時は非表示にしてる
つまり起動時にnewして終了時にdeleteするから必要無い時にも存在してる
的外れな例えしてると思わないか?
>>728 「何かの一覧を作成して返したい」
という極めて一般的な要求に対して
自分は抵抗感がある とか
言語仕様上の問題から参照で回避可能 とか
はわかったのだけれど、
それで「戻り値返しに合理的な理由が無い」
なんて 頭おかしいのでは?
>>733 戻り値で返すっていう手段に合理的な説明なし
一般的とかオレオレ主観
安全でデメリットもない代替案に対して頭おかしい扱い
うわぁ…
>>733 戻り値として配列を返すとしてエラー処理はどうする?
データを返すという関数シグネチャのコントラクトがまっとうできない場合は 例外をスローするのが筋かと
メソッドチェーンなんて糞便利だよね
>>733 多分関数内部で new するような話なのかな?
C++ では RAII で実現するのが良いとされているので、そもそもそういう実装が時代遅れな気が。
ポリモーフィズムを実現するためには new/delete を使うのが楽だけど、これはまた別の話。
データ構造としての配列が必要なら、vectorを代替として使うのがC++流だと思う。
C++流にC脳で対応しようとするから戻り値にこだわりたくなるのでは?
但し、
>>722 の最後の一言で全て解決。
C++11 以降なら何も気にせず堂々と戻り値で返せばいい。
そうでなくとも RVO/NRVO が期待できるので、実は気にしなくて良いレベルだったりするが。
>>734 戻り値で返したいという人がいる以上
それができないのはデメリットそのものでしょ。
不要であると主張する側がその理由を説明するのが筋
auto_ptr<vector<deta> > これでc++03でも解決 ただしここはグローバル変数をオススメしたい メモリリークとも無縁
ダサッ
>>740 なんか勘違いしているね
戻り値で返したいっていうのは要求とは言わないよ
それは開発者のわがまま
僕はプログラムのメリットを話しているのに、君は君自身のデメリットを話している
そういうスタンスなら、君の責任でそうしたければそうすれば?としか言いようが無いよ
>>743 つまりvectorは配列の代替として使えなくはないけれど
完全ではないと言うことですね(プゲラ
A「これをつかえ!」
B「このばあいはできないだろ!」
A「こうすればかいひできる!」
B「なんでそんなスタイルねじまげなきゃならんの!」
>>743 「僕はプログラムのメリットを話しているのに、君は君自身のデメリットを話している」
もう精神科に行ったほうがよいのではないかと…
newを恐れる人と、スマポをありがたがる人は同じなんだろうな。
割り込んですまないが
>>725 はどうする?
operator使わずに自前の関数に参照渡ししかない?
>>745 スマポ派はExceptional何とかを読んでチキンになっただけです。
でもnewと同時にスマポのコンストラクタに入れておけば安全らしいことを覚えたので、
newは上等です。
>>744 趣味プログラマ?
だったら君の道を行けばいいと思うよ
でも職業プログラマだったら、
プログラムスタイルに対する変なこだわりは捨てる事をおすすめするよ
ソフトウェア制作で重要なのは、そのソフトの要求を満たす事であって、開発者の要求を満たすことじゃないから
こうすれば不具合の起きにくい作り方になるっていう意見に対して、僕のスタイルに合わないから嫌だっていうのはわがままじゃないのか?
理論的に説明している件に対して、頭がおかしい扱いするとか、釣だよな?
>>748 もうほっとけよ
頭おかしいヤツの相手すな
ヒント: 冬休み
752 :
デフォルトの名無しさん :2014/01/08(水) 00:00:28.04
std::move
>>748 >>僕のスタイルに合わないから嫌だっていうのはわがままじゃないのか?
話を逸らしたな。
「安全の為にはvectorを使って参照渡し方がいい」
というのであれば特に文句はない。
>>726 が「vectorの戻り値スタイルには合理性がないから俺の参照スタイルを使え」
と言ったのに合理性が無いことを説明できないので
頭おかしいの?と訊いたまでだが。
で結局、説明できないだろ?
関数は数学と共通してf(x)で成り立ってるから、 f(x)のxに値を入れた場合、f(x)が値を持つのが当り前の事だ。 だから実質的に戻り値が無くても、voidの値を持っていると言う事になっているので、 頭にvoidを付けるのさ。 戻り値の無いプログラムなんて無い。 基本的に戻り値で返すべき。
755 :
デフォルトの名無しさん :2014/01/08(水) 00:04:33.72
newを恐れるんじゃなくて、だんだん遅くなるんだよね。 コンテナ使っても同じことだしね。 サーバソフトウェアでは、一定回数レスポンスするとプロセスごと 再起動するものもあるね。 そのために、プロセス間でファイルディスクリプタの移動ができるOSもあるね。
756 :
748 :2014/01/08(水) 00:08:04.60
>>753 後半の話おかしくね?
誰も vector の戻り値スタイルに関しては話していないと思うけど。
生配列(ポインタ)戻し vs vector 運用 (引数でも戻り値でも) という流れだったのでは?
人が入れ替わって主張がズレてきているのかな?
757 :
デフォルトの名無しさん :2014/01/08(水) 00:10:46.92
std::move
758 :
756 :2014/01/08(水) 00:10:49.47
すみません。 昔の書き込み時の名残で748って名前に入っちゃたけど、この流れでは初めての書き込みです。
759 :
デフォルトの名無しさん :2014/01/08(水) 00:13:43.27
>>758 誰もお前の糞書き込みなんて気にも止めないから黙っててね^^
上や権力者が決めた仕様に従うのは絶対だが、 それとは別に一プログラマとして開発はこうあるべきと考えていて良いだろう
>>753 vector を戻り値で返すのは問題無いと思うよ
でも君は
>>722 で vector を戻り値で返すことに異論を唱えたのじゃないのか?
くどい 722はRAIすら知りませんで終わった話しでしょ
763 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/08(水) 00:16:52.77
>>754 xが定義域の外にあった場合、f(x)は未定義。後半に論理の飛躍がある。
昔は戻り値としてサイズの大きい構造体を返すのはのは計算コストが高かっった。
xが定義外だったらその関数は実行されないだけだろ エラーじゃねえか
deleteを恐れていたり、義務のように感じてるうちはまだまだだな。 deleteは権利よ。deleteしたいときにできるのがいいんじゃないか。
vectorの動的配列を戻り値として返すかって事なら、ポインタで返せば良いだけ
ネバーエンディングストーリーだな
>769 おいやめろばか
>>765 そもそも何を話す事があるのかわからんしね
現仕様じゃ解決したネタ
古いコンパイラだとしても
返したきゃ返せばいいエラー処理は例外で
ただ、コストがネックになるケースもあるから
参照で渡すといいよ
という親切心からの代替手段まで提示してもらってるのに
呼び出し元でのmallocがどうちゃらってレベルの話しだしなぁ
malloc,new,init,create/free,delete,destoroy,term
呼び出し元のRAIIでいいじゃないのよ
722は単運に あぁ・・・このレベルなのか とスルーされただけじゃないかな
別に良いさ。間違った事でも自分が思うことをどんどん書け それで間違っていたと気付けばスキルアップだ。恥ずかしいとか思うな
さっきから
>>772 (=739,762?)がライーをどのような意味で使っているのかよくわからない
xが未定義でもfの定義によってはf(x)が計算可能なことがある。
>>775 スコープだよ
グラフ化して汚ねぇ木だなと言われればおk
>>776 6.一見、関係がありそうで関係のない話 を始める
「ところで、カモノハシは卵を産むのを知っ ているか?」
f(x)でxが定義外だったらエラーでエラー値を戻すだろ xが定義外でfの定義で計算されるなら、voidでも値は持つだろ 何も返さない関数なんてあるかよ
みんな仕事は終わったか? そろそろ寝て明日に備えようぜ!
その場合エラーにならない
errnoとかね
>>776 は
xが未定義 と f の入力が範囲外 をすりかえている。
fが計算可能ならそれは入力範囲内
バッファーオーバーフローの場合。関数が定数またはxと無関係な定義の場合。 定義域が制限された関数の場合。 例外処理の場合。
>fが計算可能ならそれは入力範囲内 定義域の定義に反する
f(x)が計算可能で無ければ計算可能で無いと言う値が返るだろ 計算出来れば当然何か値を持つはずだ。 そうじゃないとf(x)呼び出した時点でプログラムが終わるだろ。
つまりだね、どんな関数でどんな状態でも、 中で永久ループにでならない限り呼出元に戻るだろ その時に値を返す関数ならその値を返すし、無ければ戻り値無しと言う事を呼出元に返してんだよ。 だから戻り値が無い関数なんて無いし、そんなのは関数じゃないんだよ
790 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/08(水) 00:59:07.32
f(x)が計算可能で無ければ割り込みや例外が発生するかも知れない。その場合、 fの外側の割り込みハンドラーや例外処理で回復する可能性もある。 だから計算可能性と実行可能性は等しくない。
計算可能で無ければエラーだろ 計算可能では無い状態を返してるから その後の処理が出来るんだろつの
exitを呼ぶと呼び出し元に戻らないことがある(noreturn)。 無限ループや割り込み発生でも戻らないことがある。 君はnoreturn関数を知らなかった
あのな、exitを呼出したら終了処理に行くだろ。 exit命令で抜けてるだろ。exitで抜けた事が出てるだろっつの
片山優勢だなw
795 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/08(水) 01:11:34.26
int f(int x) { exit(0); return x+1; } int g(void) { return f(1); } 関数gが受け取るfの戻り値はいくらか?
くどい
f(x)で呼出元に何かしらの値を戻すか、 noreturnの付いた関数ならその関数から次の関数に何かしらの値を渡すってだけ 値が無いって事は絶対に無い
片山優勢だなw
■が関数だとすると A→■ A→■→B ってだけ A←
800 :
デフォルトの名無しさん :2014/01/08(水) 01:26:35.04
ニートしかいないからみんな明日の仕事の心配せずに活発に議論している
はい
しーーーん…………
w
た〜らこ〜 た〜らこ〜 γ´⌒ヽ'⌒ヽ⌒ヽ⌒ヽ⌒ヽ た〜っぷり た〜らこ〜 | ( ゚д゚)゚д゚)゚д゚)゚д゚)゚д゚) | | ,| ,| ,| | l l ,l ,l ,l l 〉 j ,j ,j j j '⌒Y⌒Y⌒ (__,ノ_,ノ_,ノ__,ノ_ノ
片山の意見は全般に?だが
>>793 はおかしい。
途中でのプログラム終了と例外とlongjumpは
関数y=f(x)のyの導出とは関係が無い。
値を返すとは別の形での終了の概念。
片山に負けたのがいるんだって? w
関数は「値を返す」か「途中で挫折してexit/longjump/throw」
のいずれかの動作を取るけれど
後者があるからといって
>>754 の内容が間違っているかどうかは別だ。
特にC++ではvoidを返すという考え方を認めている
>>809 無限ループと割り込みも宜しく。
> 間違っているかどうかは別だ。
「値を返さない」が可能なら「戻り値の無いプログラムなんて無い」は間違いだろう。
「基本的に全てのプログラム(関数・サブルーチン)は値を返すべき」
なら思想の問題なんで議論の余地があるけど、正直そっちは興味無いな。
>>808 いや片山は言っている事は支離滅裂だけどプログラムに関してはかなりの知識を持っていると思ってるぞ
戻り値が無いと言う事も値になる 関数が終了しないでプログラム全体が終わるなら、プログラム全体が先に値を戻して終了してるだけだ メインから関数の入れ子になってんだから 値が無いって事はf(x)でxに値を与えても、f(x)は値を持たないって事だ それだと関数では無くてただの文字だ。xを与えて値を持つから関数って言うんだよ それが関数の定義だ 値を持った時点で、それが戻り値なんだよ
>>811 ちがうな。
経験 を持っているだけで 知識 を持っているかは別。
残念な人は何十年仕事しても上達しないのと同じ。
片山に負けた池沼は屁理屈捏ねてないで退場しろよ 勝敗決してからgdgd言い訳するのは 見苦しいぞ
プログラミングでは混同されてるけど、関数と手続きは違うから。 f(x)の関数と同じ形で、戻り値が無い、値を持たないとするのは手続きだから
片山とかQZとかコテハンには変な人が多いな 変な人だからコテハンにするのかも知れないが
>>812 副作用OKな手続き型の関数と呼ばれる関数モドキに何言ってんのコイツwww
「それは関数、ファンクションじゃない、プロシージャとかサブルーチンとかメソッドとかそういう物だ」
位の事は言えよ。そんなに関数にこだわりがあるなら。
最初から数学と共通してのf(x)の関数って言ってんだろ
記憶に残る変な人と 記憶に残らない変な人がいるだけ
y=f(x)なのが関数なのは分かるだろ f(x)と言う形だけを関数と言うなら、その関数が他の処理に最終的に制御を移す値が戻り値になる。 それは戻り値では無いと言うなら、それは関数では無い。
>>816 コテを付けている奴は例外なく自己顕示欲が強い=自己愛性パーソナリティ障害気味もしくは
本物の自己愛性パーソナリティ障害
商売のために名を売ろうとしてるだけ
むしろ逆効果
よしid付けよう
「関数」って言ったって数学から言葉を借りてるだけで、数学の関数の概念とは一致してないから void型の戻り値を返すんじゃなくて、戻り値を返さない「関数」をvoidと宣言するんだから
だからf(x)って書いてんだろ。 f(x)の意味分かってんのか
今はNISAがトレンド
外国為替証拠金取引
829 :
デフォルトの名無しさん :2014/01/08(水) 15:35:23.29
とーしかでびゅー♪
必死で言い訳しても、お前が片山に負けたことはひっくり返らない
>>827 NISA は,経済/投資板のゴールドスレでは敗者の徴,愚者への徴税扱いとみなされているね
832 :
デフォルトの名無しさん :2014/01/08(水) 17:25:23.15
たまにはバ片山が勝つこともあるんだな バ片山は基本的に初心者への嘘回答しかしてないから、 それに負ける奴がいることに驚き
だから参照最強伝説ですよね
昨日はムーヴコンストラクター任せ最強という結論で一致しなかったか?
どんな分野のたちがc++を使いこしているんだろう
c++を書けない僕がバカなのかc++で書こうとするヤツがバカなのか、 ときどき考え込んでしまうんだ。だけど、もういいんだ。PHPで
c++を書けない奴=ふつう c++で書こうとするヤツ=馬鹿 c++でオナニーするヤツ=アスペ
VC++EEでやってるからCとC++混ざってるわ
More C++ idiomsを読むのは楽しい
ラッパー被せて体裁整えればいいだけで混ざってももいいんだよ それをやらないのは甘えでしかない そんなのはCオンリーで書かせても同じでソース分割もろくに出来ないんじゃないかな
アスペはほめ言葉。 伊達にヒキヲタDT歴を積み重ねてきたわけじゃないからね。
843 :
デフォルトの名無しさん :2014/01/08(水) 23:59:17.21
質問ですが、結局クラスで CLASS A{ public : A(){} ~A(){} }; int main(){ A *a[3]; for(int i=0; i<3; i++){ a[i] = new A(); } } とするより struct A{ public : A(){} ~A(){} "関数など" }a[3]; とやって構造体で処理した方が良いですか?
844 :
デフォルトの名無しさん :2014/01/09(木) 00:02:51.02
>>843 質問の意図は
javaでよくnewを使ってたんですが
Cだといちいちnewしない方が良いと言われたので
後者で済むならそうする
846 :
デフォルトの名無しさん :2014/01/09(木) 00:12:46.26
>>845 やはりそうですか。
ちなみにstructの使い方ってC++だとほとんどクラスに近いように感じるのですが
class的な扱いで大丈夫ですよね?
あと、後者で済まないような場合ってどんな時でしょうか?
PODで検索
>>846 デフォルトのアクセス指定子がprivateかpublicかの違いしかない
849 :
デフォルトの名無しさん :2014/01/09(木) 00:23:56.24
850 :
デフォルトの名無しさん :2014/01/09(木) 00:29:18.87
>>843 で追加質問なんですが
参考書とかでもnewを使ったりしてるのが有りますが、
なぜnewするのを避ける傾向に有るのですか?
めんどくさい。遅い。
852 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 00:37:45.85
PODをnewせずに作成すると格納スペースとしてスタックが使われる。newで作成するとたいていヒープが使われる。 スタックで割り当ての方が早い
>>850 そりゃ確保の速度もあるけど、解放しわ忘れてメモリリークするのが怖いからだろ
スマポを併用するのはそのため
newしたらdeleteしなきゃならんから
Javaとの比較で言えば、Javaはヒープに一本化するとともにGCの仕組みを取り入れた
C/C++にはGCがないかわりにヒープの使用を強制されることもない
あとは
>>852 と同じ
たいていヒープの大抵ってどういう意味だべ newでまれにスタックが使われる?
857 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 01:21:38.65
>>856 operator newの定義が特殊な場合
なるほど
>>839 Cでやってるのに
for(int i=0;i<count;i++)
はC++と知らずにやってたんだ
メモリが断片化している時に、 大きな連続領域を確保しようとすると、 それを探しまわるために、 1万命令ぐらいかかることもある 自分でメモリープールを作って、 メモリを管理する方法が、色んな本に載っているけど、 これはプログラムの初期化時に、 大きな領域を確保して、その中から、 小さい領域を、newに頼らず、自分で渡していく Objective-Cやデータベースなども、 この方法を使っている
>>859 ちょっと何言ってるかわからない
まさかCだとfor (int i=〜)が書けないとでも思ってる?
C99ではおk C89/ANSI Cではだめというだけの話
ヒープってなんですか? スタックってなんですか? フリーストアとは関係ないのですか?
何で老人はC89とかANSIとか言い出すんだ? 昔よく使われてたのはISOのC90じゃないの?
よく使われたのは、K&RかANSIかって言い方
>>865 K&R1とK&R2=C89 の違いをいってみろ
C89とC90の違いをいってみろ
両方いえたらわかろうものだ,このケツの青い餓鬼が
c90はansiの89だと国際化対応が足りないとかで 一年延期したんじゃなかったっけ?
869 :
デフォルトの名無しさん :2014/01/09(木) 12:48:17.29
Wikipediaに書いてある事で鼻息荒いな 書いてない事で自慢しろよ プログラムのメモリサイズを調べる方法とか ls -l ./prog
>>861 5年前の俺: 無理だろそんなの
まあ、スタブ書くときくらいしかpure C で書くこともないんだけど
>>869 ういんどーずでやってみろ、こんちくしょーめ
dir .¥prog.exe これであってますかあ 大爆笑
えっ えっ?
ファイルの大きさと等しいだけの大きさでメモリ上に置かれるとな ファイルサイズ(ユニークなファイルヘッダがあるならそれを取り除いた量)よりも 下回るようなことは起き得るだろうか? デバイスドライバーなんかは 初期化時には居るけど、初期化後はOSに返してしまう部位があったりするようだけど
それが上で吠えてるQzとかいうコテによるとls -lでわかるらしいですよ。 大爆笑
>>874 自己展開書庫なんかおもいっきりそうだが
>>876 自己展開書庫で ファイルサイズ>メモリサイズ ってのは
lz圧縮系で、圧縮されるべき対象物が小さいと頭の辞書のほうがでかくなってしまう現象を想定?
ファイルサイズとメモリのフットスタンプを並べて話してる時点でやっぱり違和感。 実行時に確保されるメモリなんざコードセグメントだけじゃないだろう?
>>869 に聞いてくれ
ls -l でわかるそうだから
880 :
878 :2014/01/09(木) 16:29:26.47
俺も今すぐ死んだほうが良いなw フットスタンプてそれ、プロレスの技やないかww
フットブリング
867はいつもとトリップが違うようだが変えたのですか?
>>818 >>820 >>826 「数学的な関数でないサブルーチンやプログラムも存在する」のを無視して
f(x)とか言い出して「数学的な関数として値を返すべき」って主張したのが
>>754 どうみてもC/C++の関数どころかプログラムまでひっくるめて数学的な関数扱いしてるぞコイツ
>>883 「戻り値がないなんてありえない!!」
「たとえ0個であっても,それは戻り値を持つというんだ!!」
はいはい副作用副作用
>>885 その内容についてお前の意見がないかぎりなんともいえないね
まぁ通常はアキュームレータに戻り値設定するからな。
889 :
デフォルトの名無しさん :2014/01/09(木) 21:05:48.18
>>889 これ何回見ても笑えるwww
Qは完全に頭イカレてるな
>>890 知ったかをイカレが弄ってるようにしか見えんが、
どっちかっつうとイカレの方がきしょい。
きしょいとか久しぶりに聞いたわ
>>889 自演してるようにしか見えないからきしょい
きんも〜
誤 きんも〜 正 きんもー☆
サモハン?
キンポー!!
898 :
デフォルトの名無しさん :2014/01/10(金) 19:39:19.19
インポやろう
prog.cpp:5:21: error: must #include <typeinfo> before using typeid
使用です 5.2.8p6 If the header <typeinfo>(18.7.1) is not included prior to a use of typeid, the program is ill-formed
MFCを使用しています 別スレッドからメインスレッドにPostMessageで メッセージと文字列を一つ送りたいのですが、 どのようにしたら良いでしょうか? 送り側で CString s; s = _T("test"); PostMessage(hwnd, msg, NULL, (LPALAM)s); 受け取り側のPreTranslateMessageで CString s = pMsg->lpalam; としてもうまく受け取ることができません。 また、PostMessageを受け取らない時があるのですが、 取りこぼしなどあるんでしょうか?
>>903 >文字列を一つ送りたい
だったら文字列のメモリの生存期間が保証されるようにしろ
それができないならC++は諦めた方がいい
ついでに 渡すメモリを書き込むときとそれを読み込むときは クリティカルセクションオブジェクトかCMutexで排他制御しとけ でないと書き込み結果が伝わる保証がない
> (LPALAM)s 一体何が起きるんだろう? このKUSOコード とりあえずSendMessageというKUSO呼び出しに変えたらいいんじゃね
可変長のデータ送る場合はWM_COPYDATA使っとけ
>>903 PostMessageは相手に届く前にリターンするからそれじゃうまく行かないよ
送り側でnewして受け側でdeleteするか、WM_COPYDATAを使う
>>906 も指摘しているように(LPALAM)sは全然おかしい
やりたいのは(LPARAM)(TCHAR*)sだろうけどそれでもダメ
910 :
デフォルトの名無しさん :2014/01/17(金) 01:21:37.47
肘が乾燥でカサカサして痒いのですがどうしたらいいでしょうか? ハンドクリームとボディクリームとかゆみ止めの軟膏は塗ってみましたが 塗った瞬間しかよくなりません。 30分も経つとまた痒くなってきます。
ウィンドウメッセージで文字列受け取る奴はMBCS/Unicodeの変換があるから、
メッセージによってコピーされたり変換されたり挙動が違うんじゃねーの?
>>910 皮膚厚くなってるようなら風呂で角質を軽く削っとけ
>>911-912 ありがとうございます。
帰りにまだ開いてる薬局があったら角質取るやつを買ってみます。
それでだめなら病院行ってみます。
>>908 dllからexeへ送る場合それじゃ落ちるだろ
>>909 「全然おかしい」という日本語はおかしい
>>913 角質を削る刺激でさらに皮膚が厚くなる
全然を肯定文に使うのは正しい。 むしろそれが本来の使い方。
>角質を削る刺激でさらに皮膚が厚くなる いいことをきいた。 ではどうすれば皮膚を薄く出来る?
ボタンのイベントに MyDialog dlg; dlg.DoModal(); だけの処理を書いて、呼び出したダイアログを閉じたあと、 再度ボタンを押してダイアログを表示しようとすると アサーションで落ちるんだけど、なぜ? 呼び出すダイアログでは特に処理もしてないんだけど、 ポインタにしてnewしてもダメだし2度目がダメな理由がさっぱりなんだけど 何が原因かわかりますか?
まず環境と使用しているフレームワークを説明しろ。 話はそれからだ。
原因はアサーションに書いてるだろ
>>921 ごめんなさい
os は windows7 で
開発環境は visual studio 2010 pro
mfcのダイアログベースを使ってます
924 :
921 :2014/01/17(金) 21:28:11.53
>>923 今試したが俺はならない。諦めろ。
Windows 8.1
Visual C++ 2013
MFCのCDialogとCDialogExで確認した
cymon.sysじゃねえよな?
>>920 assertが出るとプログラムがそこで一時停止するから、
ソースコードのどこでassertしたのかを確認する。
ライブラリの中でassertしたならスタックトレースで
呼び出し履歴をチェック。
間違えてどこかでメッセージループ終了させちゃったんだろ
>>923 タッチパネルなモニタ繋いでる。に100ペリカ
>>928 なんで?
俺はおタッチパネルだけどならないぞ。
>>929 OLE関係のメソッドが不正アクセスするというMFCのBug
に遭遇しているのではないかと
なおタッチパネルでないと再現しない。
>>912 >ウィンドウメッセージで文字列受け取る奴はMBCS/Unicodeの変換がある
それは
>>912 がばかな茸
すみませんが教えてください ユーザーにいくつかの項目を入力させる画面を作っているんですが、 すべての入力が終わってからチェックという方法ではなくて、 一つの項目ごとに関連する情報を表示させたい たとえば、任意の金額を入力し、確定するとその金額で購入できる商品を即座に表示したい等 この場合、OnKeyDownでエンターが押された場合に処理する、 OnKillFocusで処理する等あると思うんですが、皆さんはどんな処理をさせますか? 個人的にはOnKillFocusって使いづらいイメージがあるのですが、 一般的にはKillFocusで処理するのでしょうか?
俺はKillFocusでやってる KeyDownだとマウスでのフォーカス移動に対応できないし
OnKillFocusでの処理は一番やってはならないユーザーインターフェース。 実際に操作してみて理由がわからないような低脳なら 他人の使うプログラムを作ることは諦めた方がいい。
936 :
デフォルトの名無しさん :2014/01/19(日) 02:46:57.71
じゃあなんでKillFocusなんてものが存在するのか まあフォーカスとかChangeとかはへんな連鎖でぐちゃぐちゃになる場合が多いが 金額はなにをもって確定とするのか
プログラミング言語と関係ないユーザーインターフェース設計の話は他でやれ
>>933 項目毎に確定ボタンみたいなのはあかんのか
単純な質問でーす みんなコンパイラは何を使ってますか?
VC++EE
cl+clang (IDEなし)
産まれて初めて使ったコンパイラは Kcompilerだったかな
UCSD p-system
Visual C++を使いつつ確認用にG++とclang
>>939 お前が普段使っているツールのすべての入力欄に確定ボタンがつく呪いをかけた
キー入力が着たらタイマーを解除してタイマーで待つ タイマーの時間が来たらフォーカス確認し、フォーカスがなければ確定 Enterキーならすぐ確定 Escキーならタイマー解除して値を元に戻す
>>940 最初のコンパイラーは多分 FACOM 230 の FORTRAN コンパイラーだったと思う。
自宅は X68K で GCC (真理子版) かな。
いまは、ほとんど Visual Studio。
http://shnya.jp/blog/?p=195 ここにあるようなsplitを使用する関数を繰り返し呼んだ場合、メモリリークはするものでしょうか?
void foo(string str)
{
vector<string> v = split(str, ",");
・・・
}
というか、stringはdeleteしなければいけないものなのでしょうか?
newしてないからしない
どうもです。
初はLSI C-86 試食版
って書こうと思ったら
>>948 にあった
>>955 今いる人はだいたいこっからか
俺もそう
俺も その後、djgccでDOS Extenderでやっていたから結局farポインタとか使わなかったな
BDS-C
aztech lattice
ラチスは20万ぐらいしたんだぞぉ
LSI-C86試食版の標準ライブラリのバグはわしが指摘した。 のはどうでもいいんだが、今でもWindowsで使っているなら馬鹿。
ほ,ほんとですかぁ‥‥高すぎる‥‥RMSは神か,はたまた食い扶持を奪った悪魔か‥‥悪魔に違いない‥‥絶対そうだ‥‥
LSI-Cで試食版じゃないやつって存在するの?
>>963 「64KiB 以上のコードを生成できない」という試用版の縛りを取り除けば、5万くらいの製品だったかと
lsic試食版はどう考えてもてもジョークだろ MSですら無料の出してるんだし…
当時、MSも無料版出してたっけ? dos用では、lsic試食版がほぼ唯一だったような気がするんだが。
>>965 MS-DOS時代(1995年より前)はただのコンパイラとかキチガイも同然だった‥‥
今でも配布しているのな。 ベクターのファイル日付が1993年。20年前か。。
LHA.EXEがLSI-C86試食版で書かれたんだっけ。 作者はプログラム業ではなくお医者さんで。
>>965 まさかと思うが、今の話してないよな? (w
にわかの浅薄な知識自慢イラネ
にかわ?
当時gccは16ビット環境ではまともに動いてなかった気がする。
>>963 >>964 試食版はSmallメモリモデルだけだね。
製品版は各種メモリモデルに対応していたと思うし、
標準ライブラリなどのソースもついてたと思う。
>>976 DJGPP もkmc版も使っていだけど、正常に動いていましたよ
mix版は知らない
OS9版gcc を lint として使ってた
djgcc(後にdjgppに改名)がDOS環境で動いていたね。 日本語環境へのローカライズはNiftyのフォーラム辺りの有志がやってたような記憶が。 実メモリを大きく超えるメモリを確保して、DOSなのに仮想記憶でHDDをガリガリアクセスしているのに感動したな。
>>973 gcc は go32/i386sx以上でOKだったかと
>>977 >DJGPP もkmc版も
だからそれは32ビットプロテクトモードでの話かと
1993年頃には gcc を使ってた記憶がある
MINIXでccしてた
加齢臭で充満してる くせーぞ、ジジイ
カレー臭の親父と ウンコ臭の美女と
スペルマにまみれた浮浪者と
tcc(Tiny C Compiler)使ってる奴は居ないのか C99専用だがアホみたいにコンパイル速いし実行ファイル作らずに直接実行できたりLL並 作者はQEMUとかFFMPEGを立ち上げた人でJavascriptで動く仮想PC作ったりもしてる変態
うめ
989 :
デフォルトの名無しさん :2014/01/22(水) 06:17:15.51
union ta{ int a; int b; };
>>987 そいつの作った、超小さい変態ccのほういじってたことがある
pccだったか
call convention さえうまく書ければwin32で実用にもなる
末尾に_12_とかって書いたらstdcallになるようにしてみてた
バージニア大のlccは使っていた事がある
992 :
デフォルトの名無しさん :2014/01/22(水) 11:45:54.68
ゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミwwwwwwwwwwwwww
994 :
デフォルトの名無しさん :2014/01/22(水) 18:55:30.59
ゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミwwwwwwwwwwwwww
uyの朝鮮人疑惑
またhogeキチガイが荒らしてるの?
998 :
デフォルトの名無しさん :2014/01/22(水) 20:28:20.37
ウメッシュ
999 :
デフォルトの名無しさん :2014/01/22(水) 20:31:02.61
酔わないウメッシュ
1000 :
デフォルトの名無しさん :2014/01/22(水) 20:32:43.16
hogeは禁止されていない
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。