【初心者歓迎】C/C++室 Ver.95【環境依存OK】 [転載禁止]©2ch.net
マスコミが絶対に触れない事実
注)自民党以外が在日から帰化したスパイ、またはその影響下にあると仮定してご覧ください。
よく言われる
失われた20年 → 約20年前 初めて自民党が単独過半数を割る(小沢の新生党が与党介入)※
失われた15年 → 約15年前 自公の連立政権が始まる (公明党の与党介入) /
※このとき、初めて80円/ドルという超円高誘導されて、日本の製造業は衰退・空洞化
=中国・韓国が台頭し始める。日本の技術者が、大量に韓国などに引き抜かれるようになる。
イオン(民主党・岡田家)や大型パチンコ店が、地方経済や商店街を食いつぶすための、
大店立地法が成立。在日パチンコ屋のCM・チラシが解禁・大型チェーン展開が始まる。
日本の学力低下が目的の「ゆとり教育」の本格導入。(後ろ2つは、17年前。)
※このときの羽田首相(新生党)の顔がモロに半島顔。
※このとき、小沢の新生党を全力で選挙支援したのが、創価学会といわれる。
※このとき、自民「単独」政権(公明抜きの単独2/3議席)の復活に、圧倒的不利な
比例選挙制度へ法改悪↓
2014総選挙の比例当選率
政党名 自民 公明 民主 維新 共産
比例区 68 26 35 30 20
合計数 291 35 73 41 21
比例当選率 23% 74% 48% 73% 95% ←※
共産・公明・維新は、比例制度を廃止すれば消滅w
参考)
民主党は、超円高誘導でパナソニックやシャープ、ソニーを潰す気だった?
http://www.youtube.com/watch?v=iG_oaqU0pEM 帰化朝鮮人ばかりが政治家を目指す国?日本
http://www.youtube.com/watch?v=CxIGOhFT4g8 続く
続き 日本に借金を抱え込ませたのは小沢一郎(たぶん在日帰化)。
小沢が430兆円
村山(旧社会党:この人も帰化?)内閣がプラス200兆円
トータル630兆円
(詳しくは日米構造協議で検索)
今ある借金は、これとその利息では?
小沢は、自民党時代に日本に爆弾を抱えさせた上に、そのバラマキ公共投資で得た
支持基盤をごっそり自民党から引き抜き(仲間を引き連れ離党)、
自民を単独過半数割れに追い込んだ。
そして、第3極政党(新生党→公明党)を介入させ、韓国や在日へ利益誘導してきた。
日本を借金大国にしたのは自民党だ!と、自分で仕込んだ火種を野党側から
追求する自作自演劇によって、民主党への政権交代につなげた。
※自民党以外の議員は、日本姓を名乗る帰化朝鮮人か、その影響下にあると仮定。
という流れではないでしょうか。
こんなこと考えた俺天才!的な糞コード
argc--;
argv++;
そんなコピーのしかたをするのは領域の最後までに必ず\0がある文字列だけだろ?w
コピー先にコピー元より狭い領域を指定するのもバカだしw
tgmathって使ってる人いる?
正直、要らん仕様だと思うんだ
C++のオーバーロードが羨ましくてしかたないんだろうなあ
っていうあれか
C++のオーバーロードは仕様がとんでもないことになっているからね。
13節丸ごと説明にかけてると思ったら実は14節テンプレートの
パーシャルオーダリング含めたC++言語仕様で最も難解な内容だったし。
Cのtgmath程度が健全なレベル。
C++オーバーロードはみんな使ってる
Cの<tgmath.h>は誰もつかってない
これが真実
10 :
デフォルトの名無しさん:2015/02/15(日) 01:44:05.69 ID:Yq9FTKtU
テキストエディタで書いて最短コンパイル一発で実行ファイル生成ってのを諦めてしまえばもっとシンプルに出来ると思うんだよね
プロトタイプは実装コードを解析して必要とするオーバーロード関数や外部識別子を持たせるようにするとかさ
バカの考えることはたいていは間違ってるよ
煽る人は大抵中身無いよ
ブーメランって言いたければ言えば?
>>10 もう、そうなってるとおもうよ、VC++ あたりはどうだかしらないが
ソース -> オブジェクト
オブジェクト + ライブラリ-> 実行形式
>>10 ・グローバルでセミコロンで終わる宣言の廃止
・クラス定義を変数宣言や関数のプロトタイプ宣言と一緒に行わない文法
この二つがあれば複数ファイルを同時にコンパイルできることはC#で実証されている
Javaのようにクラス名からそのファイルを探す仕組みは無くてもいい
現行の C でも C++ でも複数ファイル同時コンパイルくらいできるし
普通 make するときは -j オプションつけるじゃん。速いから。
メジャーな IDE、VC や xcode は勝手にやってくれるし。
16 :
デフォルトの名無しさん:2015/02/15(日) 12:25:25.83 ID:/CNeEnsG
queue<pair<string,bool> > cutInStack;
cutInStack.push(make_pair<cutInImageFileName,reverse>);
エラーが起きるんですがなんでかわかりません
make_pair(cutInImageFileName,reverse)にすればいいと思うよ
前スレでポインタの質問した者ですが、皆さんのおかげでポインタのイメージががっちりつかめました。
ありがとうございます。
centos 6で、libtermcap.a が見あたらないのですが、入手方法についてどなたかご存じではないですか
if( *a++ = *b++ ){
・・・
}
の時、
@aが\0だったら抜ける
Abが\0だったら抜ける
B*aに*bを代入する
Caを加算する
Dbを加算する
E・・・の実行
で合ってますかね。
3
4
5
1
6
*bを*aに代入
*aが\0なら抜ける
a++, b++のタイミングは知らないが
いずれにせよ加算されてるはず
はー、なるほど、
(*a=*b)で条件が(*a)になって (*a) だけが評価されるようになるんですね。
代入の後に加算するから、加算した後の*aが\0だったら抜けるって事ですね。
はー、なるほど、目から鱗ですわ
いや、aを加算する前の*aが\0だったら抜ける
後置++はそういう動き
25 :
22:2015/02/16(月) 19:20:34.60 ID:zwe4WhUj
>>23 ごめんごめん、多分誤解を与えてる。
> 代入の後に加算するから、加算した後の*aが\0だったら抜けるって事ですね。
加算も加えて書くと、代入→判断→加算ね。
判断の後に加算するから、ポインタはそれぞれ判断に使った位置の、一個後ろさすことになる。
26 :
20:2015/02/16(月) 19:40:17.40 ID:93EvvdXC
なるほど、
後置++は式全体(この場合ifの判断も含む)を実行した後に加算されるって事ですね。
(*a=*b) で代入して、(*a)がfalseか判断して、if( )の式が終わった時点でa++,b++を実行って事ですね。
よく分かりました。勉強になりました。
その 式の終わった時点=副作用完了点 だけども、
規定してるのは、「ここまでには加算が済んでいる」であって
「ここ以降で加算する」じゃない微妙なお話
cout << file.getc() << file.getc()
とやったとき、読んだ順に書いてくれないということ?
糞言語の糞ライブラリの洗礼だな
>>28 >特に定められているものを除いては
わざわざ探してきて url 貼ってるんだから読んでよ
operator<< は特に定められてないよな?
33 :
20:2015/02/17(火) 00:00:03.22 ID:TDLatExy
はー、なるほど。
副作用完了点までにある式は、特に定められた評価順序が有る物以外は同じで、
左から右に実行されるとかが保証されていないって事ですね。
で、その特に定められた評価順序以外で、
左から右とか右から左みたいに評価順序に依存するような式は駄目って事ですね。
質問して良かったですよ。少し賢くなりました。
operator<< も operator+ も
特に定められてないことについては同じ
35 :
28:2015/02/17(火) 00:02:54.49 ID:40ZPjrIU
> +の評価順序も定まっていない件
これはCの場合はって事でいいんかな、
それともC++のoperator+も定まっていない?
定まっていない時は、operatorの種類は限定されている?
というのも、&&を利用したテクニックとしてよく
bool continue = true;
continue = continue && f1();
continue = continue && f2();
continue = continue && f3();
というコードを書くが、operatorの種類に関わらず定まっていないのなら、
continueが途中でfalseになったとしても、その後のf2やf3が環境によっては評価されてしまうからまずい書き方になる
>>36 演算子による
false & f(); はf()が評価されるが
false && f(); は評価されない
>>36 c,c++で項の評価順が定まっているのは組み込みの && || , ? の四つの演算子
それ以外の組み込み演算子とオーバーロードしたoperatorの場合は定まっていない
cout << file.getc() << file.getc() << file.getc() << file.getc() << file.getc();
これに"hello"と与えて"hello"と出力される保証はないということか?
遅くなっても良いから、評価順序が確定してるC++が欲しくなった
((((cout << file.getc()) << file.getc()) << file.getc()) << file.getc()) << file.getc();
お"ぇ"
>>40 保証はない
ちなみにcでのこういうのも同じで保証はない
printf("%c%c%c%c%c", fgetc(fp), fgetc(fp), fgetc(fp), fgetc(fp), fgetc(fp));
>>42は正しく理解できていない人の典型的な例
その式は
>>40と等価の式で実行結果的には余分な括弧はまったく無意味
え?
括弧ぶち抜いて計算順序が不定になるの?
それ本当?
あ、ごめん。話を見間違えてた。
括弧で制御できるのは計算順序だけで、「計算に使われる個々の要素」がいつ評価されるかとは別の話だった。
すまん。44は忘れて。
昔は速度や実装の都合で仕方ないこともあっただろうけど
今となっては評価順序確定的な方がメリット大きそう
そうだろうけど、それを同じ言語の中で行うのは割と危険だと思う、
環境依存を増やすのは、動かしてみたらいけたという手法で×を貰う人がさらに増える事に繋がる
言語仕様で決めるとコンパイラの最適化を阻害する
とゴネる人たちをまとめて国際化規格にするための妥協の産物。
49 :
デフォルトの名無しさん:2015/02/17(火) 22:26:01.36 ID:J4a0mND/
質問があります。環境はMinGW-w64です。
struct A {
int *p; size_t s; int u;
};
なぜsizeof(struct A)が24になるのでしょうか。
私は20になると思ったのに。
構造体のデフォルトアライメントが8バイトになってるんでないの?知らんけど
alignを指定してないから
コンパイラはalignを指定していない構造体に、最適化のために適宜パディングを入れていい
>>49 X ar[2];
sizeof arがsizeof(X)の2倍にならなかったら嫌だろ?
alignとpackの違いって何ですか?
packは
#include <pshpack4.h>
...
#include <poppack.h>
などで指定するヤツですよね?
的を外した説明ばかりでわろたw
>>53 alignは型(クラス)全体のアラインメント
packはクラスの中での各データメンバのアラインメント
を指定するもの
57 :
デフォルトの名無しさん:2015/02/18(水) 00:43:01.28 ID:fxWFvcN5
Win32APIを利用してC/C++でテキストエディタを作っています。
アンドゥ/リドゥはどうやって実装すればいいのでしょうか?
メモリの許す限りアンドゥできるようにしたいと思っております。
テキスト全体を丸々別のメモリ領域にコピーしていけば簡単ですが、文字1つ打ち込むたびに丸々コピーするのもおかしい気がしますし、
かといって様々な操作を記録していくのも管理が大変な気がします。
1文字打ったのをアンドゥで戻す程度なら大変ではないですが、
特定の文字列を一気に複数箇所程度置換したりしたら管理が大変です。
どのように実装するのがいいのでしょうか。
alignment requirement of type...
>>57 undo bufferは、数学的には差分のリストで管理する。
つまり、beforeの状態とafterの状態のペアのリスト。std::vectorなどのC++のコンテナを使う。
元に戻せるか(can undo)、やり直せるか(can redo)の状態も管理する必要がある。
また、メモリーの負担も大きくなりすぎないようにサイズを制限する。
状態の差分をどのように考えるか。
例えば、三行目に「あいうえお」という行を追加した場合、
全体の行の並びの状態は文字列のリストと見なせるので、
その差分は、(3,'+line',"あいうえお")である。その逆は、三行目を取り除くであるから(3,'-line')。
差分に複数の種類がある場合、それらを統一的に扱いたい。
そこで仮想関数や基底クラス、関数ポインターが役立つ。
企業の名を語って問題化してる詐欺師が
「情報数学」と「情報算数」の違いだね。
>>61 先ほどスレを立てて質問してしまったものです。
getchar();を追加するようアドバイスいただいたものです。
次の項へ進んだのですがそこでも同様のアクシデントが発生してしまいます。
http://bituse.info/c/6 こちらのページです。
一度目の「文字を入力してください」の表示はできるのですが文字を1バイト分入力して
エンターキーを押すとやはり即座に終了してしまいます。
初心者ながらにgetcahr();を意味もわからずに同様に入れてみましたがやはりダメでした。
初歩の初歩でとても恥ずかしいですが全くわかりません。
またお助けください。
>>64 mainの最後あたりに「デバッグ」→「ブレークポイントの設定」
原因は「入力バッファに文字が入ったままの状態だから」。
ブレークポイントを設定すれば、そこでプログラムの実行は止まる。
ソースの行の左側をクリックすれば、赤い丸がつく。
これがブレークポイント。プログラムを実行させると、そこで止まる。
黒い画面が消えるのはプログラムが終了したから。
68 :
57:2015/02/18(水) 12:18:48.23 ID:fxWFvcN5
全く返信が来ないので、他のところで質問してみようと思います。
マルチポストになるためこちらでの質問は締め切らせていただきます。
スレ汚し失礼しました。
69 :
デフォルトの名無しさん:2015/02/18(水) 12:43:25.56 ID:a50GzuXq
>>57 各操作に、戻す操作を用意する。その方針なら、カーソル移動もUndoできる。
戻す操作を一時ファイルに記録していく。これでできます!
むかしは、メモリは、高価だった。メモリでやろうとしなかった。
その方針で、あとは、データ構造をきめる(各レコードに、レコード番号がある)
戻す操作が各レコードにある。
Redoは、どうやるのかしらない。Redoっているのかなぁ?
締め切るって言われてから書き込む人って・・・
締め切るような馬鹿質問者の都合なんかどうでもいいだろ
質問者の利益を願わぬよう二他の連中が雑談してりゃいい
vector<MyStruct> data;
みたいなデータを使って、ある種の処理をしているのですが、
vectorの途中の要素を削除したり、追加したり、forループで全データを
読み出したり、変更したりする処理も沢山入っています。
こういう場合、vectorを使わずに、malloc, freeを使ってポインタによる
リスト構造を作成したらもう少し速度が向上すると思うのですが、
質問ですが、
一般に、vectorを使うより、ポインタ式のほうが速度は向上しますか?
速度が向上するとした場合、処理内容にもよると思いますが、何倍くらいになる可能性がありますか?
せいぜい1.5倍とかそんな程度でしょうか?あるいは数倍速くなる可能性ありますか?
経験ある人、コメントお願いします。
>>72 std::vectorの途中の要素削除はサポートされてるけど速度を求めるなら当然やるべきではない
リスト構造にするならstd::listを使えばいいんじゃないの?
速度が何倍になるかはケースによりすぎるので誰も答えられない
>>72 それは処理によって変わるから、両方作って比較してから選んでください
>>72 要素の途中を削除すると後ろの要素を全部前につめるようにコピーしなおすからそれが時間食う
要素の半分くらいの数を一度に削除したいとか、そういう、削除が多すぎる場合は一旦nullでも入れといて
二本目のvectorに手動で移すようなのがまだマシかもね
v[j] = null; v[k] = null; // ....
for (int i = 0; i < v.size(); i++) if (v->at(i) != null) v2->push_back(v->at(i));
v->clear(); // 一気に全要素削除
t = v;v = v2;v2 = v; // 場合によってはこういう差し替えをしてもいいかも
あくまでvectorでやりたい場合は、ってことで
vectorは途中への追加・削除は想定してないよ、それによって連続性の保障・生配列と等価なコスト等の恩恵がある、
やりたいなら素直にlist使っとけ
ちょっと語弊があった
メンバメソッドに途中追加・削除はあるけど再配置コストでかいから、
パフォーマンス気にするなら素直にlist使っとけって意味ね
79 :
75:2015/02/18(水) 18:40:44.15 ID:dFtyN/e5
>>79 v[j]=null に該当するコードが無いな
>>79 a b cをポインターにするメリットがなさそうなのに、どうしてそんなことを
単純に元の配列に、削除や追加を行って新しい配列を作るって事だろう。
変更だったら元の配列直接で良いが、削除追加は新しい配列にコピーした方が良いな。
って事を言いたいんじゃないの
ゴミがゴミみたいなコードを貼るのはよしてくれよ。吐き気がする。
88 :
75:2015/02/18(水) 20:33:25.08 ID:hhBoAooq
>>84 二本目のvector使うことによって
eraseをpush_backに置き換えてるのが肝
もしeraseしすぎて困ってて
二本目のvector確保しても平気なときとか
>>82 t = b;b = c;c = t;
これをポインタでしたかっただけ
本旨に対して瑣末なんでお好きにどうぞ
>>88 もういいよおまえ馬鹿なの分かったから!
他の人のコードを黙って見てろ
>>87 &と%の間違いがあるからbの減り方が少なすぎるんだな
92 :
デフォルトの名無しさん:2015/02/18(水) 21:31:03.02 ID:mNlNVJ9p
何かおすすめの書籍有りませんか?
More Effective C++
俺は読んだことないけど
94 :
デフォルトの名無しさん:2015/02/18(水) 22:14:51.82 ID:mNlNVJ9p
C++11,14対応の新版 Effective Modern C++ (ただし日本語翻訳版はまだない)
がでてるのに時代遅れの旧版すすめてどうするんだ
もちろん今でも通用することも載ってるのでそこをわかったうえで読むならいいけどさ
ああ、そんなタイトルだったか
読んでないからMoreが最新だと思い込んでた
OpenProcess
ReadProcessMemory
WriteProcessMemory
がDLLインジェクション?され、欲しい結果がまともに得られません。
なので同等の機能を持つ
OpenProcess2
ReadProcessMemory2
WriteProcessMemory2
という別の関数を作りたいのですが技術的に可能ですか?
元の関数の中身の確かめ方なども教えてほしいです。
プロセス間通信したい→他の方法使え
実行中プロセスの中身が見たい→デバッガ使え
他の実行中プロセスを不正に書き換えたい→諦めろ
チーターかよ
banされるからやめとけ
101 :
デフォルトの名無しさん:2015/02/19(木) 19:04:12.08 ID:eawGJ+OB
今は反芻している
なんだこのスレ。
なんでみんな怒ってるの?
>>65-67 お返事が遅くなりすみません。
ブレークポイントの挿入できちんと出来ました。
せっかく原因として書いていただいたことも勉強不足でよくわかりませんが
今後勉強を重ねたいと思います、ご丁寧にありがとう御座いました。
また何度もお世話になると思いますがどうぞよろしくお願いします。
105 :
デフォルトの名無しさん:2015/02/19(木) 21:43:42.43 ID:sOrLlryh
>>104 おう!またこいよ!絶対だぞ!来なかったらこっちから訪ねて行くからな!
元のアドレスには別のプログラムが置かれ
kernelの実体は別の場所に移ってるような?
その別のプログラムがkernelとの橋渡しをして
保護対象のプロセスにアクセスするようなら
デタラメな値を返しているような?
ということはkernelの実体を探せばいいのだろうか。
さっぱり分からんなぁ・・・。
ドライバ書いたほうが早い
ドライバの書き方は本買って嫁
終了
むしろみんな怒ってる前提で読むと面白いな
人格否定大罵倒こそ2chの花ですから‥糞呼ばわりすらされなくなる(相手にされなくなる)とちょっとさみしい‥
>>110 QZさん、こんにーちわ。
相変わらずはっちゃけてるかい?
>>111 最近ネタがなくてさー
なんか手伝えることないですか?モリタモ 500 でお受けしますぅ‥
113 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/02/21(土) 19:46:55.40 ID:swM6o0zc
>>112 よろしい。ならばURLをSVG画像にする変換器を作ってくれたら
アマゾンギフト券3000円分差し上げよう。
言語はJavaScript。トリップを忘れずに。
Javascript ですか‥一からやる気力がないからいいですぅ‥
>>114 他の言語ならWebMoney2000円分になるが。。。諸君には作れるかな?
こう言うのに変換すれば良いのか?
<svg height="30" width="200">
<text x="0" y="15" fill="red">I love SVG!</text>
</svg>
ここでやるなよ(´・ω・`)
つまんない質問ですみませんが
下のような場合、get_hello_1はOKで他は全部ダメ?
std::string get_hello_1()
{
return std::string("hello");
}
std::string get_hello_2()
{
return "hello";
}
char* get_hello_3()
{
return "hello";
}
char* get_hello_4()
{
char buf[255];
strcpy(buf, "hello");
return buf;
}
4だけダメ
3は戻り値をconst char*にしたほうがいいね。
おまえら適当だな
C++の文法上だめなのは3だけ
動作的にだめなのは4だけ
1と2は問題無し
3は確かにconstが必要でした。すみません
2と3がOKなのは文字列定数だからメモリが消えることはなくずっと確保されているからでしょうか
ちなみにもう一つ。下の場合はstd::stringオブジェクトが生成されてOKになります?
std::string get_hello_5()
{
char buf[255];
strcpy(buf, "hello");
return buf;
}
おk
3は別に動作に問題は無いんでしょ
C++11ならコンパイルできない
へぇ、そうなんだ
ちがった、そうかコンパイルはできるのか
Werrorにしてたわ
C++11より前は、文字列リテラルをchar*で受けられる(ただしdeprecated)
C++11で禁止されたけどVS2013ではオプション扱い(/Zc:strictStrings)
ということみたい
あれ、じゃあなんでコンパイル通ったんだろうと思ったけど、clangもgccもオプション付けなかったらあえて規格に反してコンパイルできるようにしてるのか
C++11では禁止されてるよみたいなWarningが出た。一度規格書確認しとくわ
>>125 >文字列定数だからメモリが消えることはなくずっと確保されているからでしょうか
3はその通り
2は違う
2はstringのオブジェクトが作られてその生存期間が
呼び出し側のセミコロンまで続くから問題ない
皆様ありがとうございした
いくつか誤解していたことが解決して大分理解が深まりました
std::string get_hello_2() {
return "hello";
}
初心者が理解しづらい所だな。
関数の戻り値というものが誰がメモリを確保して
いつコンストラクタとデストラクタが呼ばれるのかわかりづらい。
ついでに大抵はRVOとNRVOの話が一緒に付いて来るので混乱を招く
こんにちは!
先先日より大変お世話になっております
>>104です。
ブレークポイントでプログラムが終了してしまうのを防ぐことはできるようになったのですが、
(これは本筋とは逸れますが)これはあくまでチェック用なのですよね?
そこでプログラム的に(?)終了を防ぐ方法が知りたいのですが
お教え下さるか検索ワードを教えてもらえませんか?
よろしくお願いします。
>>136 無限ループ、Win32のSleep、Linuxのusleep
>>136 最もシンプルに、余計なキーを打たない前提なら、getcharを二回連続で呼べばいい
一回目のgetcharは、scanfで拾えなかった改行文字が入ってくる
二回目はバッファが空なので、入力を待機する
>>135 構造体を返値とする、と類似しているとしてだいたい把握できる
140 :
デフォルトの名無しさん:2015/02/23(月) 23:23:46.90 ID:0KMyfxui
OpenCVを使い始めようとしており、全くの無知ですが教えてください。
未解決の外部シンボル_cvReleaseImageが関数_mainで参照されました
とエラーが出ている場合、どうしたらいいのでしょう?
関数が見つかりませんよ、と言うのはわかるのですがこの関数はどこにあるのでしょうか?
_cvReleaseImageなる関数があるライブラリがリンクされていない様子
リンク設定を見直す、あるいは使ってるIDEのリンク設定の仕方を勉強する
142 :
デフォルトの名無しさん:2015/02/23(月) 23:32:54.48 ID:V8GOYsYk
それはOpenCVというより、一般的なC言語のライブラリのリンクの話だ。
143 :
デフォルトの名無しさん:2015/02/23(月) 23:41:56.37 ID:0KMyfxui
その_cvReleaseImageがあるlibファイルというのはどう判別すればいいのでしょうか
ソースコードなどからは判断できますか?
OpenCVの説明ドキュメントでも読んでください
OpenCVのdllがリンクされてないだけだろ。静的リンクか動的リンクすれば使えるようになる
>>140 debian環境だとhighguiってのに入ってるね
MSDNのように明記されてないので
(ビルドオプションでどうとでもなるだろうから)
pkg-config opencv --libs
でso$をgrepしてreadlink -fで実態調べて
objdump -Dしてgrepという力技で特定しました
stripなもんで
>>137 >>138 お返事遅くなりまして申し訳ありません。
片山さんのワードで検索してみたのですが、sleep関数を理解するにはまだまだ時間がかかりそうです。
それでも存在を知ることができてよかったです。ありがとうございました。
今のところは
>>138さんのgetchar()を2回使う方法でうまくいってます。
解説もしていただき大変ありがたいです。ありがとうございました。
出来れば自分で解決できるのが望ましいのですが、自己解決できなかった時はまた来ます。
その時もどうぞよろしくお願いします。
>>149 >>104みたいないわゆるコンソールプログラムであればsleepを使う必要は全くないよ。
むしろ、無限ループでsleepだけだとプログラムを正常終了させる方法がなくなるからやめた方がいいよ。(この方法で正常終了させるようにするならら
>>138の方法のが手っ取り早い)
%*cじゃあかんの?
#include <stdio.h>
#define N 3
int main(){
int tmp,i,j,z,a[]={0,0,0};
char ans;
printf("整数を%d個入力してください\n",N);
for(i=0;i<N;i++){
printf(">\n");
scanf("%d", &a[i]);
}
for(z=0;z<N;z++){
for(j=N-1;j>z;j--){
if(a[j]<a[j-1]){
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
return 0;
}
c++ってcでも書けるけどcとc++混ざったような書き方って一般的にどうなんだろうか?
154 :
デフォルトの名無しさん:2015/02/28(土) 12:00:46.80 ID:j5d61nKt
>>152 3つ数字入力させて、合計を表示してるのは分かるけど、これくらいなら、電卓とか、エクセルでやったはうが早くない?
155 :
デフォルトの名無しさん:2015/02/28(土) 12:06:03.03 ID:8paVhiek
>>153 ライブラリによる。GUIとか
オブジェクト指向かどうか
STLをつかうか
>>153 やる必要があれば、それも可能なのがC++の利点
今でこそC++らしい書き方のほうが多くなったけれども
「better C」という、C言語風だけどC++の良いとこ取りもする、というスタイルは
昔はけっこうよく行われてたよ
iostreamのマニュピレータはどうしても慣れない
better Cは絶滅中
159 :
デフォルトの名無しさん:2015/02/28(土) 13:33:07.23 ID:3oOu8rEl
printf()ってすごいね
boost::formatをprintfみたいな感じで書けるテンプレート関数使ってるな
boost.formatビルドが重いねん
今時STLは無いな
数ヶ月かけてコツコツ自作のプログラムを作っているうちに、苦し紛れに即席で
使ったグローバル変数があっちこっちに
合計十数個出てきて、収集がつかなくしまいました。
グローバル変数を上手い具合に管理する方法有りますか?
グローバル変数を使うなという意見は勘弁して下さい。私の能力では使わずにはプログラム組めませんので。
よろしく。
まずは糞コテ付けろ
クラスで包んで誰が所有、利用するかを明確にすべき
>>165 クラスも使っているんですが
幾つかのクラスの中ではstatic変数も
使っていて、それも混乱の一因です。
クラスの中でstatic変数使うのは駄目でしょうか。
外から見えなきゃグローバル変数static変数何個使おうが気にしないな
単にグローバル変数とか言われてもアドバイスできる奴なんていないと思うが。
その場しのぎで追加するようなグローバル変数は実際は引数渡しで事足りる場合ばっかりだろうからそこを作り直せば数が減って収集がつくと思うよ。
>>163 とりあえずグローバル構造体かクラスにまとめて全量洗い出して取捨選択
171 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/02/28(土) 21:57:16.55 ID:OFsucKZW
アライメントとビットフィールドの挙動不審で困ってる。
#include <pshpack1.h>
typedef struct {
int a : 8;
int b;
} X;
#include <poppack.h>
このとき、sizeof(X)==8になるが、
メンバーaをint a : 9;にするとsizeof(X)==6になる。
何でやねん! ビットを増やしたらサイズが減るのか!
>>163 いいきっかけだから他のプログラムでも使用できそうな機能は機能毎にしちゃう
一個パズル作ったんだがどんどん機能拡張していってもはや何のソフトか
分からなくなってきた。
そろそろクラスとかも覚えて使ってみたいし新たに1からつくるか・・
174 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/02/28(土) 22:30:33.27 ID:OFsucKZW
>>171 これを馬鹿にもわかるように論理的に説明して下さい。
環境はMinGWです。
>>176 VC++ 2010 EEで両方8になったんですが
>>177 ありがとう。
VC++とGCCのABIの違いのため-mms-bitfieldsつけないとダメだと。
ビットフィールドのせいで一日つぶれた。。。
やべぇ、継承でわからなくなった・・・Orz
public privert potected これわかりやすく
解説したサイト知りませんか?
public だれでもアクセスできる
private そのクラスだけアクセスできる
protected そのクラスと、派生クラスだけアクセスできる
そういうことじゃなくて・・・orz
182 :
デフォルトの名無しさん:2015/03/01(日) 14:33:42.98 ID:VYwW9Vyn
「そういうことじゃなくて・・・orz」じゃねーよ
期待した解答と違うとおもったなら自分の質問にもっと具体的な補足をしろ
できねーなら死ね
private 継承 元を全て private へ
protected 継承 元publicをprotectedへ 元protectedをprivateへ
public継承 元の状態を維持
だったっけか?
privateじゃなくてprivertだからな
そんなモン誰も知らねぇよ
protected継承は割と新機能を車輪の使い回しで実装したい時に便利
自分のアクセスレベル以上のものを自分のアクセスレベルにする
public そのまま
protected publicだけprotectedへ
private 全部private
protected って本来は使うべきじゃないの?
メンバ変数は基本的に全てprivateにしてsetter getterを関数に書いて
派生クラスから基底クラスのメンバ変数を呼ぶときは全てsetter getterを通じて扱うのが本来のオブジェクト指向な気がするけどどうなんだろう
190 :
デフォルトの名無しさん:2015/03/02(月) 00:05:32.07 ID:XG6Dbdai
>>189 気にしないで、ガンガンPUBLIC使うべし。
いちいち代入のために関数作ってたら、生産性わろし
関数ひとつ追加するコストは、ドキュメントやテスト、IFの構成などの影響を考えると高くつく
学者のべき論と実戦は異なるのだよ
>>189 お前アホか
本来のオブジェクト指向()とやらでは実現できない「実装の再利用」のために
friend/private継承/protected継承があるんだよ。
オブジェクト指向の考えに形式的に当てはめようとして
getter/setterにする方がクレイジー
>>191 そうなのか・・・
本とか一部サイトではsetter getterを通した方が値のチェックを行えて安全とかあるから混乱してたんよ
>メンバ変数を呼ぶときは全てsetter getterを通じて扱う
内部の変数へのアクセスを許すのは
オブジェクト指向の考えに反します
getterを作れば良いと言うものではありません
内部変数ありきで、内部変数の仕様から完成して、
それにあわせてgetter作ってたらオブジェクト指向じゃない
折角privateにしてるのにsetterされたらそれもうprivateの意味無くね
196 :
デフォルトの名無しさん:2015/03/02(月) 01:09:06.37 ID:XG6Dbdai
>>195 それは、言語仕様の矛盾だよね。
でも現場ではpublicしか使わないから関係ないけどね(制御系とか金融のプロジェクトは知らないけど)
だからと言って変数をpublicにしたらsetterにトリガ仕込んだり出来なくなるし
アクセッサ経由でしかアクセスしない親クラスなら、
そこから派生させるのではなくそのクラスのインスタンスを
メンバとして持てば十分でしょう。
その方が良いならそうすべきで、かつそのクラスを
テンプレート引数として汎用化できないかも考慮すべき。
なに インヘリをうだうだ考えてると禿げになりますよ。
普通にクラスを作って楽しく使いましょう。
配列は、配列名でその配列の先頭アドレスが確保出来るということですが、
なぜ配列ではない関数も同じように関数名で先頭アドレス確保出来るのでしょうか?
関数名に「&」を付けるなら分かるのですが・・・
int i[5]={1,2,3,4,5};
int* pi = i; // OK
int i=1;
int* pi = &i // &が必要
******************* こっから下が分からない *******************
void kansuu(char* str){
std::cout << str << "\n";
}
void (*po[])(char* str)={kansuu}; // なぜ&kansuuでなくてよい?
po[0]("なぜじゃ");
>>201 一種の例外だし、それを好まずそう書かない人々もいる
>>202 &をつけてもコンパイル通るんですね。例外了解です。
>>201 &なしは関数オブジェクトと関数が同じ表記法になれる
テンプレートの場合では&をつけるわけにはいかない
そのため付けないのが主流となる
呼び出すときも funcptr() と (*funcptr)() どっちもいけるよね
>>206 ANSI-C以降の話しね。ポータブルCとかK&Rは駄目(豆)
C暦3日目です
ここに自分が書いたソースコード張ったらダメ出しみたいなのしてもらえる?
テストの点数とそれに対応する順位をつけて、同じ点数は同じ順位にするってプログラムを組んだんですけど
一応目的の動作はしてくれます
>>210 直してみたよ
http://codepad.org/vCg6eNwh 解説
・変数名はc0など意味の分かりにくいものにせず、pointとかorderとかにしよう(↑では変えてないけど)
・10や9や8といった定数は、配列の要素を後で増減させる時に修正しやすいよう、変数などに定義しよう
その際は、要素数(人数)に合わせて'10'を使うのがいい
基本的に、配列をfor文で辿る時は (変数=0; 変数 < 要素数; ++変数) という形になるのでこのまま憶えよう
本当は配列のサイズからも分かるけど、それはもうちょっと先のレベル
・同じ点数の人が同じ順位になるよう、順位を示す変数は途中では変えず、後でまとめて人数分増やす
そうすれば後半のややこしいループは不要
・main関数の引数と戻り値が間違い
>>211 便利ですね覚えておきます
>>212 ありがとうございます、すごい参考になります
引数と戻り値は勉強しなおしておきます
size_t (実体はunsigned int)からunsigned longへの変換でpossible loss of dataって言われたんだけど
intよりもlongのが扱える範囲は大きいはずだからおかしいよな・・・?
それだけじゃなんとも
size_tが_int64にでもなってたんじゃね
今時 size_t が unsigned int と同サイズって少数派だもんな
ホントだ
インテリセンス君はunsigned intだったけどたどっていってみたら__w64なる接頭句が
たいていの x86_64 や arm64 のコンパイラは
LLP64 っていって、long long とポインタが64bit
そのあおりで size_t と ptrdiff_t (ポインタの差) も64bit
64bit CPU の先駆け Alpha AXP の頃は LP64 といって
long とポインタを 64bit にしてたけど、その時の経験で
long は 32bit のままの方が 64bit 化にあたってのコードの
修正が少なくて済むとわかってLLP64 が主流になった
>>218 こう言うウソをしれっとつくバカは死んだ方が良い。
win16からの移行を容易にする為にすでにグダグダになっていたwin32
それからの移行を容易にするための選択がLLP64
64bit環境におけるデータモデルの話じゃなかったのか
>>221 MS帝国(大分おちめ)の奴隷は引っ込んでいろ。
LLP64なんか採用してるのはwin64だけ。
確かに218は不正確で220が正しい
64ビットの先駆けとなったDEC Alpha系もLP64だったような
>>218 > たいていの x86_64 や arm64 のコンパイラは
> LLP64 っていって、
いやいや、そんな珍しいものは唯一windowsだけじゃないの?
//#define AAAA
//#define AAAA BBBB
#define AAAA CCCC
と記述した後に、任意の場所で、
AAAAがCCCCとしてdefineされているかを判定することはできないでしょうか?
if (AAAA==BBBB) {
return true;
}
値との比較で
#if(WINVER >= 0x0500)
#endif
こういうのは見たことがあるが、特定のシンボルに定義されているかどうかを
#if で判定してるのは、見たことがないな(&それが可能なのかは知らないな)
フォルダー(a)に複数入っている各csvファイルの行数を調べて表示するやり方を教えてください
質問のどのあたりがスレチだったのかkwsk
232 :
デフォルトの名無しさん:2015/03/05(木) 22:37:42.95 ID:4qwAFJaB
>>229 10 OPEN DIR("*.csv") AS #1
20 sizeof(#1)
30 GOTO 10
40 END
>>229 find . -name "*.csv" | wc -l
>>229 $ find ./a -name "*.csv" | ruby -rcsv -lne 'p [CSV.read($_).size, $_]'
>>233 xargs
fopen(csv);
int i = 0;
while ( fgets( ) ){
i++;
}
fclose();
return i ;
>>233,234
find a -name '*.csv' -exec wc -l {} \;
CSVと指定してるのが引っ掛けだったりして
ダブルクオートの中に改行が入る場合を考慮しないといけない
Excel仕様だと、( , )( " )( 改行 )等があると全体を( " )で括り、さらに( " )は( "" )とエスケープするという素敵仕様
そういう改行だとか , " への対応だと、
C#でTextFieldParserを使うのが一番簡単かな?
>>236 今は
find a -name '*.csv' -exec wc -l {} +
って、やるんだよ。
20世紀からきたおじいちゃん。
>>238 Excel仕様というか、今はそれでRFCになってるけどな。
csvデータ の行数なのか
(csv) ファイルの行数なのか
そもそも行数とは何か
難しい
ファイルの行数=ファイル数と空目した。すまそ
拡張子が.csvとは言ってないんだよなあ
245 :
560:2015/03/06(金) 21:01:06.91 ID:n9/U+gAr
>>244 そこまで応用力のない奴は放置でいいだろ
腐ってもム坂だし
データに改行がある時正しくないね
247 :
デフォルトの名無しさん:2015/03/06(金) 22:15:46.04 ID:CKRqkh4t
csvとテキストって区別つくんか?
248 :
560:2015/03/06(金) 23:29:41.77 ID:rW0fbm/s
エクセル起動してcsv読み込ませて行数だけ返してもらえばいいんじゃないですかね(名案
FILE fp = fopen( csvファイル );
int c;
int i=0,行数=0;
while ( c = fgetc(fp) ){
if( c == 区切り文字 ){
i++;
if(i >= 項目数){
行数 ++ ;
i=0;
}
}
}
fclose(fp);
return 行数 ;
セル内改行してたら、1レコードで二行使ってたりするんだぜ
それcsvじゃないだろ
まぁ改行とかカンマとか入っているとダブルクォートで区切り出すからDouble quotes Separated Valuesが正しいな。
なまじ簡単そうに見えるだけに、csvとiniは勝手な解釈で読み書きされがちだな。
csvを読み込んで、リスト化して始めて行になる。
つまりCSVには行と言う概念は無いのよ!
取り出し方によって行数は変わるって事だ!
CSVからレコードとしての行数を取得すると言う事は、
どのような形でレコードの行をカウントするかが分からない限り不可能なのだよ!
CSV書き出させる時、Cells(1,1) = UsedRange.Rows.Countを義務化させれば解決。
Hitoというクラスがあったとすると、
Hit *hito = new Hito();
Hito hito = Hito();
この2つの違いは何でしょうか・・・
それぞれのメリットとデメリットを教えてください。
Cから勉強しなおしてください
Hit型とはどこからでてきたのか
>>258 > Hit *hito = new Hito();
動的ストレージ期間のオブジェクトの構築
メリット:オブジェクトの寿命をプログラマが自由に決められる
デメリット:プログラマがオブジェクトの寿命を管理しなければならない
> Hito hito = Hito();
動的ストレージ期間ではないオブジェクトの構築
メリット:コンパイラ(が自動的に生成するコード)がオブジェクトの寿命を管理してくれる
デメリット:プログラマによるオブジェクトの寿命の管理に制限がある
javaじゃないんすかw
>>261 よくわかりました
ありがとうございます!
真に受けちゃいけない
Hito hito = Hito();
あほ。
Hito hito();
でOK
えー、C++標準化委員会の議長が
auto hito = Hito{}; を絶賛推奨してるのにー
> Hito hito();
> でOK
これこそ完全にあほ
これは関数宣言
釣る意味は何だろう
簡単にだまされてしまうなぁ
アホと言うより言語仕様がクソとしか言いようがない
引数無し。ゼロ初期化しなくてもいいとき
Hito hito;
new Hito;
デフォルト初期化したい時
Hito hito(); // × 関数宣言
Hito hito{};
new Hito();
new Hito{};
要素数ゼロでinitilizer_list初期化したい時
Hito hito{ {} };
new Hito{ {} };
引数あり。initilizer_list初期化したくない時
Hito hito(4);
new Hito(4);
引数あり。initilizer_list初期化してもいい時
Hito hito{4};
Hito hito{ {4} }; // 警告
new Hito{4};
インスタンスを保持したい時にはnewを付けて生成してポインタを渡す。
そうじゃない時は普通に宣言し、インスタンスの処理は呼び出し側に任される。
templateクラスをfriend扱いしたいときはどうすればいいのですか?
無理
できました
VC++のウインドウプログラムの中でボタンを押したらインターネットエクスプローラーが開いて
指定したURLを開きたいのですが、ググルといろんなやり方があるようですが、どれでやっても
同じですか?もしそれぞれの方法で何か違いがあるなら教えて下さい。
shellexecuteでおk
>>277 レス有難うございます。
有名な秀丸だと更新確認実行するとwscript.exeがインターネット接続します
って出るんですが、秀丸さんがwscript.exe使っているのは何か特別な理由があるのかな?と思いました。
>>278 更新する場合自身のプロセスが起動してると失敗するから
>>279 自身のプロセスを更新する場合、
shellexecuteでは出来ないんですか?
ビットフィールドって何型?
int a : 3;
はint型なのかint:3型なのか
>>282 ビットフィールドはビットフィールドというのが回答だろう
あくまでビット数指定のメンバを指定するものだから
typeidで見えるだろう