!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:rqj2HSDF02デフォルトの名無しさん (ワッチョイ a702-em59)
2023/04/21(金) 16:20:56.29ID:cgpIrgwq0 >>1
大儀である
大儀である
3デフォルトの名無しさん (ワッチョイ 87da-S3w6)
2023/04/21(金) 16:21:57.14ID:5coQdqNr0 久々に麻呂のクソースを見たいでおじゃるか?
4デフォルトの名無しさん (ワッチョイ 87da-S3w6)
2023/04/21(金) 22:04:31.33ID:euEROcVR0 久々に来たけど、C言語はもう人気が無いんかね・・・
5デフォルトの名無しさん (ワッチョイ 5fad-soEM)
2023/04/21(金) 22:53:09.84ID:kZ6jl2XB0 人気って
C言語で作れなんて非効率的なことする人はそういないのでは?
C言語じゃないとダメな環境を除いて
C言語で作れなんて非効率的なことする人はそういないのでは?
C言語じゃないとダメな環境を除いて
6はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6)
2023/04/21(金) 23:38:19.84ID:Ro9IllZr0 各分野に適したものがあるならそれを使うに越したことは無い。
C が本当に「適している」と言える分野ってそんなに広くないじゃろ……。
どういう言語が適しているのかよくわからんかちょうどよい言語なければ長い物にまかれることになるわけだけど、
様々な分野でそれぞれのよりよい言語が生まれて「長い物」の価値が薄れるならそれは喜ばしいことだと思う。
C が本当に「適している」と言える分野ってそんなに広くないじゃろ……。
どういう言語が適しているのかよくわからんかちょうどよい言語なければ長い物にまかれることになるわけだけど、
様々な分野でそれぞれのよりよい言語が生まれて「長い物」の価値が薄れるならそれは喜ばしいことだと思う。
7デフォルトの名無しさん (ワッチョイ 6dda-ASru)
2023/04/22(土) 00:24:12.00ID:PKFQM5A+0 プログラムをする人が、コンピュータの基本的な知識が無いまましてしまうから
簡単な記述で出来る言語が登場したからかね?
単純に同じ演算を繰り返して比較すると、C言語は処理速度が一番速いとのこと
データを処理するには適しているかと
簡単な記述で出来る言語が登場したからかね?
単純に同じ演算を繰り返して比較すると、C言語は処理速度が一番速いとのこと
データを処理するには適しているかと
8デフォルトの名無しさん (ワッチョイ 6663-RykB)
2023/04/22(土) 01:13:10.92ID:pp00Xtk80 FFTやらせたら、どの言語が一番速いだろうか
9デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/22(土) 01:14:00.87ID:BwPMbYSuM Cの知識はC++をする時に当然必要になる
CはTIOBE言語ランキングで2位で、C++は4位だ
逆に使えない奴はモグリだろw
CはTIOBE言語ランキングで2位で、C++は4位だ
逆に使えない奴はモグリだろw
10デフォルトの名無しさん (ワッチョイ 7502-PEO9)
2023/04/22(土) 03:04:47.05ID:WcjcWdD/0 Cを知り、アセンブラを知って、ハードアーキテクチャが分かる
11デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/22(土) 07:44:16.17ID:rMU69DRU0 ハードの入り口に立つというだけ
Cより遙かに深い世界の
Cより遙かに深い世界の
12デフォルトの名無しさん (ワッチョイ 6663-RykB)
2023/04/22(土) 12:23:54.03ID:pp00Xtk80 それにしても、ネットは広大だわ。
13デフォルトの名無しさん (ワッチョイ 1146-0EuI)
2023/04/22(土) 16:05:32.27ID:QfqbbaWF0 Cの奥地が広いと言うならネットはなお広いではないか。
14デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/22(土) 16:39:16.87ID:rMU69DRU0 デジタル3年
アナログ5年
高周波10年
なんて言うね
で、おまえらCはどのくらいでおぼえた?
仕事で使えるレベルになるまでに
アナログ5年
高周波10年
なんて言うね
で、おまえらCはどのくらいでおぼえた?
仕事で使えるレベルになるまでに
>>14
高周波は、あの分布定数の立体回路が謎に満ちていましたよね、あれ、どうやって設計するんだろう?
高周波は、あの分布定数の立体回路が謎に満ちていましたよね、あれ、どうやって設計するんだろう?
16デフォルトの名無しさん (ワッチョイ 5d2d-YWDm)
2023/04/22(土) 18:24:03.40ID:RQNj/O5w0 この世にはプログラミング言語はPHPとJavascriptしか無いと思ってるエンジニア()がたくさんいるから
Pythonの存在も知ってるけどあれはオシャレな感じがしないしオタクがやるものだと思ってる
Pythonの存在も知ってるけどあれはオシャレな感じがしないしオタクがやるものだと思ってる
17デフォルトの名無しさん (スッププ Sd0a-kSx0)
2023/04/22(土) 19:05:57.81ID:Ul/bNVNnd >>14
蟹飯の本は事前に読んでたけど、半年かかった
周りが旧帝工学系院卒ばっかだったから勉強したわ
おれ、旧帝数学だったからポインタとか分からんかった
でも、今ではわしの方が崇められる
日々「チャラい関数、マクロで被せろ」を軸に頑張っとる
蟹飯の本は事前に読んでたけど、半年かかった
周りが旧帝工学系院卒ばっかだったから勉強したわ
おれ、旧帝数学だったからポインタとか分からんかった
でも、今ではわしの方が崇められる
日々「チャラい関数、マクロで被せろ」を軸に頑張っとる
18デフォルトの名無しさん (アウウィフ FF21-1cZQ)
2023/04/23(日) 18:42:16.06ID:y593Lq73F PHPはホントごみ
19デフォルトの名無しさん (ワッチョイ aa97-+JPf)
2023/04/24(月) 12:59:52.39ID:6nEVjUPW0 親を殺されたのか
かわいそうに
かわいそうに
20デフォルトの名無しさん (スププ Sd0a-hOeP)
2023/04/24(月) 14:15:55.03ID:U9n/COjud21デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/24(月) 18:03:05.84ID:IXNCOIDlM int (func) (int n)
みたいに関数に()付けるのって何の意味(機能)ですか?
みたいに関数に()付けるのって何の意味(機能)ですか?
22デフォルトの名無しさん (スプッッ Sd6d-LN7w)
2023/04/24(月) 18:08:06.16ID:MExTF0xDd 関数ポインタ
23デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/24(月) 20:21:25.09ID:TGYcq0jn0 違う! 関数そのもの
#define func(x) (func)(x)
マクロではない「本物の」funcを呼び出すのに使う
#define func(x) (func)(x)
マクロではない「本物の」funcを呼び出すのに使う
24デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/24(月) 21:25:50.42ID:4M8+MweU0 int (func) (int n) となると宣言の文脈だからそれも違うだろう。
>>21 その記述だけでは a*b+c を (a*b)+c と書いたのと同じで、少なくともその括弧自体には何の効果もない。
何か意味があると思うなら書いた人に聞くしかない。
>>21 その記述だけでは a*b+c を (a*b)+c と書いたのと同じで、少なくともその括弧自体には何の効果もない。
何か意味があると思うなら書いた人に聞くしかない。
25デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/24(月) 21:43:56.47ID:IXNCOIDlM いやまあ愚痴なんだけど教科書や入門書ってなんでか知らんけど関数ポインタもったいつけて教えたがらないよね…
26デフォルトの名無しさん (ワッチョイ 7502-kSx0)
2023/04/24(月) 23:20:26.15ID:MovxHIrx0 素人さんには関数ポインタはむずいだろ
関数のポインタをベクトル化してジャンプテーブル代わりになるんもん
つまりスイッチケースが要らない、言う事
関数のポインタをベクトル化してジャンプテーブル代わりになるんもん
つまりスイッチケースが要らない、言う事
27デフォルトの名無しさん (ワッチョイ 6663-RykB)
2023/04/24(月) 23:23:14.11ID:CIhFKz1G0 ジャンプテーブル使うのと、switch case と、
どちらが高速でしょうね?
どちらが高速でしょうね?
28デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/24(月) 23:32:25.83ID:RQPVcVj5M >>23
それが上手く行くのは、マクロが再帰呼び出しされないような処理が入ってるからだろ
それが上手く行くのは、マクロが再帰呼び出しされないような処理が入ってるからだろ
29デフォルトの名無しさん (テテンテンテン MM3e-HodF)
2023/04/24(月) 23:45:11.28ID:RQPVcVj5M ジャンプテーブルを使うと、変数の引き渡しに手間が掛かる
構造体のポインタを渡すとか、引数を沢山渡すとかグローバル変数を使うとか
なので、switch文にして最適化でテーブルジャンプになるのを確認するのがベストかなと
構造体のポインタを渡すとか、引数を沢山渡すとかグローバル変数を使うとか
なので、switch文にして最適化でテーブルジャンプになるのを確認するのがベストかなと
30デフォルトの名無しさん (スプッッ Sdea-8Xzj)
2023/04/25(火) 08:47:58.80ID:2JpsSRmdd gcc拡張機能のラベルのジャンプテーブルが速かった思い出
あれは規格に取り込むべきだと思う
あれは規格に取り込むべきだと思う
31デフォルトの名無しさん (ワッチョイ 5e5f-RykB)
2023/04/25(火) 10:23:58.24ID:dvdIAVRA0 それってどんなのだっけか
関数を配列にぶっこんだの?
関数を配列にぶっこんだの?
32デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 10:35:38.43ID:VJ90Sqw80 FORTRANの算術GOTOみたいなもんかな
33デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 10:36:32.19ID:VJ90Sqw80 switch caseを最適化させるとジャンプテーブルになっていることはよくあるね
34デフォルトの名無しさん (ワッチョイ 11c9-+rDk)
2023/04/25(火) 11:21:54.95ID:RcvlMMml0 開発環境の都合で C言語しか選択できず
C++ の virtual に相当する機構をなんとか捏造しようと
構造体に関数のポインタをメンバに持つ
あと qsort のまねっこ
(具体的な比較は外に丸投げして そういう関数がある前提でコードを書く
C++ の virtual に相当する機構をなんとか捏造しようと
構造体に関数のポインタをメンバに持つ
あと qsort のまねっこ
(具体的な比較は外に丸投げして そういう関数がある前提でコードを書く
35デフォルトの名無しさん (スフッ Sd0a-8Xzj)
2023/04/25(火) 11:33:32.92ID:Y1VsObgtd36デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/25(火) 12:02:12.18ID:zIgvDwJV0 >>28 (func)(x) に対して関数型マクロ func(x) の展開は起こらないよ。
37デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 12:24:03.71ID:VJ90Sqw80 調べてみた
Computed gotoってやつね
int main(void)
{
void *table[] = { &&L1, &&L2 };
goto *table[1];
L1: ;
L2: ;
}
Computed gotoってやつね
int main(void)
{
void *table[] = { &&L1, &&L2 };
goto *table[1];
L1: ;
L2: ;
}
38デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 12:27:03.54ID:VJ90Sqw8039デフォルトの名無しさん (スップ Sdea-kSx0)
2023/04/25(火) 12:52:44.87ID:HIwqDhB5d お、そんなん出来るんか
40デフォルトの名無しさん (スプッッ Sdea-i/u1)
2023/04/25(火) 14:07:55.49ID:xfobd0gld 話の流れからして
#define func(arg) hoge(arg)
みたいな関数形式マクロがいた場合、
単に void func(int a){} と書くと void hoge(int a){}に置換されて死ぬ。
回避策で void (func)(int a){} としとけば展開されないよ
ってことじゃないの?
#define func(arg) hoge(arg)
みたいな関数形式マクロがいた場合、
単に void func(int a){} と書くと void hoge(int a){}に置換されて死ぬ。
回避策で void (func)(int a){} としとけば展開されないよ
ってことじゃないの?
41デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/25(火) 14:18:02.95ID:zIgvDwJV0 確かに、そういう効果はあるね。
それが必要になる状況は思い浮かばないけども。
それが必要になる状況は思い浮かばないけども。
42デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 18:35:24.79ID:uZ/SnCfyd 関数と同名のマクロがわざわざ定義されてるとしたらなんか事情がありそうだが
#undef func
したほうが早くね
#undef func
したほうが早くね
43デフォルトの名無しさん (ワッチョイ 7d01-+rDk)
2023/04/25(火) 18:49:03.51ID:xUlKX7o40 #undef の後に undef する前へリカバーできるようにする機構ってコンパイラの環境依存だよね
(リカバーのための仕込み)
#undef func
:
void func()
{
}
:
undefのリカバー (以下 func はマクロ側)
:
(リカバーのための仕込み)
#undef func
:
void func()
{
}
:
undefのリカバー (以下 func はマクロ側)
:
44デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 19:09:41.44ID:uZ/SnCfyd ひょっとして>>21って
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
みたいな書き方のこと?
この場合はカッコなし int *compar(const void *, const void *)
だとintへのポインタを返す関数の実体ということになり
引数宣言内に関数の実体を書くなと言われてしまうだろう
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
みたいな書き方のこと?
この場合はカッコなし int *compar(const void *, const void *)
だとintへのポインタを返す関数の実体ということになり
引数宣言内に関数の実体を書くなと言われてしまうだろう
45デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/25(火) 21:38:43.47ID:ZKj27A06M46デフォルトの名無しさん (オイコラミネオ MMb1-U1Ip)
2023/04/25(火) 21:43:41.07ID:ZKj27A06M47デフォルトの名無しさん (ワッチョイ 66cf-/HYv)
2023/04/25(火) 22:14:03.47ID:OJFKrU7J0 要は関数ポインタ知らなくてバカにされただけのおじさんか
const voidだもんな
const voidだもんな
48デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/25(火) 22:18:12.16ID:VJ90Sqw80 アホすぎて笑う価値もないな
49デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 22:25:14.13ID:T6e/oFBcd50デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/25(火) 22:37:41.81ID:T6e/oFBcd ああ、それで「関数」ではなく「関数へのポインタ」が定義できるのか
関数の型をtypedefしてからやったほうがわかりやすくない?
WindowsAPIでは大体そんな形になってるから真似してるけど
宣言
typedef int COMP_FUNC(const void *, const void *);
COMP_FUNC comp_A;
COMP_FUNC comp_B;
COMP_FUNC *comp_func = comp_A;
切り替える時
comp_func = comp_B;
呼び出す時
comp_func(...);
関数の型をtypedefしてからやったほうがわかりやすくない?
WindowsAPIでは大体そんな形になってるから真似してるけど
宣言
typedef int COMP_FUNC(const void *, const void *);
COMP_FUNC comp_A;
COMP_FUNC comp_B;
COMP_FUNC *comp_func = comp_A;
切り替える時
comp_func = comp_B;
呼び出す時
comp_func(...);
51デフォルトの名無しさん (ワッチョイ 66cf-/HYv)
2023/04/25(火) 22:50:45.68ID:OJFKrU7J0 typedefがめっちゃ気持ち悪い宣言だな
普通はアスタリスクつけてポインタとしてtypedefするもんだと思うよ
sizeof(COMP_FUNC)がいくつになるのか見当がつかない不気味なオブジェクトだ
普通はアスタリスクつけてポインタとしてtypedefするもんだと思うよ
sizeof(COMP_FUNC)がいくつになるのか見当がつかない不気味なオブジェクトだ
52はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-ASru)
2023/04/25(火) 23:29:28.69ID:ug7UW9j70 sizeof は関数型の式に対して適用してはならないと制約されているから
関数だったときの結果は未定義で、常識的に考えればコンパイラはエラー扱いにするべきだと思うんだけど
gcc や clang だと何故かエラーにならず 1 を返すんだよな。
(警告は出るけど。)
検出が難しいはずもない (実際に警告は出せてるわけだし) のになんでこうなってんだろ。
1 でなんか便利なことある?
関数だったときの結果は未定義で、常識的に考えればコンパイラはエラー扱いにするべきだと思うんだけど
gcc や clang だと何故かエラーにならず 1 を返すんだよな。
(警告は出るけど。)
検出が難しいはずもない (実際に警告は出せてるわけだし) のになんでこうなってんだろ。
1 でなんか便利なことある?
53デフォルトの名無しさん (ワッチョイ c55f-uFYM)
2023/04/26(水) 02:32:17.99ID:2SSTMM1B0 まあ、入門書は比較的難しいことを書かないほうが売れそうだけどな
でもそれを勿体つけるというのは違うかと
でもそれを勿体つけるというのは違うかと
54デフォルトの名無しさん (ワッチョイ eaad-WJN6)
2023/04/26(水) 03:51:37.33ID:5gh45PFo0 >>50
WINAPIの書き方はこうじゃない?
typedef int (WINAPI *COMP_FUNC)(const void *, const void *);
int WINAPI comp_A(const void *, const void *);
COMP_FUNC comp_func = comp_A;
WINAPIの書き方はこうじゃない?
typedef int (WINAPI *COMP_FUNC)(const void *, const void *);
int WINAPI comp_A(const void *, const void *);
COMP_FUNC comp_func = comp_A;
55デフォルトの名無しさん (ワッチョイ a5cf-aV8w)
2023/04/26(水) 07:41:17.76ID:wJGIaQxR0 >>51
C++だとポインタじゃない方は関数メンバの宣言にも使えて便利だったりする。
C++だとポインタじゃない方は関数メンバの宣言にも使えて便利だったりする。
56デフォルトの名無しさん (ワッチョイ 11c9-+rDk)
2023/04/26(水) 08:44:09.62ID:dG3YoJcz057デフォルトの名無しさん (ワッチョイ 5d2d-YWDm)
2023/04/26(水) 08:54:20.40ID:v/InlOgJ0 前者は関数名そのものをポインタとして使い、後者はポインタを明示的に指定することで関数ポインタとして扱う
58デフォルトの名無しさん (ワッチョイ 5963-YWDm)
2023/04/26(水) 09:12:09.71ID:UWqGaqQz059デフォルトの名無しさん (ワッチョイ c55f-ASru)
2023/04/26(水) 09:27:27.18ID:mF8gxL16060デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/26(水) 09:46:45.42ID:UWqGaqQz0 COMP_FUNC comp_A;
COMP_FUNC comp_B;
こう書かれても仮引数や返却値の型が見えないので
可読性を落としているな
COMP_FUNC comp_B;
こう書かれても仮引数や返却値の型が見えないので
可読性を落としているな
61デフォルトの名無しさん (アウアウウー Sa21-YWDm)
2023/04/26(水) 09:48:32.91ID:N7+hGpB4a >>48
ほんそれ
ほんそれ
62はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-ASru)
2023/04/26(水) 10:33:18.60ID:NF11/Xrv0 >>56
* をいくつ付けても通るのは有名なネタだな。
#include <stdio.h>
int main(void) {
(**********printf)("hello, world\n");
}
関数指示子 (結果が関数型であるような式) は sizeof や & の
オペランドであるときを除いて関数ポインタに (暗黙に) 型変換されるという規則があって、
普通に printf("hello, world\n"); とか書いてあるときでもこの printf は関数ポインタに変換されてる。
関数呼出しは関数に対してではなく関数ポインタに対して行われる。
関数ポインタに * を付けると関数指示子になるけどそれもやっぱり関数ポインタに変換されるので
* をいくつつけても結果は関数ポインタという変なことになる。
* をいくつ付けても通るのは有名なネタだな。
#include <stdio.h>
int main(void) {
(**********printf)("hello, world\n");
}
関数指示子 (結果が関数型であるような式) は sizeof や & の
オペランドであるときを除いて関数ポインタに (暗黙に) 型変換されるという規則があって、
普通に printf("hello, world\n"); とか書いてあるときでもこの printf は関数ポインタに変換されてる。
関数呼出しは関数に対してではなく関数ポインタに対して行われる。
関数ポインタに * を付けると関数指示子になるけどそれもやっぱり関数ポインタに変換されるので
* をいくつつけても結果は関数ポインタという変なことになる。
63デフォルトの名無しさん (アウアウウー Sa21-YWDm)
2023/04/26(水) 11:39:43.86ID:N7+hGpB4a そもそもポインタに代入するときも
int a(int b)
{
return b + 1;
}
int (*f)(int) = &a;
じゃなくて
int (*f)(int) = a;
で通るからな
int a(int b)
{
return b + 1;
}
int (*f)(int) = &a;
じゃなくて
int (*f)(int) = a;
で通るからな
64デフォルトの名無しさん (ワッチョイ 5963-/Rus)
2023/04/26(水) 13:38:42.38ID:UWqGaqQz0 f(0); //こうできるしな
65デフォルトの名無しさん (ワッチョイ 11c9-+rDk)
2023/04/26(水) 14:31:03.82ID:dG3YoJcz066はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-ASru)
2023/04/26(水) 17:00:12.69ID:NF11/Xrv0 余談だが >>62 はあくまでも C の場合の話で、
C++ では名前解決の話が合わさって複雑になってる。
関数呼出しのときに関数名を括弧で囲むかどうかで結果が変わってしまう場合がある。
https://wandbox.org/permlink/MO8NWeVmjoLTLly6
C のコードを C++ に持っていくことはそれなりにあることなので
変な書き方をしてると組み合わせの妙で引っかかることもあるかもね。
C++ では名前解決の話が合わさって複雑になってる。
関数呼出しのときに関数名を括弧で囲むかどうかで結果が変わってしまう場合がある。
https://wandbox.org/permlink/MO8NWeVmjoLTLly6
C のコードを C++ に持っていくことはそれなりにあることなので
変な書き方をしてると組み合わせの妙で引っかかることもあるかもね。
67デフォルトの名無しさん (スップ Sd0a-cnX/)
2023/04/26(水) 20:23:11.35ID:WMGk7nvid 正直どうでもいい
遠い昔Z80のニモニックでJP (HL)と書くけど本来はJP HLとなるはずじゃないかなと思ってたけどそれと同じw
遠い昔Z80のニモニックでJP (HL)と書くけど本来はJP HLとなるはずじゃないかなと思ってたけどそれと同じw
68デフォルトの名無しさん (ワッチョイ 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 初期化は自動変数と静的変数で変わるんでしょ?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 「稼ぐのよ!」高市総理が電話ガチャ切りで伝えたこと 鈴木憲和農林水産大臣が国政報告会に出席 自身が目指す農政の方針語る [煮卵★]
- 秋田県警本部機動隊の敷地にクマ [nita★]
- 【悲報】中国の輸入で生活してるジャップがその中国に戦争吹っ掛ける理由、誰にもわからない😰 [616817505]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- ジャップ、今更気付く。スーパー店員「レジに椅子導入したら楽になりました」 [242521385]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 【悲報】高市経済ブレーン「積極財政は円高要因ですよ」 [237216734]
