C言語なら俺に聞け 157

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワッチョイ 0345-kMi9)
垢版 |
2021/06/28(月) 11:22:51.50ID:so+vl3vs0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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言語なら俺に聞け 156
https://mevius.5ch.net/test/read.cgi/tech/1601271690/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
802デフォルトの名無しさん (ワッチョイ 13ad-BvZE)
垢版 |
2021/10/30(土) 17:29:52.20ID:0q4JizrL0
私意言語
803デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/30(土) 18:01:56.38ID:zJlZfWf60
>>801
普通英語で検索するよね?
c languageとかgolangとか
804デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/30(土) 18:03:58.48ID:zJlZfWf60
luaって調べたら月の画像が出てきてめちゃくちゃ怖いぞ
2021/10/30(土) 19:36:45.48ID:d9y/i02Wr
月が怖いってサテライトキャノンでも撃たれたのか?
806デフォルトの名無しさん (アウアウウー Sa9d-48dE)
垢版 |
2021/10/30(土) 19:51:07.93ID:lpthGY+1a
月を怖がる人ってたまにいるけど
前世とか今世で悪いことでもしたんかね
807デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/30(土) 20:22:41.40ID:zJlZfWf60
天体の画像が怖い
2021/10/30(土) 20:27:03.94ID:nIglmucmH
>>806
欧米では、月の光は人を基地外にする、とかいうそうですよ
確か狼男も満月だったっけ、いや、それは送り狼だったっけ?
2021/10/30(土) 20:59:50.65ID:f9Pytl6VM
お仕置きでもされたのかな
810デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/30(土) 21:01:00.69ID:zJlZfWf60
天体恐怖症なんやワイ
木星とか海王星とか怖い
2021/10/30(土) 22:33:29.21ID:d9y/i02Wr
地球は恐くないん?
2021/10/30(土) 23:11:54.45ID:w/6Ssgd00
裏側にいる事に気がつくと、落ちてしまうそうだ
813デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/30(土) 23:41:41.51ID:zJlZfWf60
>>811
地球も太陽も怖いです
あと小惑星も怖い
あと月の裏側もマジでこわい
814デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/30(土) 23:42:05.22ID:zJlZfWf60
火星の衛星とかも怖いです
歪な形してるやつ
815デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/30(土) 23:43:09.25ID:zJlZfWf60
冥王星の最新画像見たけどめちゃくちゃ怖くて直視できなかった
2021/10/31(日) 09:06:05.96ID:eEOPPlKd0
アロコスなんかカワイイ形してんじゃん
817デフォルトの名無しさん (アウアウウー Sa9d-48dE)
垢版 |
2021/10/31(日) 11:07:20.50ID:dKAtRzTxa
乙py
乙py
818デフォルトの名無しさん (アウアウウー Sa9d-48dE)
垢版 |
2021/10/31(日) 11:30:55.69ID:dKAtRzTxa
>>814
https://www.youtube.com/watch?v=bEwWCXxaVR4
819デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/31(日) 11:33:04.24ID:xmsO/hLH0
>>818
グロ
2021/10/31(日) 11:46:46.80ID:TjuXDVeD0
NHK-BSプレミアム『グレートネイチャー』の宣伝臭が鼻につくくらいで
扱っている題材は台湾の自然、どこがグロなんだ?
821デフォルトの名無しさん (ワッチョイ b11b-lV4V)
垢版 |
2021/10/31(日) 14:17:04.25ID:xmsO/hLH0
>>820
地球の中心コアへの旅っていう関連動画がグロい
822デフォルトの名無しさん (ワッチョイ 13ad-BvZE)
垢版 |
2021/11/01(月) 03:55:44.21ID:6HuVbq6K0
饅頭怖い
823デフォルトの名無しさん (ワッチョイ 2bbd-ruXn)
垢版 |
2021/11/01(月) 11:25:10.37ID:/Zy4WfCe0
lu分解をc言語でやりたく、次のようなコード(1部分になります)を書いたのですが、y0の値が0.8になるはずなのに全く違うものとなってしまいます。原因が全くわからないのですが、どこを改良すればよいのでしょうか。

for(int n = 1; n <= M+1; n++){
t = n*dt;

for(int i = 0; i <= N; i++){
x[i] = 0.0;
}

/* Ax = uを解く */
/* Ly = u */
y[0] = u[0]/l[0][0];
for (int i = 1; i <= N; i++){
y[i] = (u[i] - l[1][i]*y[i-1])/l[0][i];
}

/* Ux = y */
x[N] = y[N];
for (int i = N-1; i >= 0; i--){
x[i] = y[i] - m[i]*y[i+1];
}

/* 更新 */
for(int i = 0; i <= N; i++){
u[i] = x[i];
}
}
824デフォルトの名無しさん (エムゾネ FF33-48dE)
垢版 |
2021/11/01(月) 12:00:24.14ID:z/x9VzKbF
int → double または float
2021/11/01(月) 13:05:24.25ID:qmVDupeY0
x, y, l, m, u の宣言で添え字のとりえる範囲分はちゃんと確保してる?

(lu分解として正しいかどうかはおいといて)ループのコードから
x 0..N まで → 最低限 double x[N+1];
y 0..N まで → 最低限 double y[N+1];
u 0..N まで → 最低限 double m[N+1];
m 0..N-1 まで → 最低限 double m[N];
l [0][0]..[1][N] まで → 最低限 double l[2][N+1];
826デフォルトの名無しさん (ワッチョイ 2bbd-ruXn)
垢版 |
2021/11/01(月) 15:07:15.16ID:/Zy4WfCe0
最初に宣言して確保してるので、大丈夫だと思うんですが、、
いちおうx,y,l,m,uをそれぞれ出力してみたのですが、yだけ間違えた値になってしまいます。
ループの順番とかがおかしいんですかね?
827デフォルトの名無しさん (ワッチョイ 13ad-BvZE)
垢版 |
2021/11/01(月) 19:03:15.19ID:6HuVbq6K0
全ての変数の宣言を書け
2021/11/01(月) 20:58:39.67ID:6+jC3RjR0
最小限再現できるコードを書いてもらわんと指摘することはできんねぇ
(そして最小限再現にシェイプアップする過程でやらかしを見つける)
829デフォルトの名無しさん (ワッチョイ 6910-7alp)
垢版 |
2021/11/02(火) 07:44:51.26ID:I7k+rE/i0
>lu分解
java版?なら見つかった。
ttps://qiita.com/edo_m18/items/1d67532bed4a083cddb3
830デフォルトの名無しさん (エムゾネ FF33-48dE)
垢版 |
2021/11/02(火) 10:38:39.23ID:px0qcy1yF
>>821
どこがプログロマー?
https://www.youtube.com/watch?v=SsB8VfxgZwQ
2021/11/03(水) 06:47:18.51ID:biZn6gZT0
小学生の頃から知ってたことばかりでウルトラつまんねえ番組だ
832デフォルトの名無しさん (ワッチョイ 515f-Ds5/)
垢版 |
2021/11/07(日) 10:08:30.22ID:gNBrcBZD0
サイコパスゲイ病人菊永裕太郎
2021/11/08(月) 14:05:50.44ID:QzkUvy+x0
>>823
https://www.youtube.com/watch?v=Wdy1Y-fbAII
https://www.youtube.com/watch?v=KYPiqtitEl8
2021/11/13(土) 19:10:26.04ID:EXpCOp4b0
int main() {
return 0;
}

いきなりこれの意味がわかりません。解説によるとゼロを返して正常終了する。
とかなんとかなんですが、どういう意味でしょうか。
オンライン上にゼロの意味の解説が見つかりません。
2021/11/13(土) 19:43:45.28ID:Q3rklS0i0
大抵の解説では「OSに返す値」となってる。

プログラムが正常終了したら 0。
異常終了や目的の処理が出来なかったときには0以外を返すのが慣例。

Linuxならシェルで echo $?
Windowsならコマンドプロンプト/バッチファイルで echo %ERRORLEVEL%
で確認できる・・・らしい。

0以外を受け取ったからとOSが何か特別な処理をするわけではない。
836デフォルトの名無しさん (ワッチョイ a5da-WW/G)
垢版 |
2021/11/13(土) 19:53:04.62ID:NDPTYcvp0
>>834
エラーで終了するときは0以外で帰しておくと
数年後の未来の自分を助けることができるぞ!
2021/11/13(土) 20:53:19.24ID:pG0a2gxf0
この段階では
0をかえす
そして
正常終了する
ぐらいの認識でいいんじゃないの?

別にどんな整数を返しても正常終了するわけだし
2021/11/13(土) 20:56:10.46ID:FTD0k+Bx0
>>834-835
厳密にいえば、言語仕様上では

・ 0 又は EXIT_SUCCESS の場合は成功終了であることを処理系定義の方法で返す
・ EXIT_FAILURE の場合は失敗終了であることを処理系定義の方法で返す
・ それら意外の場合には返される状態は処理系定義とする

という規則になっている。
どのように解釈されるかは言語仕様の側でははっきりとは決めずにホスト環境 (普通は OS のこと) や処理系の都合次第なので、
言語よりは OS の資料にあたるほうがわかりやすいかもしれない。
言語仕様として確実に保証してるのは少なくとも成功したのか失敗したのかだけは返せる (受け取るかどうかは知らんけど) ってだけだね。

POSIX (Unix 系 OS) では exit status と呼んでるけど、
Windows では error level とか exit code と言ってる。
2021/11/13(土) 22:33:17.66ID:uR+eQ86NH
単独で使う場合は関係ないけど
シェルとかバッチファイルから呼び出す場合にエラーや望まない結果だったら処理を中断とかしたい場合に
ちゃんと値を返しておくと便利になる
2021/11/13(土) 22:42:47.32ID:J/2HuwPl0
パイプ使うときはどう利用すればいい?
2021/11/13(土) 22:51:27.93ID:TY5ABTi00
棒を挟むんだよ
2021/11/13(土) 22:53:39.30ID:DyUYxUU00
>>839
呼び出したプログラムが返してくる値を使うプログラムとしては make がありますね…
2021/11/14(日) 09:01:01.66ID:TENET21t0
>>834
補足として、CのAPIにも失敗時に0を割り当てる場合と、成功時に0を割り当てる場合がある。
エラーの要因なんかを意識したい体系では後者も普通に使われるが、同じコード内で前者と
混在せざえるをえない事もある。マクロなんかを使った記述を意識しないとハマるぞw
2021/11/14(日) 09:49:57.54ID:5CSGBVhH0
>>840
fork して dup2 を使います
2021/11/14(日) 13:25:42.20ID:EUNDgDvQ0
>>843
・E_OKで成功、それ以外でエラー
・0以上で成功、負でエラー
・常に成功
・void
・なんかのポインタで成功、NULLでエラー

無理やり分類したらこんな感じ?
2021/11/14(日) 13:59:30.15ID:E00roTgyF
>>834-835
個人的には
int main()
で引数無い状況ならOSのことは想定してないんだろうから
void main()
で良いだろって思う
組み込みとか
2021/11/14(日) 14:07:31.05ID:5CSGBVhH0
>>846
リンクされるスタートアップが返り値の存在を前提にしているというのに、main() ごときが返り値の有無を指定するなんて傲慢じゃないですかぁぁぁぁ!
2021/11/14(日) 15:32:15.51ID:A4GQ1/1N0
main の型を変則的にするくらいなら main をエントリーポイントにしない
(エントリーポイントの関数を別の名前にする) ほうが好ましいと個人的には思う。
言語仕様の外 (処理系定義) で定義された方法を使おうとしていることがわかりやすいので。
2021/11/15(月) 08:57:20.76ID:ELwWgVHxd
>>846
俺もそう思う
2021/11/15(月) 08:59:15.64ID:ELwWgVHxd
実行開始点は◯◯関数とドキュメントのどこに書こうか悩まずに済むならそうしたい
2021/11/15(月) 18:18:16.98ID:oeHKaDHh0
ただの慣例なんですね、ご回答ありがとうございました。
2021/11/15(月) 19:21:59.60ID:BFf+frEV0
C言語初心者です。sleepを使って一文字ずつ
2秒ごとに表示したいのですが
Windowsの端末だとうまくいくのですが、
Ubuntuだと8秒後にまとめてHelloと一度に
表示されてしまいます。ubuntuでも
windowsのように一文字ずつ表示させたいのですが
できないのでしょうか?コンパイラはGCCです。

#include <stdio.h>
#include <unistd.h>

int main (){

printf("H");
sleep(2);
printf("e");
sleep(2);
printf("l");
sleep(2);
printf("l");
sleep(2);
printf("o\n");

return 0;
}
2021/11/15(月) 19:27:49.92ID:a976/UsH0
>>852
printf('A'); fflush(stdout); はいかが?
2021/11/15(月) 19:28:12.24ID:Xr7xQZWT0
printfとsleepの間に↓
fflush(stdout);
2021/11/15(月) 19:45:10.08ID:BFf+frEV0
>>853
>>854

ありがとうございます。うまくいきました。
fflushの使い方調べてみます。
2021/11/15(月) 23:18:43.35ID:LEZCO+bp0
>>852
どちらの挙動も言語仕様的にはアリ。
ストリームが対話型装置を参照していると判定できて、かつその場合に限り完全バッファリングすることになっていて、
逆に言えば対話型装置 (この場合はコンソール) に繋がっているときはラインバッファリングかもしれないし、
バッファリング無しかもしれない。

フラッシュを明示的に指示するのでもよいが、 setvbuf 関数でバッファリングをしないように設定することもできる。
2021/11/15(月) 23:20:10.09ID:LEZCO+bp0
>>856
書き間違えた。

対話型装置を参照していると判定

対話型装置を参照していないと判定
2021/11/15(月) 23:52:40.37ID:9q/xF8xE0
低レベルの出力関数使ってバッファリングを回避してみる、とか
859デフォルトの名無しさん (ワッチョイ 4b46-Itmb)
垢版 |
2021/11/16(火) 21:41:05.99ID:vUDwceGd0
lintの無い事い今更気付いたのだが、代替何?
2021/11/16(火) 23:22:15.69ID:hcv5mNbC0
>>859
clion
861デフォルトの名無しさん (アウアウウー Saa9-09aj)
垢版 |
2021/11/17(水) 02:29:57.06ID:+JwFzM8Ra
>>851
int main(){
int a=0;
return a;
}

void main(){
int a=0;
}
をそれぞれ asm 付きでコンパイルして比較してみ
判ったら次は a=0; を inline にしてみ
2021/11/17(水) 16:44:53.52ID:802yK0wSK
>>859
splint
2021/11/17(水) 17:37:06.80ID:R6z6I7690
>>859
コンパイラが細かくチェックするようになったから lint の出番がなくなった。

gcc や clang なら -fsyntax-only オプションを付けると文法のチェックまでで段階を止める。
必要な警告オプションを付けた上でこれを使えば古い時代の lint より厳しいくらいだと思う。
(ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。)
2021/11/17(水) 19:11:13.17ID:Kdlo9yNJ0
>>863
>(ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。)
私は -W -Wall で妥協します
2021/11/17(水) 20:49:44.01ID:U3uLHNTwd
最近のコンパイラはミスタイプすると
「contが見つかりません、もしかしてcountのことですか?」みたいなことまで言ってくるもんなあ
グーグルかよ
2021/11/18(木) 00:26:37.80ID:MiW85JEr0
>>865
そこは読まない…
2021/11/18(木) 00:32:41.46ID:HOoxCKRv0
入門サイトで勉強しててこんな感じのコードがエラーになって
{
int a = 100;
printf("数値:%d アドレス:%x", a, &a);
}
gccのエラーをコピペで検索すると、&aはポインタだから、アドレス:%pだと回答がヒット。
コンパイラやバージョンによって挙動が違うのでしょうか?
2021/11/18(木) 00:55:33.69ID:ku1GvVZm0
>>867
言語仕様で未規定や処理系定義としている場合があって、
そういうのは処理系や実行環境の都合に合わせて決めていいことになってる。
そして「未定義」とされている場合は何が起こってもいいことになってるので、
暴走するかもしれないし、 OS が止めてくれるかもしれないし、しれっと意味不明の結果を出力するかもしれない。
たぶんそれは未定義に該当すると思う。

C の可変長引数は型チェックをゆるゆるにすることで実現されていて、
処理系の内実をわかってる人は言語仕様上の保証がない (けど実態としては問題がない) コードを書くのは普通にある。
パソコンで一般的に使われている呼び出し規約 (関数を呼出す機械語レベルの挙動の規則) だと
ポインタと (レジスタの幅以下の大きさの) 整数は同じ方法で渡すので問題にならないんだけど、
言語仕様では保証がない。

可変長引数の型チェックはゆるゆるなんだけど printf は頻出するからコンパイラが特別扱いで
少しチェックを厳しくしているのでエラーになることもあったりする。

まあ基本的には保証されてないのでやらないほうがいいよ。
2021/11/18(木) 01:52:34.49ID:HOoxCKRv0
>>868
詳しい説明ありがとうございます。
実際にターミナルに出力されたのはerrorではなくwarningで、試したらそのままでも実行できていました。
用心しながら学習続けていこうと思います。
2021/11/18(木) 02:23:30.05ID:ku1GvVZm0
逆に完全に言語仕様に沿っていても警告になる場合もあるし、
(基本的には警告が出ないようなコードのほうが綺麗ではあるが)
言語仕様的に OK なのか NG なのか、
とりあえず自分の実行環境で OK なのか NG なのかを正確に把握するのはかなり分かり難いと思う。
2021/11/18(木) 02:53:45.75ID:SHW/gJRC0
>>867
まず、エラーと警告の違いを
次に、エラーとill-formedの違いを
憶えよう
2021/11/18(木) 10:38:56.92ID:7kNuqccRd
0から100までの整数のうち、17の倍数となる数の合計を求め、かつ途中の加算処理を出力するプログラムをつくったのですが、うまくいきません。
2021/11/18(木) 10:39:42.31ID:7kNuqccRd
うまくいかないのは過程を出力する処理の過程なのですが、どうしたらよいですか。

コードは以下です。

#include <stdio.h>

int main()
{
int i,sum=0;

for(i=17; i<=100; i=i+17) {
sum=sum+i;
printf("途中計算→%d\n", sum);
}
printf("合計=%d\n",sum);

return 0;
}
2021/11/18(木) 10:49:25.32ID:SHW/gJRC0
ダッサいループ書いてないで公式立てたら?
2021/11/18(木) 11:10:34.71ID:R1PabgqQ0
>>873
「17の倍数」とは「17で割った余りが0」のこと
Cで割った余りを計算する演算子は「%」
2021/11/18(木) 11:14:20.02ID:SHW/gJRC0
17から開始で17ずつ増やしてるだろ
0は17の倍数じゃないそうだが
2021/11/18(木) 11:32:07.83ID:RYwZiL190
>>873
何がどううまく行かないの?あってそうに見えるけど
878デフォルトの名無しさん (エムゾネ FF43-09aj)
垢版 |
2021/11/18(木) 14:40:44.78ID:/He/baLSF
>>869
昔のソース(コンパイラ)は %x で通るのが多い
今から勉強するなら %p の方が良いし新しい教科書使った方が良い
879デフォルトの名無しさん (エムゾネ FF43-09aj)
垢版 |
2021/11/18(木) 14:45:21.17ID:/He/baLSF
>>873
printf("途中計算→%d, %d, %d\n", i / 17, i, sum);
2021/11/18(木) 14:45:34.58ID:/He/baLSF
>>823
https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/PartialPivLU.h
https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/FullPivLU.h
2021/11/18(木) 18:35:31.06ID:CfNf7HSld
>>867
伝統的にポインタはintと同じメモリサイズなので昔はそう書いてた

そうなんだよな最近のコンパイラはprintfのフォーマットと引数をチェックしてるんだよな
もう慣れたが最初不思議な気がした
組み込みだと自分でprintf関数作ったり(標準だと使わない機能が多くて重すぎるから)するけどそんな時はどうなるのだろうとか
882デフォルトの名無しさん (ワッチョイ e2ad-+VBe)
垢版 |
2021/11/19(金) 00:07:30.77ID:tkL53aTR0
>>872
( ´_ゝ`)フーン
883デフォルトの名無しさん (ワッチョイ e2ad-+VBe)
垢版 |
2021/11/19(金) 00:11:12.00ID:tkL53aTR0
>>873
それでいいのでは?
2021/11/19(金) 00:18:54.40ID:bln5kEpJ0
64 ビット環境では LP64 や LLP64 (int とポインタの大きさが違う) が標準的になってしまったから
古いコードをそのまま持ってきたら通らないってことは割とよくあるよね。
2021/11/19(金) 00:37:21.78ID:tkL53aTR0
long と int (及び char *)を全て32bitとして扱っていて、辛うじてコンパイルは通るが決してまともに動かない
プログラムがあったので、しょうがないから gcc の -m32 と32bit用ライブラリで何とかした。何せ量が膨大で、
人力で直してたら多分何人か死んでたと思う。
2021/11/19(金) 05:44:49.46ID:6rl9yCzd0
俺が出向いた、とあるクライアントでは人海戦術してた
887デフォルトの名無しさん (エムゾネ FF02-iUmB)
垢版 |
2021/11/19(金) 10:15:17.36ID:eyeX0xyMF
long が int に追い越されたのかと思った
2021/11/20(土) 20:09:18.64ID:NniTuIFb0
>>884-886
far near 修飾があたりまえな世界から来た私にとっては、なんで今更なことしているの?と疑問におもっていました
2021/11/20(土) 20:11:58.21ID:LAgO+4EW0
そういえばhageモデルなんてあったな
2021/11/20(土) 21:32:53.52ID:NniTuIFb0
>>889
hage モデル、もとい huge モデルにはバグがある、とのもっぱらの噂でしたが実際どうだったんでしょうか…
2021/11/20(土) 22:42:01.83ID:PPXRLNML0
ていうか、8086のHugeみたいなものはバグ作り込んでしまいそうで怖いよな。ポインタ絡みで。
違う値が同じアドレスになる事あるし。
2021/11/20(土) 22:45:40.83ID:LAgO+4EW0
当時300kを越える配列を処理したくて使いました
使うというか、複数のセグメントに分割して割り当て、
自前で配列インデックスを計算してアクセスしただけですが
2021/11/21(日) 00:46:36.95ID:mkw0m2hl0
違う場所が同じ値になるような場合があっても言語仕様が保証している範囲ではちゃんと仕様通りだったりするんだよな。
というより保証が可能な範囲をうまいこと言語仕様にまとめたって感じなんだと思う。
2021/11/21(日) 08:41:13.51ID:uokK0Aao0
>>888
Windowsが64bit主流になっていく頃にも一騒動あったよ
2021/11/21(日) 12:42:55.44ID:ODZrEgDk0
>>891
さらに年寄りの繰言を続けますが、

>違う値が同じアドレスになる事あるし。

というのは far ポインタでも同じです、far と hage じゃなかった huge の違いは、オフセットの繰り上がりがセグメントに反映されるかされないか
私は余計なことはしてほしくないので、繰り上がりがない far を愛用していました、huge はいまいち信用できませんでした
2021/11/21(日) 12:44:00.07ID:ODZrEgDk0
>>894
それ、今のことなのでは?>>884-886
2021/12/01(水) 02:11:41.33ID:AqcF5lvQ0
構造体のパディングの値って未規定ですか?
2021/12/01(水) 02:24:50.55ID:VU8XmWVx0
>>897
パディングの状況に依存するコードを書くのはよろしくない、というのが一般論だったかと
ファイル入出力で問題になりますが、私はもう、ちまちま fwrite() fread() で「1 byte ずつ」やるしかない、とまで諦めています
環境がバッファリングしてくれますし
2021/12/01(水) 02:53:05.18ID:Y6HO3vrm0
未規定であるしパディングの大きさに依存するようなコードは避けるのが行儀のよいコードであるのは間違いないけど、
対象にしている処理系での挙動がはっきりしていて移植の可能性もない (または移植のコストをかける覚悟がある)
のなら依存するコードを書くことはそれなりにあると思う。

マクロで切り分けて configure (とか cmake とかのメタビルドツール) で各アーキテクチャの都合に対処することは可能だし。

良くはない。 良くはないがそういう良くないことも出来るのが C ってもんなわけで。
2021/12/01(水) 11:58:37.67ID:Jc7L6V7f0
昔、構造体の扱いで失敗した事がある
あるサイトで構造体を引数にして削除処理を行う関数を提供されたが、
実際に使おうとすると引数エラーを返されてしまい途方に暮れた
構造体メンバーには仕様書通りに必要な値をセットしている

しばらくして原因が分かった
関数側は引数が正しくセットされているかを、
処理対象の領域に格納されている同一の構造体と比較しチェックしていた
その比較に memcmp を使っていた
呼び出すこちら側は、構造体を自動変数として領域確保していた
2021/12/01(水) 19:41:43.68ID:Dt37aX+70
構造体の比較をmemcmpでやるの本当にバッドプラクティスだと思うわ
横着せずに比較関数作れと
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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