【初心者歓迎】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/ intが32bitな64bit環境下だとして
printfの可変長引数で32bit整数を64bitに自動拡張するときの
拡張のされ方が変わるんじゃね?
ただし%uによって32bit分しか見に行かないから無視してよいけど
コード不変とはならないんじゃね? int が32bit なら 可変長引数部でスタックに詰むとき
暗黙で 64bit に自動拡張はやらんのじゃないの? 保証は無いね
x64の場合でもキャストしようがしまいが0拡張になるけど
差が出るとしたらどんな場合? 常に0拡張は信じがたい
負数の時おかしくなるだろ・・・ intが32bitの処理系の話ね
32bitのintを64bitに符号拡張するのはダメでしょ >>282
>負数の時おかしくなるだろ・・・
ならねーよ
printfは32bitしか取り出さねーんだから 64bit で引き出したうえで 32bit しか採用しないのか
32bit で引き出すだけなのか
後者は2個目いこう狂うわけ 64bitに自動拡張してスタックって、x64はpush eaxしたら8バイトpushされんの? int32にしてもスタックやキャッシュは倍の速度で消費されるのかよ。 キャッシュは確認してないけど
スタックはポインタ幅で消費されるね 実装依存だとは思う
VisualStudioではそうだっつーだけ 普通、引数の受け渡しはスタックじゃなくてレジスタ使うけど 呼び出し規約は実装依存ではないけどアーキテクチャ依存でもないよ
そして、引数の受け渡しにレジスタをどう使うかというのは呼び出し規約と関係なく実装依存
さらに、引数はスタックに積まれるし、それはレジスタどうのこうのとは関係のない話 引数を { 頭から 末尾から } { レジスタ スタック } につんで
つんだ引数の巻き戻しを { 呼び出し側 呼ばれた側 } で行う >>296
呼び出し規約がアーキテクチャーに依存しないなんてことはあり得ない >>296はどうしようもない低能
その低能にマジレスみっともない >>296
レジスタ少ないx86ではスタックだが、x86_64では第1引数から第7引数までキッチリどのレジスタに入れろって決まってる。
これをアーキ依存と言わずしてなんと言うのか。 その規約をやぶって、全部スタックに乗せる、という呼び出し規約を自分で実装していいですか? 規約は他のプログラムと協調するためだけのもの。
他のプログラムと絡まないんなら好きにすればいい。 >>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を見たことがない」 ■ このスレッドは過去ログ倉庫に格納されています