[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/22 11:29 / Filesize : 258 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 158



1 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 12:11:46.61 ID:xxeaCAplM.net]
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C17
www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 157
https://mevius.5ch.net/test/read.cgi/tech/1624846971/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

710 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 22:14:04.47 ID:PLcvpN2h0.net]
>>697
> コンパイラが未定義動作とわかったらエラーか最低でもワーニングを出す
そんな義務はない
> コンパイラにはわからないからバグになるんだよ
同一翻訳単位ならわかるだろ
勘違いしてるのは君、と言うか君の知識が浅すぎるだけ

>>699
存在するかどうかは関係なく規格上はそう言う処理系でも規格準拠という話

711 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 22:42:16.41 ID:cwJzo4Jp0.net]
つまり実在しないコンパイラってことだな

712 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 22:44:07.87 ID:cwJzo4Jp0.net]
オレ以外、全員狂ってるって言ってるのと同じ

713 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 22:44:55.56 ID:cwJzo4Jp0.net]
こいつと同じ職場でなくて良かった

714 名前:デフォルトの名無しさん mailto:sage [2022/06/13(月) 23:54:32.34 ID:uF/nHRZy0.net]
法解釈論「人殺しは違法であり罰される」
実運用論「証拠を完璧に隠滅できれば罰されない」

意固地になっちゃってるから何言っても無駄

715 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 03:02:34.64 ID:bOBoFDUrM.net]
意固地になるとアスペチックになるのか
アスペチックだから意固地になりやすいのか

716 名前:デフォルトの名無しさん (ワッチョイ ff01-MmlY) mailto:sage [2022/06/14(火) 06:01:33 ID:WigeF4Tr0.net]
意固地もなにも未定義動作なんて規格の話なんだから実運用論とか言われてもねw

717 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 06:16:24.48 ID:XpDhKBGs0.net]
>>679
第一引数が不定とは、第一引数を何らかの方法で取り出した場合の話だが
おまえさん、その方法はどんな方法を想定しているんだ?

718 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 07:36:21.84 ID:/Eif446V0.net]
自分で言った言葉に?みつく芸なんだろうか



719 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 10:22:14.90 ID:2fucKJss0.net]
>>707
>654が言ってるのはどうせこんなのだろうと思ってた。
https://wandbox.org/permlink/aiZH8Ytc91RyQ7HL
#include <stdio.h>
void func();
int main() { func(); }
void func(int x) { printf("%d\n", x); }

720 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 10:32:47.66 ID:rBU/2bdp0.net]
実体記述時と、宣言&呼び出し時とで、引数の型や個数の不一致
コンパイルが通るかもしれんけど、どう動くかわからないし
俺の環境ではこう動くからと、それを信じて採用するには怖すぎる

721 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 10:33:48.55 ID:XpDhKBGs0.net]
>>709
654は俺でまあそんなとこだが
俺は今679に聞いている

おそらく「654と同じ」とかなんとか言って
自分の手の内は隠したまま人の批判をするんだろうけどな

722 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 10:44:32.74 ID:2fucKJss0.net]
>>711 え? 679 (ワッチョイ 835f-GGE9) だから答えたのに何でよくわからんイチャモンつけられてんの?
いやまぁ、予想通りで結論に異論無いならいいんだけどさ。

723 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 10:50:39.67 ID:rBU/2bdp0.net]
省略時のデフォルト引数と(マングリング等による)別実装
C以前の言語でもありそうだし前者は検討してそうなもんだけど見送ったなりの理由があるんだろうか

724 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 10:52:59.20 ID:2fucKJss0.net]
想定が合ってたということで改めて結論も明記しとくと、
>709 のプログラムが未定義動作を起こすのは不定な x の値を使用するからではなく、
func(int x) に対して引数の数が不正な関数呼び出し func() を行うからであって、
x の値を使用しない場合(例えば関数内を空にした場合など)ても未定義動作になる、という話ね。

725 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 10:53:17.30 ID:XpDhKBGs0.net]
>>712
ほらな、やっぱり自分の手の内は晒さない

726 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 11:13:15.99 ID:rBU/2bdp0.net]
661の立場だと
 void func(int x) { }
 ・・・・・
 func();
は、記述のほうで x をリファレンスしてないからセーフで未定義には該当しないと読めるが
そいう主張なのかな

727 名前:デフォルトの名無しさん [2022/06/14(火) 11:51:03.61 ID:2oEiwFQbr.net]
引っ込みつかなくなると大変だね

728 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 12:19:58.97 ID:zr4Ezotf0.net]
単に使われない変数があるってだけだと思うが



729 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 12:58:48.08 ID:WigeF4Tr0.net]
>>718
>>717ww

730 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 13:36:14.16 ID:rBU/2bdp0.net]
実装の話
関数側でスタックに詰まれた引数をクリーンアップする呼び出し規約(pascalcall や stdcall) だと
明後日に飛んでいくのか

731 名前:デフォルトの名無しさん [2022/06/14(火) 19:11:20.40 ID:DieH08Hx0.net]
引き数の値で関数内の処理を分けるか普通に関数分ければいいやん

732 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 21:11:51.49 ID:VPcVb+UNM.net]
普通の人ならそうするが、
普通で無い方法が無いかを
いろいろ議論している
暇つぶしとも言う

733 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 21:17:41.30 ID:XpDhKBGs0.net]
特定されない限りあらゆるケースを想定するからな

734 名前:デフォルトの名無しさん mailto:sage [2022/06/14(火) 23:50:32.80 ID:dnqAP5Hg0.net]
>>718
DLLの呼び出しみたいに呼び出し先の実装をコンパイラが知らない場合
例えば引数をスタックに積む呼び出し規約だと
↓正常な動作
1)戻り先のアドレスをスタックに積む
2)引数をスタックに積む
3)DLL側のコード実行時にpopしてスタックから引数ゲット
4)いろいろ処理してpopして戻り先アドレスをゲットしてりたーん
これが↓異常な動作
1)戻り先のアドレスをスタックに積む
2)なんもない
3)DLL側のコード実行時にpopしてスタックから引数ゲット
4)いろいろ処理してpopして戻り先アドレスをゲットしてりたーん
5)わし、迷子
ってなるんちゃうん?
引数がレジスタ渡しなら、ただ変な数値受け取るだけで済むけど、今ここでの話じゃ限定してないようだし

735 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 00:28:34.16 ID:kIvvyTdz0.net]
呼び出しって引数をスタックに積んでから、呼び出すんじゃなかったかな

736 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 00:38:49.11 ID:3+VQJWvy0.net]
>>725
そうだよ
だから func(int);な関数をfunc(void); で呼び出したらスタックにずれが生じる可能性がある

737 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 00:43:20.78 ID:kIvvyTdz0.net]
引数をスタックに積んでから、戻りアドレスを積んでCallするなら、
func関数はスタック先頭位置にあるアドレスに戻るだけではないかな
積まれている引数はその下だからズレないと思う

738 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 00:57:26.32 ID:3+VQJWvy0.net]
>>727
>引数をスタックに積んでから、戻りアドレスを積んでCallするなら、
逆だぞ
戻りアドレスをスタックに積んでから引数をスタックに積む、その状態でfuncをコールする
そうしないと、次のpopでは戻りアドレスを受け取ることになり、引数を受け取れない
コールされ



739 名前:たfuncはpopし引数を受け取って処理(この間にスタックへのpush/popがあったりして)、最後にpopして戻りアドレスを受け取って呼び出し元に帰る []
[ここ壊れてます]

740 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 01:08:25.20 ID:kIvvyTdz0.net]
戻りアドレスをスタックに積むのは、機械語のCALL命令が行うんでしょう?

741 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 01:16:07.05 ID:kIvvyTdz0.net]
VCでアセンブラソース出力させてみました
int main()
{
 call(1);
 call();
 return 0;
}
int call()
{
 return 0;
}

742 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 01:17:50.09 ID:kIvvyTdz0.net]
_main PROC
; Line 2
 push ebp
 mov ebp, esp
; Line 3
 push 1
 call _call
 add esp, 4
; Line 4
 call _call
; Line 5
 xor eax, eax
; Line 6
 pop ebp
 ret 0
_main ENDP

743 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 01:18:18.33 ID:kIvvyTdz0.net]
_call PROC
; Line 8
 push ebp
 mov ebp, esp
; Line 9
 xor eax, eax
; Line 10
 pop ebp
 ret 0
_call ENDP

744 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 01:22:13.35 ID:3+VQJWvy0.net]
そうでした
うんこは消えます

745 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 05:01:22.73 ID:oeHjaPLHa.net]
フレームポインタってのもあって
まあなんでもいいんです

746 名前:デフォルトの名無しさん [2022/06/15(水) 15:38:51.27 ID:IEWflW3Ga.net]
>>728
馬鹿発見

747 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 18:22:38.94 ID:mSaBC5As0.net]
>729
全てのCPUにCALL相当の命令があるとは限らないってことを頭の片隅に。

748 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 19:14:29.02 ID:kIvvyTdz0.net]
CALL命令のないCPUにCってどういう風に実装するのかな
キッと神様のような人だろうと思う



749 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 19:34:49.70 ID:vqdnmmaIa.net]
最近call見ないよね
命令はあるけど

750 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 19:53:29.20 ID:XKwaNEU7 ]
[ここ壊れてます]

751 名前:0.net mailto: >>736
C言語で書いたコードが実行できるようなCPUでCALL相当の命令がない奴なんてあるのか?
まさかと思うけどBSR(Branch SubRoutin)とかBAS(Branch and Save)はCALLと綴りが違うんだーっていう主張じゃないよね
[]
[ここ壊れてます]

752 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 19:55:51.69 ID:XKwaNEU70.net]
>>737
汎用機みたいにスタックが無いマシンだとソフトでスタック作るとかする

753 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 20:05:59.02 ID:kIvvyTdz0.net]
呼出も戻りも、ジャンプ命令で実装するんかい?

「食らえ、GOTO攻撃!」

754 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 20:06:30.10 ID:gppE9X5h0.net]
>>737
厳密じゃないけど、
push pc
jmp xxxx
 :
pop pc
みたいな。push pcする時にjmpのアドレスの次を

755 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 20:07:41.69 ID:gppE9X5h0.net]
途中で書き込んてしまった。

>>737
厳密じゃないけど、
push pc
jmp xxxx
 :
pop pc
みたいな。push pcする時にjmpの次のアドレスをpushする必要があるけど。

756 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 20:29:16.05 ID:mSaBC5As0.net]
>739
2000年あたりのスパコンのデバッグやってたけどスタックポインタ自体無かったよ。
汎用レジスタの一つをスタックポインタの様に使ってた。
スパコンのPEはCPUじゃ無いっていうならそれまでだけど。

OSがCで書かれてたよ。

757 名前:はちみつ餃子 mailto:sage [2022/06/15(水) 20:38:36.75 ID:VY0KZJ3n0.net]
専用のレジスタを用意するかわりにアドレシングモードを充実させてるタイプの CPU もあるとは聞いたことは有る。
複数のスタックを用途別に使ったりする運用も出来るので便利っぽいよ。

758 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 20:42:40.26 ID:Z7kfo4VR0.net]
リンクレジスタを使うアーキテクチャは
呼び出しも戻りもジャンブだよ



759 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 21:27:21.82 ID:XKwaNEU70.net]
>>744
だから>>740に書いたように汎用機みたいにハードウェアスタックが無いプロセッサーは普通にあるよ
でもBASみたいにサブルーチンを呼び出す命令はある(戻りアドレスをレジスタに格納してジャンプする)
スパコンの命令セットは見たことないけど似たような命令はあると思う

760 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 21:32:09.09 ID:mSaBC5As0.net]
JMPで呼び出した関数に飛んで、
JMPで呼び出し元に戻って行ってたよ。
RET、それ相当の命令が無かった(使われてなかった?)。

761 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 21:47:48.01 ID:vqdnmmaIa.net]
ぴゅう太のCPUとか全然レジスタなかった

762 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 21:51:15.67 ID:XKwaNEU70.net]
>>748
どこのスパコン?

763 名前:デフォルトの名無しさん [2022/06/15(水) 21:56:54.74 ID:Ltc382Vw0.net]
Z8スーパーコンピュータ

764 名前:デフォルトの名無しさん mailto:sage [2022/06/15(水) 21:58:58.10 ID:XKwaNEU70.net]
>>749
あれはレジスタはメモリー上に置くって言う設計思想だから

765 名前:デフォルトの名無しさん (ワッチョイ 7f36-GGE9) mailto:sage [2022/06/15(水) 22:55:33 ID:mSaBC5As0.net]
>750
富士通。
実機は見たこと無い。
なんかアメリカに設置されてて、日本の端末(FMVにFreeBSDかなんか入れてた)からtelnetで入って作業してた。
入社1年目だったんでテスト作業員+フリーズした場所の特定と原因予想してた。

766 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 07:08:44.59 ID:ilsRfae90.net]
STM 14,12,12(13)
LR 12,15
GETMAIN RU,LV=72
ST 13,4(,1)
ST 1,8(,13)
LR 13,1

767 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 07:48:03.24 ID:acnLqVz40.net]
>>753
2000年辺りならベクトルタイプのVPP シリーズの方かな
スカラパラレルはUltraSPARCだし

768 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 14:04:28.10 ID:6d6damS40.net]
① struct _Hoge;
② typedef struct _Hoge Hoge;
③ struct _Hoge { int a; };
④ typedef struct _Hoge { int a; } Hoge;

↑の①~④はどれが「定義」でどれが「宣言」かよくわからんです
typedef の def は define(定義)の def ですが
変数作って値を定義していないので全部宣言ですかね?



769 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 14:15:11.58 ID:ilsRfae90.net]
原則、重複が許されるのが宣言、許されないのが定義
ただし仮定義のような例外も一部ある

770 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 14:18:30.74 ID:6d6damS40.net]
そうすると①は宣言ですね

771 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 14:37:35.99 ID:ilsRfae90.net]
うむ

772 名前:デフォルトの名無しさん (アウアウウー Sa67-iSSN) [2022/06/16(木) 19:53:21 ID:hEUIHdUOa.net]
コンパイラが単語を覚えるのが宣言
メモリに実態が産まれるのが定義

773 名前:デフォルトの名無しさん (ブーイモ MM7f-a+sK) mailto:sage [2022/06/16(木) 20:19:36 ID:2MvWGhryM.net]
③書いたところでメモリに実体生まれんだろ

774 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 22:26:58.67 ID:6d6damS40.net]
③を2回書くとエラーになりますね
この辺は沼でしょうか?
厳密に分けても何かに役立つというものでもないし・・・

775 名前:デフォルトの名無しさん mailto:sage [2022/06/16(木) 23:14:06.95 ID:y5qePP6X0.net]
そういう風に決めたなら仕方がないが
意味的には、定義と宣言って逆な印象を受けます
数学でいうと、
点や直線の定義では実際の描画はまだですが
点や直線の宣言っていうと、その場に描画すると言うイメージ

776 名前:はちみつ餃子 mailto:sage [2022/06/16(木) 23:16:16.53 ID:yR1zGyRS0.net]
宣言と定義の意味については C99 だと 6.7 に記述がある

> 宣言は、幾つかの識別子の解釈及び属性を指定する。
> 識別子の定義 (definition) とは、宣言のうち次のものをいう。
> ・ オブジェクトに対しては、そのオブジェクトの記憶域を確保する宣言
> ・ 関数に対しては、関数本体を含む宣言
> ・ 列挙定数又は型定義名に対しては、その識別子の (唯一の) 宣言

逆に言えば定義は常に宣言でもある。

777 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 05:27:18.60 ID:zopwF6/i0.net]
実体が作られるといっても
プログラムイメージにスペースが確保されるとは限らない
静的記憶域期間を持つものはプログラムイメージに作られるが
自動記憶域期間を持つものは実行中に割付と解放が行われるし
構造体のメンバ宣言並びはコンパイラのメモリに作られる

これらのいずれも「定義」となる

778 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 07:51:59.32 ID:bL392TY50.net]
>>765
> 構造体のメンバ宣言並びはコンパイラのメモリに作られる
それは
> コンパイラが単語を覚えるのが宣言
の方じゃね?



779 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 08:44:28.03 ID:rAke7YJm0.net]
なんとなくのイメージ
・宣言
「xxxxって名前の変数(関数)がどっかにあるらしいよ。詳しいことは知らん。」

・定義
「xxxxの詳細はココに書かれたxxxxxである!これは決定事項である!!」

780 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 13:54:11.29 ID:zopwF6/i0.net]
>>766
struct _Hoge;
struct _Hoge; // OK
これは _Hoge という識別子がタグ名という定型データとして作られ、
その後、定型データの中の属性フラグが検査されて一致が確認される

struct _Hoge;
union _Hoge; // NG
これは定型データの中の属性フラグが検査され不一致が検出される

struct _Hoge;
struct _Hoge { int a; }; // OK
これは定型データの中のポインタがまずNULLで作られ、
次に、そのポインタでメンバ宣言列という不定型データを指す

struct _Hoge { int a; };
struct _Hoge { int a; }; // NG
これは既にNULLでなくなったポインタの貼りかえで拒否される

宣言の重複は矛盾の検出のみを行い
定義の重複は不定型データの再作成で拒否される
{ } は無結合

781 名前:デフォルトの名無しさん [2022/06/17(金) 16:09:04.52 ID:G79h5Zera.net]
>>763
誤訳

782 名前:デフォルトの名無しさん [2022/06/17(金) 16:13:44.68 ID:G79h5Zera.net]
struct _Hoge { int a; };
struct _Hoge { int a; }; // NG

この場合でもコンパイル単位が別ファイルだと(ほぼ)問題無い訳で
一致していなければ一致していないなりの結果が産まれる

783 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 16:33:58.20 ID:zopwF6/i0.net]
>>770
(ほぼ)は不要
問題ないというか完全に同じ内容になっていない場合は未定義の動作

784 名前:デフォルトの名無しさん mailto:sage [2022/06/17(金) 19:28:59.11 ID:bL392TY50.net]
>>768
なにを言いたいのかさっぱりわからんw

785 名前:デフォルトの名無しさん [2022/06/18(土) 20:10:05.11 ID:cOcEcivya.net]
ヘッダ include したことないとか
ヘッダに実装描くとか
分割コンパイルしたことないとか
そういうアホのにおいがプンプン丸

786 名前:デフォルトの名無しさん [2022/06/18(土) 23:11:41.82 ID:eg6b2Ems0.net]
どこにそんな話出てた…?

787 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 15:11:40.00 ID:BalXxnr90.net]
定義と宣言の区別に関して
同一翻訳単位の中で 重複が許されるのが宣言 の実例の話やろ

788 名前:デフォルトの名無しさん mailto:sage [2022/06/20(月) 20:05:57.84 ID:3bt1t/j50.net]
聞きたいのは内容じゃなくてなぜそんな話をいきなり始めたのか?なんだけどw



789 名前:デフォルトの名無しさん [2022/06/20(月) 20:11:30.62 ID:8GsqMDfwr.net]
ヘッダに実装書いたっていうレスもヘッダをincludeしたことないっていうレスも見当たらないけど…

790 名前:デフォルトの名無しさん [2022/06/20(月) 20:27:07.42 ID:aPzFu0cfd.net]
別ソースから同じヘッダをincludeしていてもコンパイル時には必ず別ファイルとなるわけで(ほぼ)じゃ困る

791 名前:デフォルトの名無しさん (ワッチョイ ffad-DcGD) [2022/06/25(土) 17:14:53 ID:g21tYZQo0.net]
if ( a == 0 )
{ port &= 0b11011111 ;
}
else
{ port |= 0b00100000 ;
}

これ条件文使わずに書けるよね?

792 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:41:40.76 ID:ZgY7VkDz0.net]
>>779
三項演算子は条件文に含みますか?

793 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:45:19.17 ID:zMWMLrlCM.net]
書けるかどうかより、分かりやすいかの方が大事

794 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:45:51.43 ID:9jpr7vFN0.net]
port = port & ~((a == 0) * ~0b11011111) | (a != 0) * 0b00100000
頭悪いんでこれ以上無理。確実にレビューで落ちる

795 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 17:56:58.31 ID:9jpr7vFN0.net]
何だこれでいいのか
port = port & 0b11011111 | (a != 0) << 5

796 名前:デフォルトの名無しさん [2022/06/25(土) 18:15:30.63 ID:g21tYZQo0.net]
おまいらは何で素直にかけないんだ?(´・ω・`)?

797 名前:デフォルトの名無しさん [2022/06/25(土) 18:26:40.73 ID:XIyeaAEpr.net]
>>779
条件分を使わない理由はないよね?

798 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 18:26:54.17 ID:9jpr7vFN0.net]
まさか質問者に駄目だしされるとは思わなんだ



799 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 18:28:36.26 ID:gQjoPRQF0.net]
条件によって8ビット目以上も変える訳ではないのならば…かな
&= 0b11011111 | !!a << 5や&= ~0b00100000 | !!a << 5とかも論理否定は楽な方で
後者は若干レジスタ雑に出来るが…しかし最適化するとif文も分岐排除されてほぼ変わらん

800 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 19:15:33.07 ID:ca1tbhpBH.net]
条件文使わずに書いても何もメリットない

801 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 19:35:30.93 ID:IvS/BJ7o0.net]
やるならアセンブラレベルで・・・

802 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 22:45:43.97 ID:UWoTCBGr0.net]
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86

0b 使えないw

803 名前:デフォルトの名無しさん mailto:sage [2022/06/25(土) 23:52:02.49 ID:PITDVbGU0.net]
そりゃそうだろ
C言語としてはGCCの拡張だし
C++14でコンパイルしたらいけるんじゃね?

804 名前:デフォルトの名無しさん (ワッチョイ 8f10-tCSL) mailto:sage [2022/06/26(日) 09:58:04 ID:EKr6eQfX0.net]
>0b 使えない
0xに変換か、どうせ定数なんだからそれっぽいマクロで代用しとけばヨロシ。

805 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 10:58:18.13 ID:hEbl3kj1a.net]
orをandで記述する方法は

806 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 11:05:33.04 ID:j/Qk9Cw40.net]
負論理

807 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 11:39:10.83 ID:ImrLxjwid.net]
A|B == ~( ~A & ~B )

だけどまったく意味はないな

808 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 11:50:57.28 ID:9tvF1jx30.net]
ソースを難解にする



809 名前:フに多少貢献 []
[ここ壊れてます]

810 名前:デフォルトの名無しさん mailto:sage [2022/06/26(日) 14:00:18.84 ID:r2JBCRM90.net]
怒(プイプイ)モルカーだな






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef