【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/ その規約をやぶって、全部スタックに乗せる、という呼び出し規約を自分で実装していいですか? 規約は他のプログラムと協調するためだけのもの。
他のプログラムと絡まないんなら好きにすればいい。 >>302
別にAPI単位の規約だから好きにすれば良いけど、スタックだと32bitよりメモリ喰うし増えたレジスタ活かさずメモリとやり取りだから関数呼び出しが多いほど速度に差が出るよ。 アセンブラで書くならともかく、
既存のコンパイラで自己流の呼び出し規約を使うって可能なのかな。 レジスタとか出てる時点でアセンブラやけどね。
高級言語からは同じに見えてもアセンブラからAPI呼ぶ時に混乱の元だから規約になってるんだろう。 >>306
自己流の呼び出し規約を使うのは自己流のコンパイラだけだろ
それが既存かどうかは知らんけど アセンブラでリーフ関数を呼ぶとき位だな
自己流が役立つのは pro*cって何のために存在するの?
普通にc言語のコードにSQL埋め込めばよくね? >>301
第6引数までじゃね? 普通は rdi rsi rdx rcx r8 r9
rax も浮動小数の個数に使うが
windowsだけは rdx rcx r8 r9 だった気がする。 >>310
普通はCにSQL埋め込むなんてできないだろ。
SQL文を送ってコンパイルする関数を呼んで実行する関数を呼んで結果を取得する関数を呼ぶので
かまわないならPro*Cなんて必要ない。
それにしてもなんで今頃Pro*Cなんだろうか。とっくに廃止されたかと思ってた。 よくわからないんだけどSQLと連動できるプログラム言語ってあるの? >>314
SQL埋め込みコボルが世の中に何百万行残ってるとおもってんだ コボルかー
じゃjavaとかpythonとかC++やCで大量データを扱おうと思ったら何らかのアルゴリズムでデーターベース自作するしかないの?
それともそういう目的だとすべからくLinqとかつかってるの? 大量のデータを処理したいのならPLSQLとかのdb上で動作するやつじゃないの? DB操作用のクラスが標準ライブラリにあるから、その言語はSQLをサポートしてると思ってるのだろう。 const char ex1[] = "test";
const char ex2[] = { 't', 'e', 's', 't', '\0' };
auto ex3 = "test";
auto& ex4 = "test";
auto&& ex5 = "test";
ググってみると、ex1とex2は完全に等価、ex3はconst char*?
ex4とex5はconst char[]だけどex1、ex2と等価ではない?
どういうことッスか?なんかよー分からんです。 変数名の上にマウスポインターを持って行く
ぐらいは試したのだろうか 誰もかれもがモダンな統合開発環境を使ってると思ったら間違いやで。 >>325
その通りだ
では
http://ideone.com/GtYLLG
この結果を見てわからなければ出家するしかない
ついでにex1,2は関数が実行される度に配列が作られる using F = void () &;
struct A { void f() & {} };
F A::*const &mp = &A::f;
参照もこのぐらい複雑になるとコンパイラーですら正しく実装できないものが出てくる 初心者歓迎スレはいつから難読コードスレになったんだ? 難読禁止スレではないし
それより言語を断らずにc++限定の話すんなや おまえらは意図してドヤ顔でオナニーコード貼って理解できないなら出家しろとか言ってるからな。
初心者相手にマウンティングとか見てて恥ずかしい。 バカにマウンティングしてるお前や俺よりマシだろ w http://d.hatena.ne.jp/yupo5656/20060907/
この話ってグローバル変数の時だけと思っていいですか?
void f(){ const char g[] = "asdf"; }
だと毎回初期化する分、損になりそうに思うんですが 普通は最適化されて何の問題もないだろうけど
組み込み用の一部の糞コンパイラとかで使う可能性があるなら書き換えておいた方が良いかもね 極端に悪くなる可能性のあるコードにしない
汎用性のあるコードを書く時の基本
特定の環境だけならその環境でテストしてみればわかること >>335
だからstatic付けろって書いてあるっしょ リテラルに名前付けたいだけなら
auto&&var=リテラル
何も考えずこれでええw もしかして#defineで定数用意するよりそっちの方がかっこいい? #define A 100 ←存在が害悪の化石老人
auto &&A = 100; ←ODRを考えない短絡思考
constexpr int A = 100; // ←ふつうの人
constexpr auto &&A = 100; // ←ちょっとヘンな人 組み込みCだとdefineしか出来なかったりするんだよ >>346
ODRとはOne Definition RuleのことでC++の重要なルールである。
Cの仮定義と異なりC++ではインライン関数やテンプレートを除き
「定義」が複数あってはならない。
この多重定義の禁止と一部の例外を定めたルールがODRと呼ばれる。
例えばauto && A = 100;が記述されたヘッダファイルを
二つの翻訳単位からincludeしたとすると
二つの翻訳単位でAが定義されることになりエラーとなる。
詳細は処理系のマニュアルを見よ。 もしかしてヘッダファイルにconstexpr auto &&A = "lkjdslkjf";とか書くのって合法?
#define 名前 定数としてたやつは全部constexpr auto &&名前 = 定数で置き換えられる? >>348
内部リンケージなのでODRには違反しない
翻訳単位ごとに実体が異なるのでアドレスが異なると困る場合には使うべきでないが
これは旧来のstatic constやdefineでも変わらない #define→enum→const→constexpr
定数書くのに変わり杉です
理想論いらないです#define溢れた現実世界見よ >>350
老害の見苦しい言い訳乙
ディープラーニングとか言っても理解できないんでしょ?涙拭けよ constexprにしたほうがいいものがconstになってるのは結構あるけど、defineなんてほぼ見ないけどな 知る必要がない人が大部分だろうが
ここはそういう人限定のスレではない >>354 みたいなのを見ると、視野が狭いと思ってしまう
色々な事情で色々なコードがある Cに移植する可能性がゼロであるコードをC++上で新規でdefineで書いてたら老害だと思う 組み込みCだとstatic const使えてもアセンブリレベルで
即値にならないので#defineは常識
環境依存スレで多様性否定する奴は去れ >>361
だからそういうコンパイラを殺そうぜっていう話な constとconstexprの違いがよくわからない ROM に書ける内容だったら constexpr
RAM に置かなければならないのなら const >>364
どちらもコンパイル時に決まるものも決まらないものも扱うUNKO仕様なので常人が理解できないのは致し方ない
一つ知っておくべきなのは「constexprの変数はコンパイル時に決まるもののみ」ということ >>367
一般人はRAMも見たことないよ
組み込み用マイコンだと、フラッシュROMからそのまま実行したりする
コードもconstデータもROMに置いてそのまま実行出来る メモリ増設の時ぐらいしかスロット見ないし
え?別の話? デシタルネイティブ「RAMもROMを見たことがない」 >>373
> デシタルネイティブ「RAMもROMを見たことがない」
デバイスの話なのか
チップの話なのか
ダイの話なのか >>374
そんなこともわからんのかジジイは
「どんなものかは知らんがRAMとかROMとか呼ばれるモンを見たことがない」
ってことだ
それ以上の意味はない CDショップやDVDレンタルショップがあってもそこに並んでいるのがROMだと認識できない無知なだけでは >>376
いまどきの若者は CD も DVD も使わんのやで。 まあスマホのスペックにはROMとRAMの容量が書いてあるけど
殆どの利用者は理解してないな スマホの表記で ROM って言ってるの、そもそも ROM じゃないだろっていう。 class C {
private:
static int secret;
public:
friend int peep() {return secret;}
};
このpeepはどうやって呼び出すのが正解なんだぜ? >>384
コンパイルは通るんだがまるで飲み込まれたようだぜ
c.peep();
peep();
C::peep();
どれも反応しない へー、通るんだ。
とりあえず、peep()はメンバー関数じゃないから引数にCを渡すなりするのが普通の使い方だろう。 >>380
「そもそもROM」ってなに?
マスクROMしかダメとか? おおお
Cクラス渡すと通った
class C {
private:
static int secret;
public:
friend int peep(C data) {return secret;}
};
int PosCalc(BOOL flag) {
C data(0, 0)
int count = peep(data);
//いろいろ計算
}
ダミーでインスタンス渡すってことなんだな ROM 不揮発メモリ
RAM 揮発メモリ
リードオンリー何それ secretはstaticだったか。見落としてた。 >>387
Read Only つってるのに、意味が拡大して結局それどういう意味なんだよっていう 文脈で判断しないと。CでROMつったら不揮発性メモリのこと。CDROMのことではない。 それにしてもfirendって付けた関数の方にボディーを書くことが出来るんだな
キモ 揮発不揮発は関係ない
読み込みと同等の速度で普通に書き込みが出来るか
Cの場合、普通の代入やmemcpyで普通に書き込み出来るかどうか ■ このスレッドは過去ログ倉庫に格納されています