!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
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言語なら俺に聞け 157
https://mevius.5ch.net/test/read.cgi/tech/1624846971/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
C言語なら俺に聞け 158
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ブーイモ MMcf-4SjH)
2021/12/25(土) 12:11:46.61ID:xxeaCAplM60デフォルトの名無しさん (ワッチョイ 6e24-76Y4)
2022/01/16(日) 15:21:59.54ID:sWhCnDyn0 int __cdecl main(int argc, char** argv)
この時二つの引数はどの時点で突っ込まれるのでしょうか?
引数とかって言われてもこのくらいしかわかんないです。
int add(int a,int b){return a+b;}
int main(){cout<<add(1,2);}
__cdeclあるときはmainの中身が実行される前にmain内にある二つの引数を・・・
すみませんよくわからないので教えてほしいです。
この時二つの引数はどの時点で突っ込まれるのでしょうか?
引数とかって言われてもこのくらいしかわかんないです。
int add(int a,int b){return a+b;}
int main(){cout<<add(1,2);}
__cdeclあるときはmainの中身が実行される前にmain内にある二つの引数を・・・
すみませんよくわからないので教えてほしいです。
61デフォルトの名無しさん (ワッチョイ a269-pjxc)
2022/01/16(日) 15:47:09.71ID:3oi0BVHh062デフォルトの名無しさん (ワッチョイ 6e24-76Y4)
2022/01/16(日) 15:55:52.82ID:sWhCnDyn0 >>61
ありがとうございます。
c++やり始めたばかりで、初めて__cdeclというものに出会い、
main()に引数が指定されるのも初めて見ました。
__cdeclを調べてみたのですが、よくわかりませんでした。
https://docs.microsoft.com/ja-jp/windows/win32/winsock/complete-client-code
ここのコードに出てきたやつです。
argc, argvこの二つにはどこから来た値がどのタイミングで入るのかがよくわかりません。
サーバー側の方でそれぞれの構造体や関数は一応ですが、調べました。
(ディスクリプタが良くわかんなかったけど部品の形状みたいな感じで覚えました)
ありがとうございます。
c++やり始めたばかりで、初めて__cdeclというものに出会い、
main()に引数が指定されるのも初めて見ました。
__cdeclを調べてみたのですが、よくわかりませんでした。
https://docs.microsoft.com/ja-jp/windows/win32/winsock/complete-client-code
ここのコードに出てきたやつです。
argc, argvこの二つにはどこから来た値がどのタイミングで入るのかがよくわかりません。
サーバー側の方でそれぞれの構造体や関数は一応ですが、調べました。
(ディスクリプタが良くわかんなかったけど部品の形状みたいな感じで覚えました)
63デフォルトの名無しさん (ワッチョイ 6e24-76Y4)
2022/01/16(日) 15:57:48.95ID:sWhCnDyn0 main関数が一番最初に読み込まれる関数という風に思っていて、
includeやdefineを済ませた後に一番最初にmainが実行されるのなら、
argc, argvこの二つの変数の値がどうやって決まるのかわからないのです。
includeやdefineを済ませた後に一番最初にmainが実行されるのなら、
argc, argvこの二つの変数の値がどうやって決まるのかわからないのです。
64デフォルトの名無しさん (ワッチョイ 6e24-76Y4)
2022/01/16(日) 16:00:01.63ID:sWhCnDyn0 今更なのですが、mainを実行するときにmainの中の
ローカルな空の変数(?)を宣言するだけ宣言しといてるとかですか?
ローカルな空の変数(?)を宣言するだけ宣言しといてるとかですか?
65デフォルトの名無しさん (ワッチョイ 02ad-bpA4)
2022/01/16(日) 17:07:18.79ID:rX32u5GR066デフォルトの名無しさん (ワッチョイ 02ad-bpA4)
2022/01/16(日) 17:11:54.22ID:rX32u5GR0 >>64
何を疑問に思っているのかよくわからないが、Javaとか他の言語とほぼ同じでmain()に限らず関数は呼ばれたらそのブロック内でローカル変数のメモリを確保する。(ただしCの場合は宣言だけだと初期化されない)。
何を疑問に思っているのかよくわからないが、Javaとか他の言語とほぼ同じでmain()に限らず関数は呼ばれたらそのブロック内でローカル変数のメモリを確保する。(ただしCの場合は宣言だけだと初期化されない)。
67デフォルトの名無しさん (ワッチョイ 6e24-76Y4)
2022/01/16(日) 17:30:57.83ID:sWhCnDyn068デフォルトの名無しさん (ワッチョイ e101-xpr1)
2022/01/16(日) 18:32:43.61ID:E45iSBlB069デフォルトの名無しさん (ワッチョイ eebb-YXmm)
2022/01/16(日) 19:07:47.21ID:8yj7aXgd0 純粋にアルゴリズムを学ぶことが目的ならC以外のぬるい言語のほうが良いのでは?
ただ、考えたアルゴリズムを誰よりも早く動かしたいならCは役立つと思うよ
ただ、考えたアルゴリズムを誰よりも早く動かしたいならCは役立つと思うよ
70デフォルトの名無しさん (ワッチョイ 4666-XXp5)
2022/01/16(日) 20:55:00.02ID:qRjB4bc50 純粋に、なら pascal でしょう…
pasca から C へは機械的に書き換えられるから C でもいいでしょうが
それ以上の高級言語になると、例えばソートアルゴリズムの「インプレイス」の概念も有耶無耶になってしまうので、初等アルゴリズムくらいは C で勉強したほうがいいですね
pasca から C へは機械的に書き換えられるから C でもいいでしょうが
それ以上の高級言語になると、例えばソートアルゴリズムの「インプレイス」の概念も有耶無耶になってしまうので、初等アルゴリズムくらいは C で勉強したほうがいいですね
71デフォルトの名無しさん (ワッチョイ a963-soNI)
2022/01/16(日) 20:57:35.96ID:YLrls7710 メモリーリークなどは、痛い思いをしてでも学ぶ価値はあると思う
根性論ですまん
根性論ですまん
72デフォルトの名無しさん (ワッチョイ 8202-9BXF)
2022/01/16(日) 20:58:56.40ID:uYZKVP77073デフォルトの名無しさん (ワッチョイ a963-soNI)
2022/01/16(日) 23:05:47.94ID:YLrls7710 確保と解放はDB扱うときにもあるからね
74デフォルトの名無しさん (ワッチョイ e101-xpr1)
2022/01/17(月) 00:45:04.90ID:VBYSAUJW0 rustがCの代替になる理由がメモリ関連のバグが減るからってのはどう言う事?
75はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 463e-9BXF)
2022/01/17(月) 00:56:25.55ID:jU2WrI4n0 オブジェクトは複雑に依存関係が出来る場合もある。
参照 (C 的に言えばポインタ) が残っているのにオブジェクトの寿命が尽きていればダングリングが生じてしまう。
C では寿命の管理をするのはプログラマの責任であって、無効なポインタを使った結果は未定義。
そういうのを静的にチェックしてエラーにしてくれたらありがたいなぁというのを実現したのが Rust 。
そのかわり制約の記述がちょっと面倒くさくはあるんだが、どちらにせよ依存関係の管理は C でもやってたことではあるからね。
Rust で制約を書けないようならたぶん C でもちゃんとメモリ管理できてない。
参照 (C 的に言えばポインタ) が残っているのにオブジェクトの寿命が尽きていればダングリングが生じてしまう。
C では寿命の管理をするのはプログラマの責任であって、無効なポインタを使った結果は未定義。
そういうのを静的にチェックしてエラーにしてくれたらありがたいなぁというのを実現したのが Rust 。
そのかわり制約の記述がちょっと面倒くさくはあるんだが、どちらにせよ依存関係の管理は C でもやってたことではあるからね。
Rust で制約を書けないようならたぶん C でもちゃんとメモリ管理できてない。
76デフォルトの名無しさん (ワッチョイ 25bb-9BXF)
2022/01/17(月) 02:01:49.66ID:4l2NkMK40 Ubuntuのgcc9で
size_t i = -100;
printf("%ld\n", i); // -100
と出力されたんですが、なぜsize_tで負数が扱えるんですか?
stddef.hでは
typedef long unsigned int size_t;
になってました
怖いです
size_t i = -100;
printf("%ld\n", i); // -100
と出力されたんですが、なぜsize_tで負数が扱えるんですか?
stddef.hでは
typedef long unsigned int size_t;
になってました
怖いです
77はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 463e-9BXF)
2022/01/17(月) 02:09:51.98ID:jU2WrI4n078デフォルトの名無しさん (ワッチョイ 25bb-9BXF)
2022/01/17(月) 02:13:20.92ID:4l2NkMK40 >>77
printfですかなるほど
printfですかなるほど
79デフォルトの名無しさん (ワッチョイ 25bb-9BXF)
2022/01/17(月) 02:32:10.74ID:4l2NkMK4080デフォルトの名無しさん (ワッチョイ 224c-fkY6)
2022/01/17(月) 06:34:55.39ID:J3jxIzMN081デフォルトの名無しさん (ワッチョイ e101-LjoV)
2022/01/17(月) 08:24:31.68ID:y6/SFoBh082デフォルトの名無しさん (スップ Sd82-gAe+)
2022/01/17(月) 08:24:40.15ID:6BYLlYWJd83デフォルトの名無しさん (ワッチョイ a969-fIZs)
2022/01/17(月) 13:06:53.33ID:RA8YXgQS0 サイズがおっきい側にあわせて拡張されるけど
拡張の際に符号付で拡張されるかは、拡張される側の型による でいいのかな?
左辺が size_t で 右辺が (__int16)-1 と (unsigned __int16)0xffff とで変わってくる
拡張の際に符号付で拡張されるかは、拡張される側の型による でいいのかな?
左辺が size_t で 右辺が (__int16)-1 と (unsigned __int16)0xffff とで変わってくる
84デフォルトの名無しさん (ワッチョイ 25bb-9BXF)
2022/01/17(月) 19:03:14.06ID:4l2NkMK4085デフォルトの名無しさん (ワッチョイ e101-xpr1)
2022/01/17(月) 21:09:27.93ID:VBYSAUJW086デフォルトの名無しさん (スッップ Sd22-qLbT)
2022/01/18(火) 07:11:42.98ID:gNdHIxeHd おまえさん、匿名掲示板に向いてないな
87デフォルトの名無しさん (JP 0H22-soNI)
2022/01/20(木) 11:09:59.27ID:3tZE3jDgH #defineの効果を全体に適用させる方法は無いの?
書いてあるヘッダを取り込まなくても
書いてあるヘッダを取り込まなくても
88デフォルトの名無しさん (ワッチョイ a963-soNI)
2022/01/20(木) 11:14:24.09ID:hwIlnS+y0 コマンドラインで指定
89デフォルトの名無しさん (ワッチョイ 8202-9BXF)
2022/01/20(木) 14:48:47.15ID:n7chvAG3090デフォルトの名無しさん (スップ Sd82-gAe+)
2022/01/20(木) 16:57:56.31ID:JLPh4iSLd gcc -DUNKO
とかでコンパイル時分岐させるのはよくやる
これで "#define UNKO" 相当
とかでコンパイル時分岐させるのはよくやる
これで "#define UNKO" 相当
91デフォルトの名無しさん (ガラプー KK16-KE6H)
2022/01/20(木) 17:35:43.55ID:JsGuh7u5K92デフォルトの名無しさん (ワッチョイ 82b1-IkXm)
2022/01/20(木) 18:12:26.02ID:Eie73JRu0 この問題なんで答え0なん?
難しいhttps://i.imgur.com/TelzwbB.jpg
難しいhttps://i.imgur.com/TelzwbB.jpg
93デフォルトの名無しさん (オイコラミネオ MM29-tE2C)
2022/01/20(木) 19:26:05.14ID:8odJS2DdM %rbp の値を pushq でスタックに退避して他の処理をやって popq で下ろしてきてるから最初に入ってた 0 が出てくる
94デフォルトの名無しさん (ワッチョイ 2236-soNI)
2022/01/20(木) 19:30:17.07ID:6OdGtD3E0 >92
なんか80286〜80486時代に見たアセンブラと違うorz
適当にググった予想
;レジスタ %rbp、%rbx の値をスタックにコピー
pushq %rbp
pushq %rbx
...
popq %rbx
popq %rbp
;コピーしておいた値を%rbx,%rbpに戻す
呼び出し前と同じ値になるだけだね。
なんか80286〜80486時代に見たアセンブラと違うorz
適当にググった予想
;レジスタ %rbp、%rbx の値をスタックにコピー
pushq %rbp
pushq %rbx
...
popq %rbx
popq %rbp
;コピーしておいた値を%rbx,%rbpに戻す
呼び出し前と同じ値になるだけだね。
95デフォルトの名無しさん (ワッチョイ 02ad-9BXF)
2022/01/21(金) 00:21:23.88ID:3gUGA9pL096デフォルトの名無しさん (アウアウウー Sa05-soNI)
2022/01/21(金) 06:05:07.87ID:mAmuRLc0a97デフォルトの名無しさん (アウアウウー Sa05-soNI)
2022/01/21(金) 06:13:28.12ID:mAmuRLc0a マイコン系のやつでヘッダのインクルードする前に
マクロ定義すれば使うピンを選択できるようになってるはずなんだけど
当然ながら別にコンパイルされるソースの中には効力がないと
マクロ定義すれば使うピンを選択できるようになってるはずなんだけど
当然ながら別にコンパイルされるソースの中には効力がないと
98デフォルトの名無しさん (ワッチョイ e101-9BXF)
2022/01/21(金) 07:37:29.62ID:hGKgCtXH0 「マクロ定義すれば使うピンを選択できるようになってる」メーカー提供の何かを使った
自前のライブラリで なんとかしたいと?
それライブラリの設計ミスじゃね?
自前のライブラリで なんとかしたいと?
それライブラリの設計ミスじゃね?
99デフォルトの名無しさん (ワッチョイ e1da-sTIO)
2022/01/22(土) 12:31:56.24ID:90hTt9580 日立の悪口はやめろ
100デフォルトの名無しさん (スッップ Sd7f-t4iI)
2022/01/23(日) 06:37:18.36ID:Li0julahd ライブラリはコンパイル済みだから#defineしても無駄だろ
101デフォルトの名無しさん (ワッチョイ 4710-3ipb)
2022/01/26(水) 09:09:47.27ID:iLK8Wqk90102デフォルトの名無しさん (ブーイモ MM6b-KTk6)
2022/01/26(水) 09:32:17.82ID:Ppmaq+BpM メモリ管理って言っても大層なことしないけどな
単一コンテキストなら対照的にctr/dtr置けばいいし、複数コンテキストならリンクリストに繋いでrefget/refputでいいし
まあメモリ上限やフラグメント、メモリプールとかやり始めるとなかなか面倒になってくるけど…
単一コンテキストなら対照的にctr/dtr置けばいいし、複数コンテキストならリンクリストに繋いでrefget/refputでいいし
まあメモリ上限やフラグメント、メモリプールとかやり始めるとなかなか面倒になってくるけど…
103デフォルトの名無しさん (ワッチョイ e7c3-rJ2b)
2022/01/26(水) 21:10:17.71ID:z6fCP1j50 Cのサーティファイ3級の問題集で
int main(void){
int i,j;
for(i=3, j=10;i-->0 && j-->0;);
printf("iは%d.jは%d\n",i,j);
return 0;}
でiが-1 jが7になるのはどうしてでしょうか?
int main(void){
int i,j;
for(i=3, j=10;i-->0 && j-->0;);
printf("iは%d.jは%d\n",i,j);
return 0;}
でiが-1 jが7になるのはどうしてでしょうか?
104デフォルトの名無しさん (ワッチョイ a79b-uifs)
2022/01/26(水) 21:34:45.68ID:4bRyoani0105デフォルトの名無しさん (ワッチョイ 8701-4V6Q)
2022/01/26(水) 21:37:25.63ID:94PZZUq60 課題や問題としてはアリなんだろうけど、こういうコードはキモいよなぁ
106デフォルトの名無しさん (ワッチョイ 5f4c-prPq)
2022/01/26(水) 21:41:05.71ID:R08bxH5q0 ルールを知ってるか?という問題に
実用上どうのと言ってるやつ
わからんから負け惜しみにしか聞こえんぞ
実用上どうのと言ってるやつ
わからんから負け惜しみにしか聞こえんぞ
107デフォルトの名無しさん (ワッチョイ 5f69-V3GB)
2022/01/26(水) 21:44:03.93ID:zNP9VNXb0 条件に副作用がある式を書くと糞コードになるよ、って例かな
108デフォルトの名無しさん (ワッチョイ e7c3-rJ2b)
2022/01/26(水) 21:48:11.38ID:z6fCP1j50 >>104
ありがとうございます!大先輩! _(._.)_
ありがとうございます!大先輩! _(._.)_
109デフォルトの名無しさん (ワッチョイ 5f4c-prPq)
2022/01/26(水) 21:49:35.56ID:R08bxH5q0 関数ポインタを使っただけで糞コードと言い出すやつと変わらんな
110デフォルトの名無しさん (ワッチョイ 4710-3ipb)
2022/01/26(水) 22:02:05.94ID:iLK8Wqk90 偶然だけどRustがCから唯一受け継がなかったのがfor(;;)文と前置/後置の++と--だね
Rustではfor(;;)の代わりにもっとわかりやすいイテレータを使うfor inになって
イテレータ利用で++と--を使う場面が激減したため +=1と-=1で十分となった
Rustではfor(;;)の代わりにもっとわかりやすいイテレータを使うfor inになって
イテレータ利用で++と--を使う場面が激減したため +=1と-=1で十分となった
111デフォルトの名無しさん (ワッチョイ 47b3-V1vN)
2022/01/27(木) 08:19:14.30ID:1WN6znb60 #include <stdio.h>
void main(){
int a[5];
printf("%d\n", &a[0]);
printf("%ld\n", &a[1]);
printf("%d\n", &a[2]);
}
結果:
1860819792
140735054207828 ←★
1860819800
1860819796になるところがprintfで%ldにすると★のようになりました。どうして?
void main(){
int a[5];
printf("%d\n", &a[0]);
printf("%ld\n", &a[1]);
printf("%d\n", &a[2]);
}
結果:
1860819792
140735054207828 ←★
1860819800
1860819796になるところがprintfで%ldにすると★のようになりました。どうして?
112デフォルトの名無しさん (ワッチョイ 5f69-V3GB)
2022/01/27(木) 08:40:51.15ID:hGoB7Zi60 %dはint、%ldはlong
LP64環境(Linux等)なのだろう
ってか、ポインタを%dや%ldで出すのが変なんだけどね
%pで出しましょう
LP64環境(Linux等)なのだろう
ってか、ポインタを%dや%ldで出すのが変なんだけどね
%pで出しましょう
113デフォルトの名無しさん (スッップ Sd7f-WGVp)
2022/01/27(木) 09:28:40.94ID:Fupo2oO/d 挙動がわかっててやるのはともかく
なんで?になるのはギルティだな
担当教官が
なんで?になるのはギルティだな
担当教官が
114デフォルトの名無しさん (ワッチョイ 4763-IuBN)
2022/01/27(木) 11:12:04.00ID:HehBpiSx0 ++は、アセンブラコードを意識していると思うよ
115デフォルトの名無しさん (ワッチョイ 4710-3ipb)
2022/01/27(木) 12:53:54.43ID:cK3g3Gve0 >>114
大昔はコンパイラが直訳だったからね
今はコンパイラが賢いからx++でもx+=1でもx=x+1でも同じ結果
さらにアセンブラ側もレジスタを介すinc命令ではなくメモリ上に直接add 命令で1加算とか
そもそもポインタの++なら対象の型が8/16/32/64bitに応じて1/2/4/8をaddとか
だからアセンブラは今は関係ないし言語としても++がなくても影響なくなってしまってる
大昔はコンパイラが直訳だったからね
今はコンパイラが賢いからx++でもx+=1でもx=x+1でも同じ結果
さらにアセンブラ側もレジスタを介すinc命令ではなくメモリ上に直接add 命令で1加算とか
そもそもポインタの++なら対象の型が8/16/32/64bitに応じて1/2/4/8をaddとか
だからアセンブラは今は関係ないし言語としても++がなくても影響なくなってしまってる
116デフォルトの名無しさん (スプッッ Sdea-COP8)
2022/01/28(金) 07:31:33.24ID:Tsd33EHWd ポインタから次々読んでいく場合
a=*(p++);
のほうが便利
a=*(p++);
のほうが便利
117デフォルトの名無しさん (ワッチョイ a695-tVHJ)
2022/01/28(金) 07:43:00.03ID:y3i0lS6h0 格好つけるダサいやつ
118デフォルトの名無しさん (ワッチョイ 66cf-dQv6)
2022/01/28(金) 08:12:12.92ID:LR3qN1W70 一種のイディオム化しているがふつうその括弧はつけないな。
119デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 08:17:06.42ID:2Fs3iqwoM まあ、あっても悪さしないし心配なら付けるのは正しいと思う
>>118の言う通りよく見るイディオムになってるので違和感はあるけど
>>118の言う通りよく見るイディオムになってるので違和感はあるけど
120デフォルトの名無しさん (スプッッ Sdea-8U/q)
2022/01/28(金) 08:25:24.42ID:D0DTDHxMd char *src, *dst;
while(*dst++=*src++);
みたいな書き方はよく見るけど
最適化とか存在しない古いコンパイラのための書き方だよなといつも思う
while(*dst++=*src++);
みたいな書き方はよく見るけど
最適化とか存在しない古いコンパイラのための書き方だよなといつも思う
121デフォルトの名無しさん (スッップ Sd0a-fJWp)
2022/01/28(金) 09:16:27.33ID:grc2q108d いい意味の面倒くさがりだよ
122デフォルトの名無しさん (スプッッ Sdea-COP8)
2022/01/28(金) 09:23:04.37ID:Tsd33EHWd 最適化だけの問題ではないぞ
while(*dst=*src){dst++;src++;}
では変数名を変更する必要が出た場合2ヵ所づつ書き換えねばならない
→ミスにつながる
それにループが終わった後でdstとsrcは最後の要素を指しているので余計なインクリメントが要るかもしれない
while(*dst=*src){dst++;src++;}
では変数名を変更する必要が出た場合2ヵ所づつ書き換えねばならない
→ミスにつながる
それにループが終わった後でdstとsrcは最後の要素を指しているので余計なインクリメントが要るかもしれない
123デフォルトの名無しさん (ワッチョイ a510-Y4FF)
2022/01/28(金) 11:00:14.06ID:yXxqNK5h0 初心者や他言語ばっかりやってた人の誤読回避は考慮する?
124デフォルトの名無しさん (ワッチョイ eaad-dw97)
2022/01/28(金) 11:17:11.26ID:udo1auGz0 この頃発見した printf() のフォーマット
% の後に # を付けると x 変換の時に頭に 0x を付けてくれると知り、早速こう書いてみた。
printf("%#x\n", 0xab);
0xab が出力される。
これはいい、と思い16進4桁出そうとしてこう書いた。
printf("%#04x\n", x);
すると 0x は付いたがその後が2桁になった。どうやら 0x の部分の桁数も含めなければいけないようだ。仕方がないのでこう書き直す。
printf("%#06x\n", x);
やった!できた!
しかし幸せは長くは続かない。やがて x に 0 が入った状態でここを通過。以下の出力を得る。
000000
% の後に # を付けると x 変換の時に頭に 0x を付けてくれると知り、早速こう書いてみた。
printf("%#x\n", 0xab);
0xab が出力される。
これはいい、と思い16進4桁出そうとしてこう書いた。
printf("%#04x\n", x);
すると 0x は付いたがその後が2桁になった。どうやら 0x の部分の桁数も含めなければいけないようだ。仕方がないのでこう書き直す。
printf("%#06x\n", x);
やった!できた!
しかし幸せは長くは続かない。やがて x に 0 が入った状態でここを通過。以下の出力を得る。
000000
125デフォルトの名無しさん (ワッチョイ a563-Xc5L)
2022/01/28(金) 11:22:43.44ID:dRbZojn90 Cは初心者向けではないし、可読性は考慮していない
やりたい事をさっとコード化出来る人に向いている言語
やりたい事をさっとコード化出来る人に向いている言語
126デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 12:25:59.28ID:6cofCgvGM127デフォルトの名無しさん (ワッチョイ 7d01-RvMd)
2022/01/28(金) 12:32:45.35ID:obJ/SPWt0 文字列のエスケープシーケンスでバイナリ直接したんだけど、例えば"\x10"の後に"a"という文字を続けようとして"\x10a"って書くと値が大きすぎるってエラーになる。
"\x10" "a"と分割するしかない?
"\x10" "a"と分割するしかない?
128デフォルトの名無しさん (スッップ Sd0a-fJWp)
2022/01/28(金) 12:35:51.06ID:grc2q108d Cはプログラマを信頼する言語だ
悪いことをさせない制限より
自由度を優先させている
怠けるやつより進歩する者を優先するのもしかり
悪いことをさせない制限より
自由度を優先させている
怠けるやつより進歩する者を優先するのもしかり
129デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 13:19:26.12ID:vyOOr9LZM >>127
> "\x10" "a"と分割するしかない?
それしかなさげ
8進表現は最大3文字となってるから "\0123" は '\012' と '3' になるけど16進表現には桁数の制限がないので "\x10a" を1文字に解釈しようとしてエラーになる
char * の文字列は2文字、wchar_t の文字列は4文字までにすればいいと思うんだけど
> "\x10" "a"と分割するしかない?
それしかなさげ
8進表現は最大3文字となってるから "\0123" は '\012' と '3' になるけど16進表現には桁数の制限がないので "\x10a" を1文字に解釈しようとしてエラーになる
char * の文字列は2文字、wchar_t の文字列は4文字までにすればいいと思うんだけど
130デフォルトの名無しさん (ワッチョイ 7d01-RvMd)
2022/01/28(金) 13:57:54.02ID:obJ/SPWt0131はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e3e-dw97)
2022/01/28(金) 16:18:28.78ID:hT9TavA00 >>127,129
マイクロソフトのドキュメントにも言及があるのを見つけた。
https://docs.microsoft.com/ja-jp/cpp/c-language/octal-and-hexadecimal-character-specifications?view=msvc-170
不格好だけど C はそういうもんだからしょうがないね。
マイクロソフトのドキュメントにも言及があるのを見つけた。
https://docs.microsoft.com/ja-jp/cpp/c-language/octal-and-hexadecimal-character-specifications?view=msvc-170
不格好だけど C はそういうもんだからしょうがないね。
132デフォルトの名無しさん (ワッチョイ 7d01-RvMd)
2022/01/28(金) 16:49:19.01ID:obJ/SPWt0 >>131
わざわざ調べて頂いてありがとうございます。
#define ESC_UP "0x1b" "A"
のようにマクロで逃げることにしました。
使う側では
printf("今からUP" ESC_UP "UP完了");
と少し気持ち悪いですが。
わざわざ調べて頂いてありがとうございます。
#define ESC_UP "0x1b" "A"
のようにマクロで逃げることにしました。
使う側では
printf("今からUP" ESC_UP "UP完了");
と少し気持ち悪いですが。
133デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/28(金) 17:55:44.80ID:sJpZ8snBM ESC しか使わないなら
printf("今からUP\033AUP完了");
とかでもいいかも
今更8進数かよって感じもするけど…
もしくは
#define ESC(c) "\x1b" #c
printf("今からUP" ESC(A) "UP完了");
くらいかなぁ
printf("今からUP\033AUP完了");
とかでもいいかも
今更8進数かよって感じもするけど…
もしくは
#define ESC(c) "\x1b" #c
printf("今からUP" ESC(A) "UP完了");
くらいかなぁ
134unko (ワッチョイ eab9-21ac)
2022/01/29(土) 18:53:20.85ID:cvNc/NLr0 ごめんなさい高校のc言語の課題で乱数とじゃんけん対決をして結果と手を動的配列に格納して最後にまとめて結果を表示するというやるをやってるんですが
whileループで代入した結果とその後のforループでカウントしながら表示している値が違うみたいでずっとプログラム見てても何が原因なのか分からないのでわかる方いたら教えて欲しいです.
https://github.com/unko-c/kadai/blob/main/kadai.c
whileループで代入した結果とその後のforループでカウントしながら表示している値が違うみたいでずっとプログラム見てても何が原因なのか分からないのでわかる方いたら教えて欲しいです.
https://github.com/unko-c/kadai/blob/main/kadai.c
135デフォルトの名無しさん (ワッチョイ a563-Xc5L)
2022/01/29(土) 19:18:32.81ID:mAwlWFlr0136デフォルトの名無しさん (ワッチョイ a5d2-8U/q)
2022/01/29(土) 19:22:51.55ID:wjo4lb340 44: どっから配列が出てきた
デバッガ使えばプログラムの動き見るの捗るから使え
使えないなら怪しそうなとこにひたすらprintfを埋めろ
デバッガ使えばプログラムの動き見るの捗るから使え
使えないなら怪しそうなとこにひたすらprintfを埋めろ
137デフォルトの名無しさん (ワッチョイ a563-Xc5L)
2022/01/29(土) 20:13:03.39ID:mAwlWFlr0 (&janken->man)[i] = man;
printf("man:%2d ",(&janken->man)[i]);
構造体配列のメンバーアクセス方法が間違ってる
case 0:
countDraw++;
この直後にはbreak;を入れること(全てのcase文に適用)
while(i<=j && man<=2 && man>=0) {
ここにmanを入れる意味は?
入力範囲チェックを意図するなら、ここではなく
scanf直後に、範囲外ならcontinueさせる方が良い
無駄もあるけれど、この辺を直せば動くんではないか?
printf("man:%2d ",(&janken->man)[i]);
構造体配列のメンバーアクセス方法が間違ってる
case 0:
countDraw++;
この直後にはbreak;を入れること(全てのcase文に適用)
while(i<=j && man<=2 && man>=0) {
ここにmanを入れる意味は?
入力範囲チェックを意図するなら、ここではなく
scanf直後に、範囲外ならcontinueさせる方が良い
無駄もあるけれど、この辺を直せば動くんではないか?
138unko (ワッチョイ eab9-21ac)
2022/01/29(土) 20:51:58.61ID:cvNc/NLr0139unko (ワッチョイ eab9-21ac)
2022/01/29(土) 20:54:58.88ID:cvNc/NLr0 >>136
一応whileの直前当たりでかろっくで配列確保してます
一応whileの直前当たりでかろっくで配列確保してます
140デフォルトの名無しさん (ワッチョイ a5d2-8U/q)
2022/01/30(日) 01:38:43.74ID:05k5AmyC0 44: (&janken->man)[i]
janken->man は配列ではない。
jankenは配列とみなせるポインタだが関係ない
たぶんコンパイルを通すためにこの形になってるんだろうけど
janken[i].man とするべき
janken->man は配列ではない。
jankenは配列とみなせるポインタだが関係ない
たぶんコンパイルを通すためにこの形になってるんだろうけど
janken[i].man とするべき
141デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/30(日) 07:23:03.99ID:qcbJpmhr0 ソケット関連の質問です。
この前ドメイン名取得してきたのですが、(練習のため)
webブラウザにurlを打ち込んだ時に自分のパソコン内のサーバーソケットにつなげて
htmlで”HelloWorld”と吐き出したいのですが、ドメイン名IPアドレスの紐づけ
ってどの段階でやればいいのでしょうか?
ソケットを作るときにするのかなと思っているのですがそもそもこの考え自体が間違っているでしょうか?
この前ドメイン名取得してきたのですが、(練習のため)
webブラウザにurlを打ち込んだ時に自分のパソコン内のサーバーソケットにつなげて
htmlで”HelloWorld”と吐き出したいのですが、ドメイン名IPアドレスの紐づけ
ってどの段階でやればいいのでしょうか?
ソケットを作るときにするのかなと思っているのですがそもそもこの考え自体が間違っているでしょうか?
142デフォルトの名無しさん (ワッチョイ 7d01-dw97)
2022/01/30(日) 08:48:53.30ID:v3wXXGPY0 名前-IPを関連させる(D)DNSの話であって、ほぼソケット関係無いような
143デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/30(日) 09:18:12.24ID:uPZ//xKSM >>141
> ドメイン名IPアドレスの紐づけ
紐づけと言うか解決はgetaddrinfo()でやる
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/getaddrinfo.3.html
文字通りの紐づけなら>>142が言うようにDNSの話だからシステム管理者なりに聞いてくれ
てか、まずOS書いてくれ
> ドメイン名IPアドレスの紐づけ
紐づけと言うか解決はgetaddrinfo()でやる
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/getaddrinfo.3.html
文字通りの紐づけなら>>142が言うようにDNSの話だからシステム管理者なりに聞いてくれ
てか、まずOS書いてくれ
144unko (ワッチョイ eab9-21ac)
2022/01/30(日) 09:28:39.21ID:ft1MsLjp0 >>140
ありがとうございます
構造体のポインタを宣言してるのでその表現が正しそうですね
以前の課題だと構造体のメンバのポインタに配列を割り当てていたのでそれと同じように何も考えないでアロー演算子でアクセスしちゃってました
ありがとうございます
構造体のポインタを宣言してるのでその表現が正しそうですね
以前の課題だと構造体のメンバのポインタに配列を割り当てていたのでそれと同じように何も考えないでアロー演算子でアクセスしちゃってました
145デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/30(日) 10:55:49.17ID:qcbJpmhr0146デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/30(日) 11:46:45.94ID:qcbJpmhr0 VSやった・・・
147デフォルトの名無しさん (ドコグロ MMae-YJKT)
2022/01/30(日) 12:38:44.79ID:x0r2XrqVM VSに2021はない…
148デフォルトの名無しさん (ワッチョイ eaad-dw97)
2022/01/30(日) 15:19:39.90ID:wVIChEm/0 >>134
33行目と34行目は入れ替えないと構造体の配列のメモリ確保が一つ分少なくなる。
33行目と34行目は入れ替えないと構造体の配列のメモリ確保が一つ分少なくなる。
149デフォルトの名無しさん (ワッチョイ eaad-dw97)
2022/01/30(日) 15:27:39.02ID:wVIChEm/0 >>141
ソケットで connect() する前には接続先アドレスが分かっている必要があるが、
そのアドレスを調べるのは connect() 前のどの時点でやっても良い。
というか後々ソケットのconnect()で利用するかどうかとは無関係に調べて良い。
ソケットで connect() する前には接続先アドレスが分かっている必要があるが、
そのアドレスを調べるのは connect() 前のどの時点でやっても良い。
というか後々ソケットのconnect()で利用するかどうかとは無関係に調べて良い。
150デフォルトの名無しさん (ブーイモ MM3e-4vpr)
2022/01/30(日) 19:53:38.68ID:F7MhehSXM このスレの猛者が書く>>134の課題ってどんなコードになるんやろ?
151デフォルトの名無しさん (テテンテンテン MM3e-StUm)
2022/01/30(日) 21:12:41.91ID:olbUxhsiM 初級クラスであっさり書ける
152デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/31(月) 16:42:11.29ID:uGjzp6vA0 VisualStudioをつかっています。
_MSC_VER
これって(マクロ?)VSのバージョンを表す定数を返すと言うことで間違いないでしょうか?
_MSC_VER
これって(マクロ?)VSのバージョンを表す定数を返すと言うことで間違いないでしょうか?
153デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/31(月) 16:56:08.70ID:uGjzp6vA0 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif
これの意味がよくわからないのですが
(_MSC_VER)というマクロが使えて
かつ
その値が1200以上であるなら
#endifまでをコンパイルする。
# pragma onceはこのコードが乗っているファイルと同名のファイルが
既にインクルードされているならこのファイルをインクルードしないと言うことで
合っているでしょうか?
# pragma once
#endif
これの意味がよくわからないのですが
(_MSC_VER)というマクロが使えて
かつ
その値が1200以上であるなら
#endifまでをコンパイルする。
# pragma onceはこのコードが乗っているファイルと同名のファイルが
既にインクルードされているならこのファイルをインクルードしないと言うことで
合っているでしょうか?
154デフォルトの名無しさん (スップ Sdea-8U/q)
2022/01/31(月) 17:32:45.71ID:eqy2NGbAd 合ってる
https://docs.microsoft.com/ja-jp/cpp/preprocessor/predefined-macros?view=msvc-170
VisualStudioの1200以降の環境ならごにょごにょするって時に使う
アンダーバー+大文字で始まるマクロ(変数も)はコンパイラ側で定義するので
勝手に定義してはいけない
https://docs.microsoft.com/ja-jp/cpp/preprocessor/predefined-macros?view=msvc-170
VisualStudioの1200以降の環境ならごにょごにょするって時に使う
アンダーバー+大文字で始まるマクロ(変数も)はコンパイラ側で定義するので
勝手に定義してはいけない
155デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/31(月) 17:46:24.93ID:uGjzp6vA0 ありがとうございます。
メンタルやられて退職してしまったので、のんびりとブースト読んでいきます。
メンタルやられて退職してしまったので、のんびりとブースト読んでいきます。
156デフォルトの名無しさん (ワッチョイ a569-26/q)
2022/01/31(月) 18:19:27.99ID:JSQ8RYi00 自前でユニークな識別子考える必要のないインクルードガードがあるなら
そっち使ったほうが間違いないしね
そっち使ったほうが間違いないしね
157デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/31(月) 18:47:08.25ID:uGjzp6vA0 ヘッダファイルの先をたどって行ってよくわからなくなったのですが
ヘッダファイルが全部コメントアウトされているのですが
これはインクルードするときにコンパイラに無視されますよね?
boost/config/user.hppをインクルードするときに最初にインクルードしますって
コメントして書かれてあるんですけど、使うかもしれないから一応置いておいているのでしょうか?
それとも//を外してコンパイルすることが出来るのでしょうか?
ヘッダファイルが全部コメントアウトされているのですが
これはインクルードするときにコンパイラに無視されますよね?
boost/config/user.hppをインクルードするときに最初にインクルードしますって
コメントして書かれてあるんですけど、使うかもしれないから一応置いておいているのでしょうか?
それとも//を外してコンパイルすることが出来るのでしょうか?
158デフォルトの名無しさん (ワッチョイ 6624-21ac)
2022/01/31(月) 19:08:10.67ID:uGjzp6vA0 もしかしてその名前のファイルがインクルードされているかが重要で、
インクルードする中身は関係ない的な感じでしょうか?
インクルードする中身は関係ない的な感じでしょうか?
159デフォルトの名無しさん (ワッチョイ d612-piVT)
2022/02/13(日) 15:26:31.67ID:SDlFynth0 C言語において配列のリテラルはchar型(文字列)以外存在しないのでしょうか?
例えば以下のようにchar型ポインタを初期化すると、リテラル値"test"の先頭アドレスがstrに格納されると思います。
char *str = "test";
ですが、これを次のようにint型にするとエラーになってしまいます。
int arr = {10, 20, 30};
これは{10, 20, 30}が配列を表していないということでしょうか?
例えば以下のようにchar型ポインタを初期化すると、リテラル値"test"の先頭アドレスがstrに格納されると思います。
char *str = "test";
ですが、これを次のようにint型にするとエラーになってしまいます。
int arr = {10, 20, 30};
これは{10, 20, 30}が配列を表していないということでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【テレビ】25年ぶり復活「炎のチャレンジャー」南原清隆&菊池風磨がMC 懐かし「電流イライラ棒」も [湛然★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 千葉県民だけどなんか地震あったらしいな
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 高市総理、睡眠時間30分😢
- 秋田大学のホームページがつながらなくなって1日以上経つのだが
- 【速報】高市早苗、起床 [779938112]
- 共産党議員「日本は中国を侵略した歴史がある」→ネトウヨ「そんな歴史は無い!捏造するな!!国家侮辱罪で逮捕だ!!!」 [314039747]
