21/12/14 22:16:45.94 yrIaaVQv0.net
>>979
決断に水を差すことになるかもしれないけど、↓のベストアンサーでは自作ヘッダが先だよ。
URLリンク(stackoverflow.com)
994:デフォルトの名無しさん
21/12/14 22:26:46.15 Eg2Dauqu0.net
くだらねえ
単に依存関係ってだけのことだろ
一概にどっちが先であるべきだなんて押しつけは糞食らえだ
995:デフォルトの名無しさん
21/12/14 23:19:28.66 J7XSbp4E0.net
以前のサイトだと
標準ライブラリ
業務共通ライブラリ
個別ライブラリ
の順にインクルードしなさいと決められてた
996:デフォルトの名無しさん
21/12/15 00:55:34.24 Nn1Wh5vx0.net
まぁ、これも他のスタイルと同じで、どっちがいいというよりは単純なルールで統一されていることが重要なものと思ってる。
997:デフォルトの名無しさん
21/12/15 05:27:05.50 XqRMbcSJ0.net
押しつけはやる気と引き換えだ
そのコストに見合う理があるべき
998:はちみつ餃子
21/12/16 11:05:28.00 78Qrz9F+0.net
ヘッダのインクルードは全て .c の側でやる (ヘッダ内でインクルードしない) という流儀もある。
既にほとんど滅びた流儀だろうし、現代的ではないと断っておくがこの考え方を取るのであれば
インクルードの順序は重要になる。
// foo.h
struct foo{};
// bar.h
// ここで foo.h や stdint.h をインクルードしない
void bar(foo, uint32_t);
// bar.c
#include <stdint.h>
#include "foo.h"
#include "bar.h"
void bar(foo x, uint32_t y) { printf("bar\n"); }
// main.c
#include <stdio.h>
#include <stdint.h>
#include "foo.h"
#include "bar.h"
int main(void) { struct foo x; bar(x); }
メインの側で適切な順序にしないといけないから抽象不足だが、
インクルードガードしてても読み込んでプリプロセスの手順を通すという処理は発生してしまうので
それすらも最低限であるのが好ましいなどの思惑があるのだと思う。
(いまどきのコンパイラではインクルードガードのパターンを検出して
二度目にはファイルを読むことすらしないものもあるらしい。)
まあリソースをケチるのが正義だった昔の話やね。
999:デフォルトの名無しさん
21/12/18 21:34:42.48 U4IWqRR10.net
test
1000:デフォルトの名無しさん
21/12/23 19:14:59.61 Xd/JFvMa0.net
レジスタから「値を読みだす」というのは「値をコピーする」と同義ですか?
1001:デフォルトの名無しさん
21/12/24 05:09:46.99 ZnDQBfvC0.net
なんか違和感ある言い方だな
「読む」とはCPUへの入力、「書き込む」がCPUからの出力で
たとえばメモリリードはメモリからの出力、メモリライトはメモリへの入力を意味する
「コピー」はそれで合ってる
「ムーブ」になる場合は必ずそう断るから
1002:デフォルトの名無しさん
21/12/24 05:42:34.84 TL6ByUiE0.net
>>990
たとえば
int a = 1;
int b = a + 2;
この「a + 2」の「a」の部分はメモリリードしてるということですよね
このとき計算のためにCPUに値を入力(コピー)しているという理解で合ってますか?
1003:デフォルトの名無しさん
21/12/24 05:43:27.34 +etymfSa0.net
レジスタからの読み出しは読み出しという操作自体に副作用がある(レジスタに対する読み出しを検知してデバイスが何かを行う)場合があるので, 必ずしも同義とは言えない
1004:デフォルトの名無しさん
21/12/24 05:58:42.33 ZnDQBfvC0.net
>>991
合ってる
1005:デフォルトの名無しさん
21/12/24 06:05:01.87 TL6ByUiE0.net
>>992
>>993
ありがとうございました
1006:デフォルトの名無しさん
21/12/24 06:43:15.91 M4a7QlIa0.net
>>991
>CPUに値を入力
レジスタはCPUなのかメモリなのか
int a = 1;
int b = a + 2;
これがアセンブラだと
mov ax,1
add ax,2
mov ptr[b], ax
メモリに書き込んでるのは3行目しかないが
1007:デフォルトの名無しさん
21/12/25 01:01:40.65 s/Gdf1X50.net
>>995
アセンブラよくわからないんですが
mov ax, 1 // axレジスタに1をコピー
add ax, 2 // axレジスタの値に2を加算
mov ptr[b], ax // axレジスタの値をptr[b]にコピー
でしょうか
ptr[b]っていうのはなんですか?
1008:デフォルトの名無しさん
21/12/25 01:29:37.77 M0D5aTvU0.net
最適化で変数aがレジスタに充てられてるんだな
最適化を抑制すれば
mov ax,1
mov ptr[a], ax
mov ax, ptr[a]
add ax,2
mov ptr[b], ax
とかになるんじゃね
1009:デフォルトの名無しさん
21/12/25 11:51:05.24 9FGZD56t0.net
#include <stdio.h>
1010:デフォルトの名無しさん
21/12/25 11:51:41.94 9FGZD56t0.net
int main(void)
{
printf("good-bye 157\n");
1011:デフォルトの名無しさん
21/12/25 11:52:11.17 9FGZD56t0.net
}
/*このすれは終了しました*/
1012:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 180日 0時間 29分 20秒
1013:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています