[表示 : 全て 最新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

2 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 12:43:13.14 ID:Ktk9audT0.net]
C2x ドラフト
www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.pdf

3 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 17:06:51.38 ID:yFln3WYH0.net]
規格が一杯あるけれど、普通はどれを使うの?

4 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 18:23:03.37 ID:1RbqwiRd0.net]
>>3
C89=K&R2

5 名前:はちみつ餃子 mailto:sage [2021/12/25(土) 20:24:45.71 ID:SzBCpv2O ]
[ここ壊れてます]

6 名前:0.net mailto: 考え方によるのでどれが普通ということはないと思う。

たとえば C は古いシステムの保守のためと割り切るなら C89 にこだわる理由になるが、
C++ との連携を考えるなら C17 を選択する理由になる。
(C++20 が参照する C の規格は ISO/IEC 9899:2018 のことなので。)

私自身は C99 を基本としつつ C99 がどうしても使えない事情があるなら C89 を選択することはありうるが、
C99 で問題ない場面であえて C89 を使ったりはしない。
C11 以降の機能が各プロジェクトで特に有用で処理系やツールチェインに不安がないならそれを選ぶこともある。
[]
[ここ壊れてます]

7 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 22:11:33.64 ID:UngnJYXc0.net]
C++が使えるならC++でいいと思うんだがな。
C99以降が使えるけどC++が使えない|使っちゃダメなシチュエーションてのがあまり思いつかない。

8 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 22:18:46.07 ID:yFln3WYH0.net]
Linuxカーネル

9 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 22:35:15.30 ID:UngnJYXc0.net]
個々のプロジェクトのポリシーとしてならそれこそPLの好みでいくらでもあるだろうけど。
でもLinuxてC99使ってた?

10 名前:デフォルトの名無しさん mailto:sage [2021/12/28(火) 07:02:41.51 ID:p+qHklGW0.net]
C99か。。。。
変数を途中で定義できたりforスコープは有難いんだけど
そういうのはC++があるからCにはあんまり求めない

わざわざCなときは枯れたところを使いたい
すると半ば無意識にC89になってる



11 名前:デフォルトの名無しさん mailto:sage [2021/12/28(火) 11:07:50.33 ID:3O27DpuF0.net]
途中宣言なんてブロック内でしか使いたくない

12 名前:デフォルトの名無しさん mailto:sage [2021/12/28(火) 11:12:07.15 ID:p+qHklGW0.net]
ん? いや、ブロック内でしかできんだろ

13 名前:デフォルトの名無しさん [2021/12/29(水) 11:02:54.88 ID:gOGJDejA0.net]
1/6までc magazineが1冊55円でセールやってるぞ。

14 名前:デフォルトの名無しさん [2021/12/29(水) 12:26:40.10 ID:TemGM5eX0.net]
>>12
サンクス!

15 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 13:44:32.51 ID:Uqmbe8qT0.net]
アマゾンにあるな。55円か。俺のアマゾンポイントが56なのでポイントで1冊ただで買えるが。うーん。どれを買うか。

16 名前:デフォルトの名無しさん [2021/12/29(水) 13:47:59.87 ID:wwN1RbRp0.net]
消費税が6円必要だぞ。

17 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 13:49:14.80 ID:TemGM5eX0.net]
アマゾンは全部税込み表示だよね?

18 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 13:50:10.27 ID:Uqmbe8qT0.net]
>>15
いや、これ、税込み55円のようだよ。本体50円で消費税5円なのではないかな。
更にアマゾンで Kindle unlimited の人は全部0円。

19 名前:デフォルトの名無しさん [2021/12/29(水) 13:51:51.39 ID:wwN1RbRp0.net]
じゃあ真面目にどれを買うべきか話し合うか。

20 名前:デフォルトの名無しさん [2021/12/29(水) 13:54:15.86 ID:wwN1RbRp0.net]
バックナンバー一覧を見つけた。
https://gist.github.com/tk3/a605e6d39d8309c7ce72e9141d461845



21 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 14:22:36.20 ID:Uqmbe8qT0.net]
全部セットで1万ぐらいで買えたりしたら一々選ばんでいいのだがな。
全部読み切れないとは思うが。(てか今となっては読む価値のない記事が多いかな・・・)

22 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 15:02:06.61 ID:ARRRFsJF0.net]
200冊ぐらいか
11000円で買えるぞ

23 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 16:45:16.84 ID:TemGM5eX0.net]
まだ読んでないkindle本あるのに・・・16冊購入(´・ω・`)

24 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 19:45:04.56 ID:vNNNNQH+0.net]
はるか昔の bit の小話にて人間の「感覚の受信→解釈→意識・自覚」の一連の情報処理にはタイムラグがある、という「受動意識仮説」がすでに提示されていましたが
その小話が載っている bit って何年何月でしたっけ?

意識は幻想か?―「私」の謎を解く受動意識仮説
https://www.youtube.com/watch?v=Ox8gJEIe5Ac

準備運動電位
https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%B3%E3%82%B8%E3%83%A3%E3%83%9F%E3%83%B3%E3%83%BB%E3%83%AA%E3%83%99%E3%83%83%E3%83%88

25 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 22:11:44.70 ID:Uqmbe8qT0.net]
検索していたらこんなページ見つけた。しかしここでの販売は6冊単位で600円なので1冊100円。

C Magazine セット販売
https://tatsu-zine.com/magazines/cmagazine

26 名前:デフォルトの名無しさん [2021/12/29(水) 22:57:46.13 ID:wwN1RbRp0.net]
C MAGAZINE 2005・2月号 特集2 グラフ理論入門

27 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 23:16:11.26 ID:4vPJ4A600.net]
質問

#include <stdio.h>
int main (void){

char str[100];
int i,j,n,m,a,b;
char A[100];
scanf("%d %d %s",&n, &m, A);

for(a=0;a<n;a++){
j=0;
for(b=0;b<m;b++){
scanf("%s",str);
for(i=0;str[i];i++) {
if(str[i]== *A) {
j++;
}
}
}
printf("%d\n",j);
}
return 0;
}


っていうコードを書いてみたんだけど、思うような出力が出ない
どうすればいいか教えてくださいお願い
以下問題
https://i.imgur.com/6TnIX9K.jpg

28 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 23:17:59.44 ID:4vPJ4A600.net]
問題がうまくはれてなかった
https://i.imgur.com/e5ViyH2.jpg

29 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 00:46:48.51 ID:TgisNlKh0.net]
なんで、N, M, KのKを文字列として受けてるの?

30 名前:デフォルトの名無しさん [2021/12/31(金) 05:03:08.34 ID:4SEvuYeQ0.net]
>>26>>27
paizaの問題って公開しちゃいけないと思ったが、その問題は大丈夫なのか?



31 名前:デフォルトの名無しさん [2021/12/31(金) 05:08:21.26 ID:4SEvuYeQ0.net]
>>26
これって入力は全て数値だから scanf() のフォーマットは全て %d で良い筈だが、何故文字列として受け取ろうとしている個所があるのか?

32 名前:デフォルトの名無しさん [2021/12/31(金) 05:14:19.43 ID:4SEvuYeQ0.net]
>>27
公開しても良い問題だったね。しかも問題のURLをコピーしたりも出来る。
だったら画像貼ってないで素直にURL貼った方が良い。スマホでWi-Fi使わず見てたりしたらパケット余計に使うことになるからね。(だから専ブラではいきなり画像をダウンロードしない設定にしてあったりして、見られる率が下がる)。

URLはこれな。
https://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_for_boss

33 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 09:00:32.53 ID:VTzS4kbc0.net]
とりあえずfgetsとstrtok_rを使って、
一行まるごと読み込んで、読み込んだ一行分の文字列を空白で分割して表示するだけのプログラムを書いてみたらどうかね

34 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 09:38:23.12 ID:AQXYYOVd0.net]
>>30
俺の地元のルールだと、
22 22 22 ...(25回22を選ぶ)
みたいなピックしてkが2だと50ポイントもらえるルールだったから文字列として扱わんといかんかとおもてた

35 名前:デフォルトの名無しさん [2021/12/31(金) 11:20:32.87 ID:2Zk/vij+0.net]
3[山田、山田、佐藤、田中、・・・]
7[・・・]
12[・・・]
というような表を作っておけば良いのでは?

36 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 21:31:16.10 ID:AQXYYOVd0.net]
https://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_sort_boss
これ教えて

37 名前:デフォルトの名無しさん mailto:sage [2022/01/01(土) 00:39:58.19 ID:gOXFnTf60.net]
何が分からんかぐらい書きなよ

38 名前:デフォルトの名無しさん mailto:sage [2022/01/01(土) 01:18:03.81 ID:1OHQMytp0.net]
何がわからんかも分からん
方針もわからん

39 名前:デフォルトの名無しさん mailto:sage [2022/01/02(日) 13:30:00.29 ID:o9R7ffl70.net]
>>35
ソートするだけだよ。
まずは入力を配列変数に貯め込んでそれに対して並べ替えをする。
ソートする部分を自作するのが面倒なら qsort() 使えば良いんじゃないかな。
(この辺はC言語使わない方が楽かも知れないが)

40 名前:デフォルトの名無しさん mailto:sage [2022/01/03(月) 21:40:15.76 ID:qalXVoDK0.net]
入力データの1行目を読みデータ件数を取得する
データ件数にあわせて配列を確保する
(予めMax値の配列を用意するのでも構わない)
2行目から最終行まで順に読み込み、配列に格納する
問題文の財産評価ルールに従いデータをソートする
並び変わったデータを出力する



41 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:33:37.60 ID:soGE7KAW0.net]
文字配列なんですが

char str[] = { 'A', 'B', 'C' };

↑のstrにはnull文字は付加されないという認識で合ってますか?

42 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:39:28.79 ID:XZjVJACa0.net]
('A')

43 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:50:14.25 ID:OD+qNx/80.net]
付加される保証がない、かも

44 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 16:43:04.90 ID:NntPX0Am0.net]
>>40
合ってる
境界調整の結果として'\0'のように見える
詰め物が入る可能性はあるが騙されてはいけない

45 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 16:53:16.90 ID:soGE7KAW0.net]
>>41-43
そうなんですね
ありがとうございました

46 名前:はちみつ餃子 mailto:sage [2022/01/06(木) 16:54:16.61 ID:U9j/lfCJ0.net]
>>40
付加されない。
"ABC" と書いた場合に char 四個ということになるのと違ってその場合には要素が三個の配列と解釈されることが保証される。
つまり str の型を言うなら char[3] ってことね。

ちなみに

char str[4] = {'A', 'B', 'C'};

というように書いた場合 (初期化子に書かれている要素が配列の要素数より少ない場合)
は足りない分は 0 が補われたかのように動作することが保証されるので str[3] には 0 が入ってる。

47 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:05:22.56 ID:OD+qNx/80.net]
分かって使うのは良いけれど
そのまま文字列処理関数に渡すと
困った事が起きるんだよな

48 名前:デフォルトの名無しさん [2022/01/10(月) 23:16:11.54 ID:rD3Qvv+7a.net]
プログラミングで y = 1 / (1 / x) ってやったらどうなるの?
https://mi.5ch.net/test/read.cgi/news4vip/1641823457/

1 名前:以下、5ちゃんねるからVIPがお送りします 投稿日:2022/01/10(月) 23:04:17.072 ID:expyRxlYa
頭のいいコンパイラなら y = x にしてくれるのか?(機械語にするとき)

あっ、ちなみにインタプリタ言語やLLでは普通に t = (1 / x) を計算して y = 1 / t にするだろうそりゃ
うちは自動車メーカーだからな、使ってるのはC言語で、コンパイラは GHS MULTI っていうお前らが知らないコンパイラだよ

49 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 01:08:21.74 ID:Q8SCQHSH0.net]
xが整数ならしてくれないよね
浮動小数点数なら
if (x==0) y=NAN; else y=x;
にしてくれるのかなぁ

50 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 01:38:43.94 ID:2o/IB+MZ0.net]
0除算とかオーバーフローはプログラマが考慮してくれるんじゃないのかな?



51 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 02:04:19.39 ID:Wr4lWyid0.net]
gccなら-ffast-mathを付ければy=xになるはず
ieee754準拠なら変形しない

52 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 08:27:46.21 ID:3vsFi49bd.net]
整数型なら0除算が未定義動作だから変な最適化がかかるかもしれん
x==0 で未定義動作
2回目の割り算で x!=1&&x!=-1で未定義動作

signedなら最終的にy=xになりうる

unsignedならx=-1がありえないのでy=1になるかもしれん

53 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 19:52:42.66 ID:pJ1mRDMY0.net]
整数前提
カッコついてるから (1/x) まで評価してソレを整数化とり得る値は符号付きで-1,0,1,<0割未定義>
その評価値が分母に 分子が 1 の演算で 符号付きで 1,-1,<0割未定義>
ほとんど0割未定義を踏みそう

54 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 20:03:51.62 ID:W/ZD5G+Pd.net]
未定義は「相手せんでいい」だからな

55 名前:デフォルトの名無しさん [2022/01/15(土) 17:45:56.79 ID:MXtcLzFoa.net]
ものにもよるがだいたいはダメだな。
printf()で%.3sみたいなフォーマットにするとかstrncpy()で文字数指定するとかなら大丈夫だろうが。何れにしてもプログラマーが意識してないといけない。

56 名前:デフォルトの名無しさん [2022/01/15(土) 17:47:19.94 ID:MXtcLzFoa.net]
ぐはっ
リロードしても出てこなかった書き込みが沢山出てきた

57 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 13:28:18.74 ID:E45iSBlB0.net]
C言語学び始めたんだけど今のところJavaで自動でやってることをCは明示的にやってるって事くらいしか分からん

Cはガベージコレクタが無いからアルゴリズムを学ぶには最適って聞いたんだがいまいち理解できん
メモリの確保と解放を任意にできることで他と違って何ができるようになる?

58 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 14:08:25.07 ID:H6PAG9rn0.net]
何で?
確保した資源を解放するという当たり前のことを
自動でやってもらうことの何がそんなに大事なの?

当たり前のことがどうなっているのか把握するほうが大事だと思うけど

59 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 14:13:24.52 ID:3oi0BVHh0.net]
別に何も
Cはよく高級アセンブラと言われるくらい低級なもの
JavaはVMで動かす高級なもの
高級なものは低級なもので実現されてるのよ

60 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 14:24:28.62 ID:H6PAG9rn0.net]
マジで意味わからん
何が言いたい?



61 名前:デフォルトの名無しさん [2022/01/16(日) 15:21:59.54 ID:sWhCnDyn0.net]
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内にある二つの引数を・・・
すみませんよくわからないので教えてほしいです。

62 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 15:47:09.71 ID:3oi0BVHh0.net]
>>60
そりゃmain()が呼ばれる時だけど
何が疑問なのかよくわからん
そのadd(int a, int b)もadd(1,2)と呼ばれた時にaに1、bに2が入る
それと同じ

>>59
>58は>56への応答だよ

63 名前:デフォルトの名無しさん [2022/01/16(日) 15:55:52.82 ID:sWhCnDyn0.net]
>>61
ありがとうございます。
c++やり始めたばかりで、初めて__cdeclというものに出会い、
main()に引数が指定されるのも初めて見ました。
__cdeclを調べてみたのですが、よくわかりませんでした。
https://docs.microsoft.com/ja-jp/windows/win32/winsock/complete-client-code
ここのコードに出てきたやつです。
argc, argvこの二つにはどこから来た値がどのタイミングで入るのかがよくわかりません。
サーバー側の方でそれぞれの構造体や関数は一応ですが、調べました。
(ディスクリプタが良くわかんなかったけど部品の形状みたいな感じで覚えました)

64 名前:デフォルトの名無しさん [2022/01/16(日) 15:57:48.95 ID:sWhCnDyn0.net]
main関数が一番最初に読み込まれる関数という風に思っていて、
includeやdefineを済ませた後に一番最初にmainが実行されるのなら、
argc, argvこの二つの変数の値がどうやって決まるのかわからないのです。

65 名前:デフォルトの名無しさん [2022/01/16(日) 16:00:01.63 ID:sWhCnDyn0.net]
今更なのですが、mainを実行するときにmainの中の
ローカルな空の変数(?)を宣言するだけ宣言しといてるとかですか?

66 名前:デフォルトの名無しさん [2022/01/16(日) 17:07:18.79 ID:rX32u5GR0.net]
>>63
OSから引き渡される。普通はコマンドラインの引数をシェルが加工して渡してくる。
OSのない組み込みのようなやつの場合はそのmain()を呼び出すプログラム次第になる。

67 名前:デフォルトの名無しさん [2022/01/16(日) 17:11:54.22 ID:rX32u5GR0.net]
>>64
何を疑問に思っているのかよくわからないが、Javaとか他の言語とほぼ同じでmain()に限らず関数は呼ばれたらそのブロック内でローカル変数のメモリを確保する。(ただしCの場合は宣言だけだと初期化されない)。

68 名前:デフォルトの名無しさん [2022/01/16(日) 17:30:57.83 ID:sWhCnDyn0.net]
>>65
ありがとうございます。
OSからもらってくるのですね。
謎が解けました。

69 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 18:32:43.61 ID:E45iSBlB0.net]
>>57
>>58
自分でメモリの確保と解放を行う事でメモリの仕組みを知れるのは大事なのは分かる

ただgcが動かない事でアルゴリズムとどう繋がるのかがイマイチ分からん
連結リストはメンバを参照して動的配列実現してるけどgcは関係ないと思う
gcが動かない事で何かメリットないん?

70 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 19:07:47.21 ID:8yj7aXgd0.net]
純粋にアルゴリズムを学ぶことが目的ならC以外のぬるい言語のほうが良いのでは?
ただ、考えたアルゴリズムを誰よりも早く動かしたいならCは役立つと思うよ



71 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:55:00.02 ID:qRjB4bc50.net]
純粋に、なら pascal でしょう…
pasca から C へは機械的に書き換えられるから C でもいいでしょうが

それ以上の高級言語になると、例えばソートアルゴリズムの「インプレイス」の概念も有耶無耶になってしまうので、初等アルゴリズムくらいは C で勉強したほうがいいですね

72 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:57:35.96 ID:YLrls7710.net]
メモリーリークなどは、痛い思いをしてでも学ぶ価値はあると思う
根性論ですまん

73 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:58:56.40 ID:uYZKVP770.net]
>>68
プログラマの望むタイミングでGCができるというメリットがある
GCが動くとどうしても遅くなるので
その遅くなると時をプログラムで決めることができる

74 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:05:47.94 ID:YLrls7710.net]
確保と解放はDB扱うときにもあるからね

75 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 00:45:04.90 ID:VBYSAUJW0.net]
rustがCの代替になる理由がメモリ関連のバグが減るからってのはどう言う事?

76 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 00:56:25.55 ID:jU2WrI4n0.net]
オブジェクトは複雑に依存関係が出来る場合もある。
参照 (C 的に言えばポインタ) が残っているのにオブジェクトの寿命が尽きていればダングリングが生じてしまう。
C では寿命の管理をするのはプログラマの責任であって、無効なポインタを使った結果は未定義。
そういうのを静的にチェックしてエラーにしてくれたらありがたいなぁというのを実現したのが Rust 。
そのかわり制約の記述がちょっと面倒くさくはあるんだが、どちらにせよ依存関係の管理は C でもやってたことではあるからね。
Rust で制約を書けないようならたぶん C でもちゃんとメモリ管理できてない。

77 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 02:01:49.66 ID:4l2NkMK40.net]
Ubuntuのgcc9で

size_t i = -100;
printf("%ld\n", i); // -100

と出力されたんですが、なぜsize_tで負数が扱えるんですか?
stddef.hでは

typedef long unsigned int size_t;

になってました
怖いです

78 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 02:09:51.98 ID:jU2WrI4n0.net]
>>76
扱えていない。
printf の書式指定と実際の型に不整合がないようにするのはプログラマの責任で、
それができていないときにどういう挙動になっても知ったことじゃない。

79 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 02:13:20.92 ID:4l2NkMK40.net]
>>77
printfですかなるほど

80 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 02:32:10.74 ID:4l2NkMK40.net]
>>77

あと

size_t n = -100;

if (n == -100) {
puts("-100");
}

これが真になるのは-100がsize_tに暗黙的にキャストされてるせいですかね



81 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 06:34:55.39 ID:J3jxIzMN0.net]
>>68
gcって思考放棄だろ
資源管理の中でメモリだけ後片付けを特別扱いできたからって何ってこと
資源管理にはアルゴリズムがいらないと思うのか?

82 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 08:24:31.68 ID:y6/SFoBh0.net]
>>76
-100は32bit 2の補数表現で0xFFFFFF9Cになる。
これはunsigned longで4294967196に相当し、符号なしのiにはこの値が入ってる。
ただprintfの指定が%ldと符号付きになってるので0xFFFFFF9Cを符号付きで表示したらやっぱり-100になる。

>>79
-100がsize_tに変換されるのではなく、どちらの値域も含めることができるように両辺がlong long intに拡張される。

83 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 08:24:40.15 ID:6BYLlYWJd.net]
>>79
signed longかsize_tかどっちかに暗黙的にキャストされる
-Wallすると警告出るだろうけど

84 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 13:06:53.33 ID:RA8YXgQS0.net]
サイズがおっきい側にあわせて拡張されるけど
拡張の際に符号付で拡張されるかは、拡張される側の型による でいいのかな?
左辺が size_t で 右辺が (__int16)-1 と (unsigned __int16)0xffff とで変わってくる

85 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 19:03:14.06 ID:4l2NkMK40.net]
>>81
なるほど、わかりました
ありがとうございます

>>81-83
比較の計算のために型を合わせるってことですね
納得しましたありがとうございます

86 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:09:27.93 ID:VBYSAUJW0.net]
>>80って>>57
よく分からん話し方が似てる

87 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 07:11:42.98 ID:gNdHIxeHd.net]
おまえさん、匿名掲示板に向いてないな

88 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 11:09:59.27 ID:3tZE3jDgH.net]
#defineの効果を全体に適用させる方法は無いの?
書いてあるヘッダを取り込まなくても

89 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 11:14:24.09 ID:hwIlnS+y0.net]
コマンドラインで指定

90 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:48:47.15 ID:n7chvAG30.net]
>>87
ヘッダに書かないメリットは何?
暗黙の効果があると全体の見通しが悪くなるだけだと思うんだが



91 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 16:57:56.31 ID:JLPh4iSLd.net]
gcc -DUNKO
とかでコンパイル時分岐させるのはよくやる
これで "#define UNKO" 相当

92 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 17:35:43.55 ID:JsGuh7u5K.net]
>>90
細かいツッコミだが、
> これで "#define UNKO" 相当
"#define UNKO 1" 相当な

93 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 18:12:26.02 ID:Eie73JRu0.net]
この問題なんで答え0なん?
難しいhttps://i.imgur.com/TelzwbB.jpg

94 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 19:26:05.14 ID:8odJS2DdM.net]
%rbp の値を pushq でスタックに退避して他の処理をやって popq で下ろしてきてるから最初に入ってた 0 が出てくる

95 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 19:30:17.07 ID:6OdGtD3E0.net]
>92
なんか80286〜80486時代に見たアセンブラと違うorz


適当にググった予想

;レジスタ %rbp、%rbx の値をスタックにコピー
pushq %rbp
pushq %rbx

...

popq %rbx
popq %rbp
;コピーしておいた値を%rbx,%rbpに戻す

呼び出し前と同じ値になるだけだね。

96 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 00:21:23.88 ID:3gUGA9pL0.net]
>>92
0の入った%rbpをpushqして最後にそれをpopqして%rbpに戻しているから。
pushq, popq の数は合っているので他の値にはならない。

97 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 06:05:07.87 ID:mAmuRLc0a.net]
>>89

ライブラリの中なんで書き換えるのはちょっと

98 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 06:13:28.12 ID:mAmuRLc0a.net]
マイコン系のやつでヘッダのインクルードする前に
マクロ定義すれば使うピンを選択できるようになってるはずなんだけど

当然ながら別にコンパイルされるソースの中には効力がないと

99 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:37:29.62 ID:hGKgCtXH0.net]
「マクロ定義すれば使うピンを選択できるようになってる」メーカー提供の何かを使った
自前のライブラリで なんとかしたいと?

それライブラリの設計ミスじゃね?

100 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 12:31:56.24 ID:90hTt9580.net]
日立の悪口はやめろ








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

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

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