!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 160
https://mevius.5ch.net/test/read.cgi/tech/1672191630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
C言語なら俺に聞け 161
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f63-sFbk)
2023/04/21(金) 14:05:20.18ID:rqj2HSDF068デフォルトの名無しさん (ワッチョイ 2a4b-ywdm)
2023/04/26(水) 20:32:10.51ID:XZbLdYRG0 まぁ普通は関数名をカッコで括ったりしないし
69デフォルトの名無しさん (ワッチョイ ea79-lTfL)
2023/04/26(水) 21:13:49.50ID:zbbRZmOB0 Cで関数のポインタガーとかやってる暇あったらC#のデレゲートとかラムダとか覚えた方がいいとおもった午後
70デフォルトの名無しさん (ワッチョイ 0afb-i/u1)
2023/04/26(水) 21:41:13.75ID:tw2MKSIb0 「min」と「max」の関数形式マクロをわざわざ定義する.hがあるらしい
71デフォルトの名無しさん (ワッチョイ 5d2d-YWDm)
2023/04/27(木) 00:02:52.04ID:6BBE08oV0 stdbool.hでも覗いてみればいい
72デフォルトの名無しさん (ワッチョイ 7502-kSx0)
2023/04/27(木) 05:12:28.80ID:sEk/rgYZ073デフォルトの名無しさん (ワッチョイ a902-V++f)
2023/04/27(木) 08:37:39.22ID:OthllRbe0 コンバイラ?
74デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/27(木) 09:03:22.20ID:AVBMGEcwM コンバトラーV
75デフォルトの名無しさん (ワッチョイ 2a7c-fzJl)
2023/04/27(木) 13:43:25.58ID:kFL/uqTX0 JP (HL)って8080だとPCHLだっけ
アセンブラがとことん楽するようなニモニックだったな…
アセンブラがとことん楽するようなニモニックだったな…
76デフォルトの名無しさん (テテンテンテン MM8f-HoNx)
2023/05/01(月) 16:24:43.62ID:8iWiof/XM 関数の引数リストの中で新たな構造体を定義するってことってできないの?
void func(struct X{int a;} b){
... something ...
}
みたいに?
構文上は可能だと思うんだけどどうなんですか?
void func(struct X{int a;} b){
... something ...
}
みたいに?
構文上は可能だと思うんだけどどうなんですか?
77デフォルトの名無しさん (スフッ Sdbf-oZQI)
2023/05/01(月) 18:21:57.14ID:sEB4u3D3d 構造体が使われる場所より前で定義する必要がある
78デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:09:18.47ID:Cn3LrXy/M79デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:15:34.08ID:Cn3LrXy/M80デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:29:42.98ID:Cn3LrXy/M 未だに初っ端からコンソールにハローワールド表示させるとこから教えてるんだろうね勿体つけオジサンたちは
81デフォルトの名無しさん (オイコラミネオ MM4f-ylw9)
2023/05/01(月) 19:36:49.71ID:Cn3LrXy/M 勿体つけオジサンたちはChatGTPで「C言語で関数名に()付けるのって何ですか?」って聞いてみればいいよ
機械以下のゴミw
機械以下のゴミw
82デフォルトの名無しさん (ワッチョイ 3702-ITaW)
2023/05/01(月) 19:44:56.10ID:cY285a3R0 医者から処方された薬は指示通り飲まないとだめだぞ
83デフォルトの名無しさん (ワッチョイ ff63-fitb)
2023/05/01(月) 20:12:14.98ID:kp1qtDVi0 配列に対してポインタでアクセスするとか、単純な者だと絵に描けば大体理解出来るが
構造体内のポインタ変数やら、さらに配列かして行くと、記述もすんなりとできなくなるし
ましてや別人が書いたソースで、それらが一体何をアクセスしているのか理解するのは大変だ
構造体内のポインタ変数やら、さらに配列かして行くと、記述もすんなりとできなくなるし
ましてや別人が書いたソースで、それらが一体何をアクセスしているのか理解するのは大変だ
84デフォルトの名無しさん (スプッッ Sd3f-rFN3)
2023/05/01(月) 20:21:43.22ID:RHMPP4K9d >>76
返り値のほうならなぜかgccでいけた
まあ型推論がないC言語じゃあ役に立たないんだけど
// main.c
struct {int a;} func();
int main(){
printf("%d\n", func());
}
// other.c
int func(){ return 42;}
返り値のほうならなぜかgccでいけた
まあ型推論がないC言語じゃあ役に立たないんだけど
// main.c
struct {int a;} func();
int main(){
printf("%d\n", func());
}
// other.c
int func(){ return 42;}
85デフォルトの名無しさん (ワッチョイ 572d-wHlW)
2023/05/02(火) 02:30:44.97ID:FbQbKVUa0 void func(struct {int a;} b){
b.a = 10;
printf("%d\n", b.a);
}
tccでもこれ通るな
b.a = 10;
printf("%d\n", b.a);
}
tccでもこれ通るな
86はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f3e-By2c)
2023/05/02(火) 11:04:32.32ID:HpVmkNB+0 >>76
私が知る限りにおいて文法上は正しい。
しかし X の有効範囲 (スコープ) は関数内だけなので
関数の外で struct X に対応する値を生成できず、
まともな方法では適切な実引数を与えることができない。
内容が同じ構造体は「適合」するし引数が適合する関数も適合するはずなので
強引にキャストして呼出しても言語仕様に反しないと思うのだけど
適合の概念をちゃんと理解できてる自信はない……
void func(struct X{int a;} b){}
int main(void) {
struct X{int a;} b = {1};
// このキャストはたぶんアリだと思うけど自信はない
void (*f)(struct X) = (void(*)(struct X))func;
f(b);
}
私が知る限りにおいて文法上は正しい。
しかし X の有効範囲 (スコープ) は関数内だけなので
関数の外で struct X に対応する値を生成できず、
まともな方法では適切な実引数を与えることができない。
内容が同じ構造体は「適合」するし引数が適合する関数も適合するはずなので
強引にキャストして呼出しても言語仕様に反しないと思うのだけど
適合の概念をちゃんと理解できてる自信はない……
void func(struct X{int a;} b){}
int main(void) {
struct X{int a;} b = {1};
// このキャストはたぶんアリだと思うけど自信はない
void (*f)(struct X) = (void(*)(struct X))func;
f(b);
}
87デフォルトの名無しさん (スップ Sdbf-s2+g)
2023/05/02(火) 20:11:42.15ID:ovfmjnkKd >>76
素直に最初に構造体をtypedef しとけば楽だと思うんですが
文法上で言えばstruct Xとだけ書いといて後でstruct Xの中身を定義しても正しい
もちろんそれでは関数スタックのサイズを計算できないのでエラーになるだろうが
素直に最初に構造体をtypedef しとけば楽だと思うんですが
文法上で言えばstruct Xとだけ書いといて後でstruct Xの中身を定義しても正しい
もちろんそれでは関数スタックのサイズを計算できないのでエラーになるだろうが
88デフォルトの名無しさん (アウアウウー Sa1b-wHlW)
2023/05/03(水) 14:42:04.19ID:wz1HqF7Da Cは
struct Hoge {int a;} b;
と
struct {int a;} b;
を区別しない
struct Hoge {int a;} b;
と
struct {int a;} b;
を区別しない
89デフォルトの名無しさん (ワッチョイ 975f-By2c)
2023/05/03(水) 15:45:19.73ID:1ndhLr9O090デフォルトの名無しさん (ワッチョイ 975f-By2c)
2023/05/03(水) 18:10:57.61ID:1ndhLr9O0 >>86
「内容が同じ構造体は「適合」する」について確認すると策定中の C23 から
内容に加えてタグ名まで同じ場合に限り適合する(compatible になる)ように変更されるようで、
現時点では正しくない模様。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3037.pdf
「内容が同じ構造体は「適合」する」について確認すると策定中の C23 から
内容に加えてタグ名まで同じ場合に限り適合する(compatible になる)ように変更されるようで、
現時点では正しくない模様。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3037.pdf
91はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-By2c)
2023/05/04(木) 00:37:13.28ID:zfmlH8qj092デフォルトの名無しさん (ワッチョイ 975f-By2c)
2023/05/04(木) 01:26:39.82ID:KJPnL+/P0 >>91
あ、ごめん書き方が悪かった。
これまではタグ及び内容が同じでも適合しなかったところ、 C23 から適合するようになるという話。
有効になるプログラムが増えるので、どちらかというと緩くなる変更。
あ、ごめん書き方が悪かった。
これまではタグ及び内容が同じでも適合しなかったところ、 C23 から適合するようになるという話。
有効になるプログラムが増えるので、どちらかというと緩くなる変更。
93デフォルトの名無しさん (ワッチョイ 572d-wHlW)
2023/05/04(木) 04:12:02.40ID:W+5O3yqN0 急に凄くレベル低い話して申し訳ないんだけど
#include <stdio.h>
int main()
{
int a[101] = {};
a[0] = 2;
a[1] = 3;
for (int i = 4; i < 1000; i++) {
int r = 1, j;
for (j = 0; j <= 100 && a[j] != 0; j++) {
if ((i % a[j]) == 0) {
r = 0;
break;
}
}
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
if (r)
a[j + 1] = i;
}
for (int i = 0; i < 100; i++)
printf("%d ", a[i]);
}
なんでこれ上手く動かないんだろう
#include <stdio.h>
int main()
{
int a[101] = {};
a[0] = 2;
a[1] = 3;
for (int i = 4; i < 1000; i++) {
int r = 1, j;
for (j = 0; j <= 100 && a[j] != 0; j++) {
if ((i % a[j]) == 0) {
r = 0;
break;
}
}
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
if (r)
a[j + 1] = i;
}
for (int i = 0; i < 100; i++)
printf("%d ", a[i]);
}
なんでこれ上手く動かないんだろう
94デフォルトの名無しさん (ワッチョイ 9f79-zzYQ)
2023/05/04(木) 05:17:57.46ID:P5ZkmciJ0 このスレいつもレベル低いから大丈夫でしょ
上手く動かない?そもそもそのコードはどう動いて欲しいのか読み取れないんだよな
日頃から入出力を意識して書けって言われてない?まるで実践できてないからダメか
上手く動かない?そもそもそのコードはどう動いて欲しいのか読み取れないんだよな
日頃から入出力を意識して書けって言われてない?まるで実践できてないからダメか
95デフォルトの名無しさん (ワッチョイ ffe4-HoNx)
2023/05/04(木) 07:37:53.19ID:6SJC1K3b0 >>93
二つ目の for ループから抜ける条件の一つが「a[j]がゼロ」なのに、そのループから抜けた直後で i % a[j] とかやってて、jが2のときにa[2]が0でループから抜けるから、ゼロ除算で落ちる
それとこっちは直接の原因ではないけど、int a[101]と宣言すると a[0]~a[100]までしかアクセスできないのにa[102]までアクセスする可能性があるようなコードになってるのもダメだな
二つ目の for ループから抜ける条件の一つが「a[j]がゼロ」なのに、そのループから抜けた直後で i % a[j] とかやってて、jが2のときにa[2]が0でループから抜けるから、ゼロ除算で落ちる
それとこっちは直接の原因ではないけど、int a[101]と宣言すると a[0]~a[100]までしかアクセスできないのにa[102]までアクセスする可能性があるようなコードになってるのもダメだな
96デフォルトの名無しさん (スップ Sdbf-s2+g)
2023/05/04(木) 08:36:39.17ID:Hj8mrajJd とりあえず初期化するとき
int a[101] = {0,1,2};
と書いたほうが楽じゃん
ちなみに初期値がない部分は0になる
後はめんどくさいから明日読むわ
int a[101] = {0,1,2};
と書いたほうが楽じゃん
ちなみに初期値がない部分は0になる
後はめんどくさいから明日読むわ
97デフォルトの名無しさん (スップ Sdbf-s2+g)
2023/05/04(木) 08:46:33.13ID:Hj8mrajJd 間違えた
int a[101] = {1,2};
か
ちなみに int a[101] = {};
ではまったく初期化されないからこのプログラムでは[0][1]以外のところには0ではなく不定値が入ってるのでうまく動かないのはそれなんじゃね
int a[101] = {0};
と書いておけば省略した部分もすべての要素が0で初期化されるよ
int a[101] = {1,2};
か
ちなみに int a[101] = {};
ではまったく初期化されないからこのプログラムでは[0][1]以外のところには0ではなく不定値が入ってるのでうまく動かないのはそれなんじゃね
int a[101] = {0};
と書いておけば省略した部分もすべての要素が0で初期化されるよ
98デフォルトの名無しさん (ワッチョイ 9fad-/0wk)
2023/05/04(木) 09:36:07.29ID:GmhF7zKn0 >>93
i と j ってわかりづらいから j は k に置き換えて言うけど
i=4 のとき k=0 で 4%2 となり割り切れるため、何もせずに次
i=5 のとき k=2 で a[k]==0 なので k のループを抜ける(このときk==2でa[2])
抜けた後のif (r) a[k + 1] = i; で a[3] = 5 になっていて a[2] は 0 のまま
で0除算でドボン
まずはif (r) a[k + 1] = i; ではなく if (r) a[k] = i; だね
i と j ってわかりづらいから j は k に置き換えて言うけど
i=4 のとき k=0 で 4%2 となり割り切れるため、何もせずに次
i=5 のとき k=2 で a[k]==0 なので k のループを抜ける(このときk==2でa[2])
抜けた後のif (r) a[k + 1] = i; で a[3] = 5 になっていて a[2] は 0 のまま
で0除算でドボン
まずはif (r) a[k + 1] = i; ではなく if (r) a[k] = i; だね
99デフォルトの名無しさん (ワッチョイ 9fad-/0wk)
2023/05/04(木) 09:58:25.07ID:GmhF7zKn0 >>93
それとこれって素数を見つけるプログラムと思うけど、 1000までの間に163個あるっぽい
a の要素数はそれ以上必要
(0除算している部分のprintfがデバッグ用のように、デバッグで100までに制限しているのかもしれないけど)
一応言っておくと0除算でドボンは本質とはちょっと違うからね
if (r) a[j] = i;
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
とa[j] への代入とデバッグ用のprintfの位置を入れ替えれば0除算は起きないから
それとこれって素数を見つけるプログラムと思うけど、 1000までの間に163個あるっぽい
a の要素数はそれ以上必要
(0除算している部分のprintfがデバッグ用のように、デバッグで100までに制限しているのかもしれないけど)
一応言っておくと0除算でドボンは本質とはちょっと違うからね
if (r) a[j] = i;
printf("%d %d %d %d %d \n", i, j, a[j], i % a[j], r);
とa[j] への代入とデバッグ用のprintfの位置を入れ替えれば0除算は起きないから
100デフォルトの名無しさん (ワッチョイ 572d-wHlW)
2023/05/04(木) 10:19:34.63ID:W+5O3yqN0101デフォルトの名無しさん (ワッチョイ 9710-fitb)
2023/05/04(木) 11:22:57.44ID:qhvAhFwp0 初期化は自動変数と静的変数で変わるんでしょ?
102デフォルトの名無しさん (ワッチョイ b7da-o+T5)
2023/05/04(木) 12:22:57.41ID:gcRtXg3v0 右辺のない変数宣言だけのパターンでは変わってくるけど
静的だろうが自動だろうが 初期化の = { } は 省略部以降すべて0 → 全部0フィル でしょ
静的だろうが自動だろうが 初期化の = { } は 省略部以降すべて0 → 全部0フィル でしょ
103デフォルトの名無しさん (ワッチョイ ff63-fitb)
2023/05/04(木) 12:26:03.41ID:ZxdTo52k0 初期化って必ず初期値を設定するものとばかり思ってた
104デフォルトの名無しさん (スッップ Sdbf-rFN3)
2023/05/04(木) 12:29:51.46ID:ocVXr2wXd 配列を「={};」で初期化したときの挙動は全要素が0埋めされるとC言語規格で決まってる
105はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-By2c)
2023/05/04(木) 12:50:52.53ID:zfmlH8qj0106デフォルトの名無しさん (ワッチョイ 77bb-KSub)
2023/05/05(金) 01:44:39.83ID:Dgp4PAAq0 むかしニコ動で動画上げたらそのこと教えてくれた人いたな
今でも覚えてるわ
今でも覚えてるわ
107デフォルトの名無しさん (ワッチョイ cbc9-uTC/)
2023/05/08(月) 08:20:55.10ID:o4wr0iPb0 なので 全省略せずに = { 0 }; と書くことは多いね
108デフォルトの名無しさん (ワッチョイ 9354-ouLR)
2023/05/10(水) 14:54:20.05ID:Sp9BCNLV0 規制解除テスト
109デフォルトの名無しさん (ワッチョイ ff2d-GUq3)
2023/05/12(金) 07:37:29.65ID:uK8Qnmg70 https://ideone.com/Kj806d
うちの環境(tcc)だと
ビット操作の実行時間: 0.634000秒
一時変数の利用の実行時間: 0.444000秒
ポインタの利用の実行時間: 0.471000秒
になるんですね、最適化が弱いにしても完全に想像と逆の結果になって驚いてる
うちの環境(tcc)だと
ビット操作の実行時間: 0.634000秒
一時変数の利用の実行時間: 0.444000秒
ポインタの利用の実行時間: 0.471000秒
になるんですね、最適化が弱いにしても完全に想像と逆の結果になって驚いてる
110デフォルトの名無しさん (スプッッ Sd32-8wHc)
2023/05/12(金) 08:42:01.03ID:7oN7jOgdd ポインタのそれ交換できてるか?
111はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 123e-tcUg)
2023/05/12(金) 08:58:12.44ID:AJ54S3Uh0 CPU の性質も考慮する必要がある。
ビット演算はメモリのロード/ストアとは並列化できない分が効いて遅くなるんじゃないかと思う。
間接参照があればその分だけ遅くなるのも自然だし、想像通りだろ。
ビット演算はメモリのロード/ストアとは並列化できない分が効いて遅くなるんじゃないかと思う。
間接参照があればその分だけ遅くなるのも自然だし、想像通りだろ。
112デフォルトの名無しさん (スップ Sd32-c8cy)
2023/05/12(金) 08:58:57.96ID:dEJrL9Tpd gcc(-O2)で見てみたら核の部分はswap_bitsが6命令、swap_tempが4命令になってるね
swap_bits:
.LFB0:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L1
movl (%rdi), %eax
xorl (%rsi), %eax
movl %eax, (%rdi)
xorl (%rsi), %eax
movl %eax, (%rsi)
xorl %eax, (%rdi)
.L1:
ret
.cfi_endproc
swap_temp:
.LFB1:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L4
movl (%rdi), %eax
movl (%rsi), %edx
movl %edx, (%rdi)
movl %eax, (%rsi)
.L4:
ret
.cfi_endproc
swap_bits:
.LFB0:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L1
movl (%rdi), %eax
xorl (%rsi), %eax
movl %eax, (%rdi)
xorl (%rsi), %eax
movl %eax, (%rsi)
xorl %eax, (%rdi)
.L1:
ret
.cfi_endproc
swap_temp:
.LFB1:
.cfi_startproc
endbr64
cmpq %rsi, %rdi
je .L4
movl (%rdi), %eax
movl (%rsi), %edx
movl %edx, (%rdi)
movl %eax, (%rsi)
.L4:
ret
.cfi_endproc
113デフォルトの名無しさん (スプープ Sd52-V+RR)
2023/05/12(金) 22:24:54.99ID:josTNWjFd ビット演算はそりゃ遅いだろ
読んで演算して書く
よりも
読んで書く
のほうが早いに決まってるじゃん
読んで演算して書く
よりも
読んで書く
のほうが早いに決まってるじゃん
114はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 123e-tcUg)
2023/05/12(金) 23:57:42.36ID:AJ54S3Uh0 ビット演算バージョンの特徴は一時的な格納場所が不要なところにある。
レジスタに空きが無いときにメモリに退避するよりはビット演算のほうが
マシということはありうると思う。
素朴なアーキテクチャだとメモリの読み書きが (レジスタと比べて) だいぶん遅かったり
レジスタの数が少なかったりするし。
色々な条件が絡み合うので「決まってる」とまでは言い切れない。
レジスタに空きが無いときにメモリに退避するよりはビット演算のほうが
マシということはありうると思う。
素朴なアーキテクチャだとメモリの読み書きが (レジスタと比べて) だいぶん遅かったり
レジスタの数が少なかったりするし。
色々な条件が絡み合うので「決まってる」とまでは言い切れない。
115デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/13(土) 07:20:30.86ID:q/ntHDOzd この件の場合は
関数の形でメモリから読んで書くことは確定だからそれ以上の最適化は不可能なので決まってるのだ
関数の形でメモリから読んで書くことは確定だからそれ以上の最適化は不可能なので決まってるのだ
116デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 12:31:34.66ID:scApfF3jd 大昔の技術
今使うやつはアホ
ビット演算の方が有意に速い事なんか無いよ
今使うやつはアホ
ビット演算の方が有意に速い事なんか無いよ
117デフォルトの名無しさん (ワッチョイ 335f-eWQc)
2023/05/13(土) 13:31:03.33ID:77gpFXkp0 論理演算はマシン語1命令だろw
118デフォルトの名無しさん (テテンテンテン MM7f-PaoB)
2023/05/13(土) 14:34:03.15ID:ToDbeQGOM std::swap使えばマシン語のxchgを使ってくれそうな気がするけどね
xchg使うのが最速だろう
Cにはstd::swapに相当するもんが無いな
xchg使うのが最速だろう
Cにはstd::swapに相当するもんが無いな
119デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 15:37:18.91ID:trdeSgBWd120デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/13(土) 18:27:17.14ID:0CcYb4xxd121デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/13(土) 18:39:48.47ID:Er9DBy9d0122デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 18:43:02.66ID:trdeSgBWd ×自分の頭で考える必要はない
○アホが工夫すると遅くなる
○アホが工夫すると遅くなる
123デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/13(土) 18:46:13.79ID:trdeSgBWd 今では通用しない技術を偉そうに語る
老害の典型
==>はちみつ
老害の典型
==>はちみつ
124デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/13(土) 18:50:59.33ID:Er9DBy9d0 身に覚えのあるやつがファビョってるね
ん~いい返事だ
ん~いい返事だ
125デフォルトの名無しさん (テテンテンテン MM7f-PaoB)
2023/05/13(土) 22:00:35.83ID:8DjxrcvEM >>119
遅いってのは、レジスタを余計に1つ消費する方法よりも更にデメリットが有るぐらい遅いのか?
遅いってのは、レジスタを余計に1つ消費する方法よりも更にデメリットが有るぐらい遅いのか?
126デフォルトの名無しさん (スプープ Sd1f-h+xE)
2023/05/13(土) 22:53:11.07ID:w2ITJ0dJd 最適化されてもmovより遅くならない程度で決して速くなることはない
おそらくもっと複雑な処理の途中でレジスタが全て使用中の場合にレジスタをスタック等に退避することなく値を交換するテクニックとして使われたら速くなるのかもしれんが
こんなシンプルなコードでは起きないだろう
おそらくもっと複雑な処理の途中でレジスタが全て使用中の場合にレジスタをスタック等に退避することなく値を交換するテクニックとして使われたら速くなるのかもしれんが
こんなシンプルなコードでは起きないだろう
127デフォルトの名無しさん (ワッチョイ ff79-ScEU)
2023/05/13(土) 23:18:57.76ID:6X/C93dk0 xorスワップは昔クヌースのメモリを使わないGCのマーク&スイープ手法だかで多用されてた気がする
当時はこれが神が作りしコードかあみたいに感動しかなかった
当時はこれが神が作りしコードかあみたいに感動しかなかった
128デフォルトの名無しさん (テテンテンテン MM7f-PaoB)
2023/05/13(土) 23:46:50.93ID:TLDrNKkXM >>126
普通のコードだとレジスタは常に足りてないだろ
ベンチマーク的なコードは本当の速度を表してないな
Benchmarks gameとかそれぐらい複雑なコードを複数動かしてやっと分かるもんだろうね
普通のコードだとレジスタは常に足りてないだろ
ベンチマーク的なコードは本当の速度を表してないな
Benchmarks gameとかそれぐらい複雑なコードを複数動かしてやっと分かるもんだろうね
129はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-Phjm)
2023/05/13(土) 23:49:44.86ID:vqN1nVlv0 >>125
現代的な CPU だと直接的に使われるレジスタのほかに内部にはもっと多くのレジスタがあって
見かけ上はレジスタを余計に消費していても実際には一時的に割り当てられるレジスタなことがある。
いわるゆる「機械語」も CPU 内部ではさらに分解されてよりよい命令列に置き換えられるので
同じ機械語でも文脈によって違うことをしてる。
複雑すぎて詳細な挙動を事前に予測するのは無理。
xchg が存在するからには有用な場面もあるんだろうとは思うが、
結局のところは実際にやってみないとよくわからん。
現代的な CPU だと直接的に使われるレジスタのほかに内部にはもっと多くのレジスタがあって
見かけ上はレジスタを余計に消費していても実際には一時的に割り当てられるレジスタなことがある。
いわるゆる「機械語」も CPU 内部ではさらに分解されてよりよい命令列に置き換えられるので
同じ機械語でも文脈によって違うことをしてる。
複雑すぎて詳細な挙動を事前に予測するのは無理。
xchg が存在するからには有用な場面もあるんだろうとは思うが、
結局のところは実際にやってみないとよくわからん。
130デフォルトの名無しさん (ワッチョイ cfd6-aKqn)
2023/05/14(日) 01:15:20.67ID:XjDIggiO0 xchgはスピンロックを作るときに使うよね
131デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/14(日) 07:12:36.39ID:YUNKAbGY0 変数のswapって、マシン語に限らずどこででも高い頻度で使うぞ
132デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/14(日) 11:51:05.47ID:eMKrHX/5d133デフォルトの名無しさん (オイコラミネオ MMc7-UNvf)
2023/05/14(日) 19:49:42.92ID:9VZQjQ6WM アトミックのことかな
はちみつ氏のレスは慎重で丁寧だし、噛みつく必要はないだろう
はちみつ氏のレスは慎重で丁寧だし、噛みつく必要はないだろう
134デフォルトの名無しさん (ワッチョイ 335f-eWQc)
2023/05/14(日) 19:54:24.09ID:B0168DkC0 そもそもアセンブラででも書かない限りある値がレジスタに維持される期間は人間の考えとは異なるんだよなぁ
135デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/14(日) 22:22:28.93ID:YUNKAbGY0 人間の考えw
人情っすか?
人情っすか?
136デフォルトの名無しさん (ワッチョイ cf63-ZkZz)
2023/05/14(日) 23:14:42.36ID:fNcGY7kH0 レジスター猫
137デフォルトの名無しさん (ワッチョイ 0310-ZkZz)
2023/05/15(月) 07:45:53.34ID:wYJ4tfRu0 シュレーディンガーのレジスター猫猫
138デフォルトの名無しさん (ワッチョイ cf46-1d5q)
2023/05/15(月) 10:53:41.51ID:Ro1LlfRG0 レンジ猫?
139デフォルトの名無しさん (ワッチョイ 3302-Cej3)
2023/05/15(月) 11:26:46.74ID:qSKQiR6e0 猫は電子レンジで乾かせません
140デフォルトの名無しさん (ワッチョイ ffad-ZkZz)
2023/05/15(月) 11:51:40.11ID:Bppn4Lb30 じゃあ何なら乾かせるんですか?
141デフォルトの名無しさん (ラクッペペ MM7f-fulC)
2023/05/15(月) 12:00:56.43ID:Uo8X26KHM タオルとドライヤー
142デフォルトの名無しさん (ワッチョイ ff97-7xmi)
2023/05/15(月) 12:22:52.88ID:L2eqquJo0 愛情を込めて暖める
143デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/15(月) 20:16:31.37ID:8Cq/OAued つまんないボケはどうつっこんでもつまんない
144デフォルトの名無しさん (スプッッ Sd07-zj+H)
2023/05/16(火) 08:51:47.45ID:gG4dlKgfd 技術ないやつが妬みで荒らしてるだけだからな
145デフォルトの名無しさん (アウアウウー Sa67-+/XS)
2023/05/16(火) 15:56:44.97ID:mGp2Y9l5a DJNZがatomicだと思っていた時期が私にもありました
146デフォルトの名無しさん (ワッチョイ c301-Np+b)
2023/05/16(火) 20:31:19.40ID:afLAkRaY0 日本はC言語さえ難しいエンジニアもいるんだよな
147デフォルトの名無しさん (スッププ Sd1f-9cn8)
2023/05/16(火) 20:55:13.02ID:bTPsQg7Pd148デフォルトの名無しさん (スプッッ Sd1f-zj+H)
2023/05/17(水) 07:09:46.32ID:s9zxu+xkd 異分野からきた地頭のいい人がCも使えるようになると
おまえら仕事取られるぞ
おまえら仕事取られるぞ
149デフォルトの名無しさん (ワッチョイ 0310-ZkZz)
2023/05/17(水) 07:46:38.82ID:BUhbFeo00 外国人労働者が来たら、AI化されたら、昔から色んな業種で何度も言われてるわな。
150デフォルトの名無しさん (ワッチョイ ff97-7xmi)
2023/05/17(水) 13:27:27.48ID:hbqXME+r0 いろんな分野で確かに仕事を奪われている
151デフォルトの名無しさん (スプッッ Sd07-zj+H)
2023/05/17(水) 16:15:47.93ID:ZA2j/mjnd > AI化されたら
ここム板だよな
ここム板だよな
152デフォルトの名無しさん (スプープ Sd1f-Ynfg)
2023/05/17(水) 19:23:47.84ID:HVYpBx2Dd153デフォルトの名無しさん (スププ Sdea-i/qU)
2023/05/24(水) 06:34:08.09ID:TwXy7dIZd 前回のこのスレの投稿で関数名に()をつける場合があるという意味がわかった。#undefを使わなく
てもいいように関数に()をつける場合がある。
例
ans = (sqr)(n);
という具合に。
てもいいように関数に()をつける場合がある。
例
ans = (sqr)(n);
という具合に。
154デフォルトの名無しさん (ワッチョイ 6746-3pER)
2023/05/24(水) 07:05:53.93ID:ea8bFP4r0 void laugh(笑);
155デフォルトの名無しさん (ワンミングク MMbf-4z7j)
2023/05/31(水) 15:57:04.61ID:fnFbD7jZM 誰か笑いをとめてやってくれ
156デフォルトの名無しさん (ワッチョイ 0b6e-jMfM)
2023/05/31(水) 16:11:38.59ID:ck+UIxN/0 abort();
157デフォルトの名無しさん (ワッチョイ 1f36-S+HU)
2023/05/31(水) 18:02:31.09ID:vB7s5b6d0 GotoBlueScreen();
158デフォルトの名無しさん (ワッチョイ 0f63-S+HU)
2023/05/31(水) 18:16:26.97ID:i7J0Z4vH0 __halt();
159デフォルトの名無しさん (ワッチョイ 0b6e-jMfM)
2023/05/31(水) 21:00:07.40ID:ck+UIxN/0 void a() __attribute__((naked));
void a()
{
asm(" halt");
}
int main(void)
{
a();
}
void a()
{
asm(" halt");
}
int main(void)
{
a();
}
160デフォルトの名無しさん (ワッチョイ 7b02-lntT)
2023/05/31(水) 21:19:20.18ID:soKXUOD/0 [STOP]+[A]
161デフォルトの名無しさん (ワッチョイ 6ebb-tVFH)
2023/06/03(土) 19:40:08.42ID:hD2oGIQP0 文字列処理用のリングバッファ作ったんですが、同じ処理をint型でも行いたいです。
当たり前ですが、同じプログラムをint型に変えればできると思います。
ですが、処理自体は同じなので、共通化できないものでしょうか?
C++ではテンプレート関数を使えばできるようですが、純粋なC言語では難しいですか?
当たり前ですが、同じプログラムをint型に変えればできると思います。
ですが、処理自体は同じなので、共通化できないものでしょうか?
C++ではテンプレート関数を使えばできるようですが、純粋なC言語では難しいですか?
162蟻人間 ◆T6xkBnTXz7B0 (スフッ Sda2-lF3g)
2023/06/03(土) 19:48:40.44ID:Pce1Bw+fd >>161
#defineと#includeを使えばできるよ。
#defineと#includeを使えばできるよ。
163デフォルトの名無しさん (ワッチョイ 916e-aXLw)
2023/06/03(土) 20:14:57.23ID:SlTHxzvh0 俺的には#includeよりtypedefかな
164はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c23e-N/Lw)
2023/06/03(土) 20:15:08.00ID:uQ0tYGRP0 もしくは void* と型の大きさにする形で型を消去してしまう (たとえば qsort のように) という選択肢もある。
間違った使い方をしても (型が消えているので) コンパイル時にエラーとして検出しづらくなる可能性があるけど。
まあどちらにしても C でやるのは煩雑。
使う型が二種類だけであることがわかっている状況だと仮定してよいなら
共通化しようとするよりもコピペしたほうがかえって楽というのもよくあること。
間違った使い方をしても (型が消えているので) コンパイル時にエラーとして検出しづらくなる可能性があるけど。
まあどちらにしても C でやるのは煩雑。
使う型が二種類だけであることがわかっている状況だと仮定してよいなら
共通化しようとするよりもコピペしたほうがかえって楽というのもよくあること。
165>>161 (ワッチョイ 6ebb-tVFH)
2023/06/03(土) 20:37:32.54ID:hD2oGIQP0 勉強目的なので、試してみます。
#defineでやるやり方は何となくわかるのですが、#includeよりtypedefとはどういうことですか?
void*もよくわからないので、こっちはまだ早そうです。
#defineでやるやり方は何となくわかるのですが、#includeよりtypedefとはどういうことですか?
void*もよくわからないので、こっちはまだ早そうです。
166デフォルトの名無しさん (ワッチョイ 916e-aXLw)
2023/06/03(土) 20:59:14.37ID:SlTHxzvh0 >>165
//fig1
#define ITERATOR int*
ITERATOR enq, deq;
//fig2
typedef int* ITERATOR;
ITERATOR enq, deq;
fig1ではdeqがポインタではなくなってしまうが
fig2ならこうした問題が起こらない
//fig1
#define ITERATOR int*
ITERATOR enq, deq;
//fig2
typedef int* ITERATOR;
ITERATOR enq, deq;
fig1ではdeqがポインタではなくなってしまうが
fig2ならこうした問題が起こらない
167163 (ワッチョイ 916e-aXLw)
2023/06/04(日) 12:47:37.50ID:u2u7Kc0T0 あ、言い間違えてんの今気がついたw
- #include
+ #define
すまんこ
- #include
+ #define
すまんこ
168デフォルトの名無しさん (オイコラミネオ MMe9-N/Lw)
2023/06/04(日) 21:00:21.62ID:/SPLhkOjM リストなどのコンテナ実装でデータの実態へはvoid*でポインタ指定すれば何でも格納できる
基本的にこれで汎用化できる
基本的にこれで汎用化できる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 台湾声明 「台湾は独立した主権国家、中国は台湾を統治したことがなく、中国は口出しする権利ない」 中国が高市首相に抗議で ★7 [お断り★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で ★2 [ぐれ★]
- 台湾政党が高市首相「存立危機事態」発言に感謝の書簡「我々の心を強く奮い立たせるものでした」 [834922174]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 【悲報】中国を煽り運転に例えたネトウヨさん、完全に論破されてしまう [268718286]
- 【正論】有識者「高市早苗に合理的配慮をしなかった野党が悪い」 [175344491]
- 日経平均、49000円割れ 国賊高市を許すな ★2 [402859164]
- 高市「金正恩総書記と会談したい」 国交ある国ですらまともに外交出来ないのに北朝鮮相手に何が出来るのこいつ [878970802]
