X



【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
エスケープシーケンスや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/
0274デフォルトの名無しさん
垢版 |
2017/08/03(木) 20:14:02.94ID:Wy5AX0em
intが32bitな64bit環境下だとして
printfの可変長引数で32bit整数を64bitに自動拡張するときの
拡張のされ方が変わるんじゃね?
ただし%uによって32bit分しか見に行かないから無視してよいけど
コード不変とはならないんじゃね?
0277デフォルトの名無しさん
垢版 |
2017/08/03(木) 20:28:36.06ID:D1Re6UdQ
int が32bit なら 可変長引数部でスタックに詰むとき
暗黙で 64bit に自動拡張はやらんのじゃないの?
0281デフォルトの名無しさん
垢版 |
2017/08/03(木) 23:29:16.77ID:2WeFShGG
保証は無いね
x64の場合でもキャストしようがしまいが0拡張になるけど
差が出るとしたらどんな場合?
0285デフォルトの名無しさん
垢版 |
2017/08/04(金) 08:30:27.75ID:oD3njs5y
64bit で引き出したうえで 32bit しか採用しないのか
32bit で引き出すだけなのか

後者は2個目いこう狂うわけ
0296デフォルトの名無しさん
垢版 |
2017/08/04(金) 14:31:21.93ID:PHBV9/TP
呼び出し規約は実装依存ではないけどアーキテクチャ依存でもないよ
そして、引数の受け渡しにレジスタをどう使うかというのは呼び出し規約と関係なく実装依存
さらに、引数はスタックに積まれるし、それはレジスタどうのこうのとは関係のない話
0298デフォルトの名無しさん
垢版 |
2017/08/04(金) 14:56:40.96ID:oD3njs5y
引数を { 頭から 末尾から } { レジスタ スタック } につんで
つんだ引数の巻き戻しを { 呼び出し側 呼ばれた側 } で行う
0301デフォルトの名無しさん
垢版 |
2017/08/04(金) 18:24:58.70ID:gG3ajqK7
>>296
レジスタ少ないx86ではスタックだが、x86_64では第1引数から第7引数までキッチリどのレジスタに入れろって決まってる。
これをアーキ依存と言わずしてなんと言うのか。
0302デフォルトの名無しさん
垢版 |
2017/08/04(金) 19:06:39.89ID:gMHFD1Iy
その規約をやぶって、全部スタックに乗せる、という呼び出し規約を自分で実装していいですか?
0303デフォルトの名無しさん
垢版 |
2017/08/04(金) 19:13:12.05ID:07Vnvfe5
規約は他のプログラムと協調するためだけのもの。
他のプログラムと絡まないんなら好きにすればいい。
0304デフォルトの名無しさん
垢版 |
2017/08/04(金) 19:20:42.44ID:gG3ajqK7
>>302
別にAPI単位の規約だから好きにすれば良いけど、スタックだと32bitよりメモリ喰うし増えたレジスタ活かさずメモリとやり取りだから関数呼び出しが多いほど速度に差が出るよ。
0306デフォルトの名無しさん
垢版 |
2017/08/04(金) 19:37:44.52ID:9p5UOFbs
アセンブラで書くならともかく、
既存のコンパイラで自己流の呼び出し規約を使うって可能なのかな。
0307デフォルトの名無しさん
垢版 |
2017/08/04(金) 19:43:40.82ID:gG3ajqK7
レジスタとか出てる時点でアセンブラやけどね。
高級言語からは同じに見えてもアセンブラからAPI呼ぶ時に混乱の元だから規約になってるんだろう。
0308デフォルトの名無しさん
垢版 |
2017/08/04(金) 19:47:10.77ID:LmZvF4Bx
>>306
自己流の呼び出し規約を使うのは自己流のコンパイラだけだろ
それが既存かどうかは知らんけど
0310デフォルトの名無しさん
垢版 |
2017/08/04(金) 20:12:22.52ID:B2ZVqR3g
pro*cって何のために存在するの?
普通にc言語のコードにSQL埋め込めばよくね?
0311デフォルトの名無しさん
垢版 |
2017/08/04(金) 20:15:41.79ID:d/io8eQ7
>>301
第6引数までじゃね? 普通は rdi rsi rdx rcx r8 r9
rax も浮動小数の個数に使うが
windowsだけは rdx rcx r8 r9 だった気がする。
0313デフォルトの名無しさん
垢版 |
2017/08/04(金) 23:32:26.83ID:ajRTrwbv
>>310
普通はCにSQL埋め込むなんてできないだろ。
SQL文を送ってコンパイルする関数を呼んで実行する関数を呼んで結果を取得する関数を呼ぶので
かまわないならPro*Cなんて必要ない。

それにしてもなんで今頃Pro*Cなんだろうか。とっくに廃止されたかと思ってた。
0319デフォルトの名無しさん
垢版 |
2017/08/06(日) 15:44:19.07ID:4cVoKrwP
コボルかー
じゃjavaとかpythonとかC++やCで大量データを扱おうと思ったら何らかのアルゴリズムでデーターベース自作するしかないの?
それともそういう目的だとすべからくLinqとかつかってるの?
0321デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:24:32.53ID:9fB0IwUX
大量のデータを処理したいのならPLSQLとかのdb上で動作するやつじゃないの?
0322デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:26:46.20ID:DdwwpY1/
DB操作用のクラスが標準ライブラリにあるから、その言語はSQLをサポートしてると思ってるのだろう。
0323デフォルトの名無しさん
垢版 |
2017/08/08(火) 21:38:02.52ID:9+bCDZAx
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と等価ではない?
どういうことッスか?なんかよー分からんです。
0329デフォルトの名無しさん
垢版 |
2017/08/09(水) 18:30:53.88ID:hewgQard
using F = void () &;
struct A { void f() & {} };
F A::*const &mp = &A::f;

参照もこのぐらい複雑になるとコンパイラーですら正しく実装できないものが出てくる
0333デフォルトの名無しさん
垢版 |
2017/08/10(木) 00:19:15.22ID:iih/xgGV
おまえらは意図してドヤ顔でオナニーコード貼って理解できないなら出家しろとか言ってるからな。

初心者相手にマウンティングとか見てて恥ずかしい。
0336デフォルトの名無しさん
垢版 |
2017/08/10(木) 07:57:39.32ID:OxRJE4uH
普通は最適化されて何の問題もないだろうけど

組み込み用の一部の糞コンパイラとかで使う可能性があるなら書き換えておいた方が良いかもね
0337デフォルトの名無しさん
垢版 |
2017/08/10(木) 08:00:25.98ID:OxRJE4uH
極端に悪くなる可能性のあるコードにしない
汎用性のあるコードを書く時の基本

特定の環境だけならその環境でテストしてみればわかること
0344デフォルトの名無しさん
垢版 |
2017/08/10(木) 16:59:23.11ID:9PTjWwFP
#define A 100 ←存在が害悪の化石老人
auto &&A = 100; ←ODRを考えない短絡思考
constexpr int A = 100; // ←ふつうの人
constexpr auto &&A = 100; // ←ちょっとヘンな人
0347デフォルトの名無しさん
垢版 |
2017/08/10(木) 18:53:23.23ID:cpubt7xV
>>346
ODRとはOne Definition RuleのことでC++の重要なルールである。
Cの仮定義と異なりC++ではインライン関数やテンプレートを除き
「定義」が複数あってはならない。
この多重定義の禁止と一部の例外を定めたルールがODRと呼ばれる。
例えばauto && A = 100;が記述されたヘッダファイルを
二つの翻訳単位からincludeしたとすると
二つの翻訳単位でAが定義されることになりエラーとなる。
詳細は処理系のマニュアルを見よ。
0348デフォルトの名無しさん
垢版 |
2017/08/10(木) 19:40:58.66ID:1RrigXav
もしかしてヘッダファイルにconstexpr auto &&A = "lkjdslkjf";とか書くのって合法?
#define 名前 定数としてたやつは全部constexpr auto &&名前 = 定数で置き換えられる?
0349デフォルトの名無しさん
垢版 |
2017/08/10(木) 21:11:04.47ID:yu1iQyxx
>>348
内部リンケージなのでODRには違反しない
翻訳単位ごとに実体が異なるのでアドレスが異なると困る場合には使うべきでないが
これは旧来のstatic constやdefineでも変わらない
0350デフォルトの名無しさん
垢版 |
2017/08/11(金) 03:47:43.97ID:eOUFNbYQ
#define→enum→const→constexpr
定数書くのに変わり杉です
理想論いらないです#define溢れた現実世界見よ
0351デフォルトの名無しさん
垢版 |
2017/08/11(金) 08:37:53.72ID:NrUav3sg
>>350
老害の見苦しい言い訳乙
ディープラーニングとか言っても理解できないんでしょ?涙拭けよ
0352デフォルトの名無しさん
垢版 |
2017/08/11(金) 08:55:50.68ID:xt3khzo9
constexprにしたほうがいいものがconstになってるのは結構あるけど、defineなんてほぼ見ないけどな
0360デフォルトの名無しさん
垢版 |
2017/08/11(金) 14:43:55.42ID:Tw4iEl8C
Cに移植する可能性がゼロであるコードをC++上で新規でdefineで書いてたら老害だと思う
0361デフォルトの名無しさん
垢版 |
2017/08/11(金) 15:18:06.60ID:BFfVWgAm
組み込みCだとstatic const使えてもアセンブリレベルで
即値にならないので#defineは常識
環境依存スレで多様性否定する奴は去れ
0369デフォルトの名無しさん
垢版 |
2017/08/11(金) 22:38:20.04ID:+GdUPlS/
>>364
どちらもコンパイル時に決まるものも決まらないものも扱うUNKO仕様なので常人が理解できないのは致し方ない
一つ知っておくべきなのは「constexprの変数はコンパイル時に決まるもののみ」ということ
0370デフォルトの名無しさん
垢版 |
2017/08/12(土) 06:07:41.79ID:Bi4KH0eW
>>367
一般人はRAMも見たことないよ

組み込み用マイコンだと、フラッシュROMからそのまま実行したりする
コードもconstデータもROMに置いてそのまま実行出来る
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況