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


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

C言語なら俺に聞け 156



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

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言語なら俺に聞け 155
https://mevius.5ch.net/test/read.cgi/tech/1589120427/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

877 名前:844 mailto:sage [2021/05/31(月) 09:25:18.02 ID:etoumxTf0.net]
「走れメロス」を要約しろとか、「ドラゴン桜」の国語でやってた

友達を信じて待つ

878 名前:844 mailto:sage [2021/05/31(月) 09:35:25.57 ID:etoumxTf0.net]
「ドラゴン桜」では、

国語が出来ない・読解力が無いと、
題意を勘違いして、求められる回答を書けないなど、

すべての教科の点数が下がるから、国語が重要!

879 名前:デフォルトの名無しさん [2021/05/31(月) 09:51:02.68 ID:Tm9sROGBF.net]
ドラコン櫻で教えてるのは「受験のテクニック」であって
論理学ではない
所詮漫画
テストの点は取れるようになるかも知れないが実際馬鹿な公務員が増えただろ?

880 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 09:53:41.48 ID:O9N9c2eG0.net]
そうなんだよな
塾とかの競争原理で実績を出さにゃならんから
本当の実力とは違う点数の取り方ってのがある

881 名前:844 mailto:sage [2021/05/31(月) 12:53:27.36 ID:etoumxTf0.net]
漫画だけど、塾を取材して、そのやり方を書いてる

例えば、塾では問題を解かない。
解いたり考えたりする時間が無駄だから

問題のパターンを教える。
1つの問題を解いている時間で、10個以上の問題のパターンを覚えられる

YouTube で有名な、雑食系エンジニア・KENTA のサロンと同じ。
学校・会社を取材して、必要な技術を選んでいる

Ruby on Rails 初心者用コースに、
Linux, Docker Compose, Node.js(Webpack, Babel), Bootstrap
VSCode(Remote Container, WSL2 ならRemote WSL), Heroku, CircleCI、データベース

Docker Composeが出来ないと、採用されませんよとか。
考える要素などない。
競争に勝つ、勉強をしたか・してないかだけ

882 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 12:56:00.90 ID:QwUa5xlW0.net]
>>873
テストの点すら取れない真のバカよりはずっとずっとマシだよ

883 名前:デフォルトの名無しさん [2021/05/31(月) 13:21:04.29 ID:BBpqu8AM0.net]
真のバカはテストの点のみならず両方ダメだから文字通りに「ずっとマシ」だろうけど
テストの点がとれない頭のいい奴を排除してしまうのが最大の問題だ
こういう場合は「(テストは)無い方がいい」になる
排除するのが目的なら真のバカは両方ダメだから排除できる

884 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 13:59:08.86 ID:QwUa5xlW0.net]
>>877
こと公務員についてのみ言うなら・・・
テストの点が取れないバカは不要だし
テストの点が取れるバカはハサミと同じく普通に使いでがある
テストの点が取れない天才は取りこぼしても大勢に影響はない

Cプログラマにはテストの点が取れない天才はいないので大丈夫

885 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 14:18:39.01 ID:rigi+WDl0.net]
学校の試験は、出題者の意図を読み取り期待する回答を書く能力を調べること
だから、社会に出てからその能力が役に立つ分野は限られている



886 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 14:46:22.19 ID:O9N9c2eG0.net]
試験で試すことのできる能力と
本当に必要な能力に「ズレがある」ってだけの話を
まったく違うと拡大解釈して
現実味のない極論を始める軽率なやついるよな

887 名前:デフォルトの名無しさん [2021/05/31(月) 14:46:25.43 ID:BBpqu8AM0.net]
テストと現実が乖離しまくって大勢に影響出まくってんのが現状じゃないの

『天才』まで行かなくても『頭のいい奴』ていどでも
「テストの点が取れないちょっと頭のいいやつを取りこぼしまくると大勢に影響が出る」

そして一般大衆の頭の中では「テストの点が取れない⇒バカである」になる
『テストの点が取れる○○はハサミと同じく普通に使いでがある』このパターンと見分けがつかないからな
○○に何が入ろうがバカと判断されてしまい鼻毛切り程度の小さな仕事しか回ってこなくなる

888 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 15:00:06.82 ID:O9N9c2eG0.net]
どう乖離してるのか具体的に言えるか?

889 名前:デフォルトの名無しさん [2021/05/31(月) 15:10:57.39 ID:BBpqu8AM0.net]
ズレがある=乖離してる、でしょ
すると、ズレがデカくなりすぎる=乖離しまくってる、になる

そしてズレがあると現実に影響が及ぶ

890 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 15:35:06.23 ID:O9N9c2eG0.net]
ほらな
抽象的なことしか言えない
案の定ってやつ

891 名前:デフォルトの名無しさん [2021/05/31(月) 17:11:14.35 ID:dxZCxWYyF.net]
こっちの方が面白い
https://www.youtube.com/watch?v=2hf105qkx38

892 名前:デフォルトの名無しさん [2021/05/31(月) 17:12:54.07 ID:BBpqu8AM0.net]
ズレ=乖離だよ

ズレがありすぎるから問題なんでしょ
ズレがありすぎるのはまったく違うのとほぼ等しい
特に拡大解釈ではない

893 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 20:09:39.07 ID:QwUa5xlW0.net]
>>881
>テストの点が取れないちょっと頭のいいやつ
がどれだけいるのか定量的に教えてください
できれば、とりこぼしまくって大勢に影響が出た事例についてもお願いします

894 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 05:51:42.02 ID:P/S2+Nob0.net]
具体的に例を挙げろつってんの
ズレだの乖離だのの言葉の定義ではなく

895 名前:デフォルトの名無しさん [2021/06/01(火) 11:04:18.90 ID:kkYAvrn40.net]
>>878で「大勢に影響はない」と言い切ったのはオレじゃねーぞ
お前だぞ



896 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 12:08:12.15 ID:P/S2+Nob0.net]
具体的に例を挙げろ
余計な無駄口は聞こえねえ

897 名前:デフォルトの名無しさん [2021/06/01(火) 13:44:16.89 ID:kkYAvrn40.net]
ズレてるとか言ったのもオレじゃねえからな
>>880

898 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 15:23:06.69 ID:Dbf622Mk0.net]
出題者の意図を読み取り、期待する回答を書くのは、
社会のすべての事に関して重要

理解力・意思疎通・説明能力

これが無いと、客の意味を取り違えたりする。
ちょっとした技術自慢だけで、実は役に立たない典型的な馬鹿

技術自慢は転職でも、最も嫌われる

意思疎通できない香具師とか、
熱い志がないとか、その会社の製品・事業に興味がないけど、
技術自慢だけしに来る香具師

899 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 16:31:59.27 ID:P/S2+Nob0.net]
>>891
具体的に例を挙げろ
余計な無駄口は聞こえねえ

900 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 17:24:06.49 ID:aPzpXp8H0.net]
>>889
無いを挙げるのは悪魔の証明になるので
影響があった事例を教えて

901 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 18:04:43.83 ID:qeHvspwIM.net]
言い出しっぺはとっくにいなさそうだしこの話もう終わりにすれば?

902 名前:デフォルトの名無しさん [2021/06/04(金) 01:41:15.92 ID:n2NTEjZ40.net]
>>852
#include <stdio.h>

int main()
{
 puts("ぷ");

 return 0;
}

903 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 01:43:19.30 ID:oNV2u1VT0.net]
なぜゼロを固定的に返すのか。

904 名前:デフォルトの名無しさん [2021/06/04(金) 01:54:39.72 ID:n2NTEjZ40.net]
>>897
わかった。君だけは他の値を返すことを許す。

905 名前:はちみつ餃子 mailto:sage [2021/06/04(金) 01:55:33.20 ID:Xsuyfl+R0.net]
>>897
main で 0 または EXIT_SUCCESS を返すと
成功終了であることをホスト環境に (処理系定義の方法で) 通知するという仕様になってる。

ちなみに main に限っては return 文を省略すると 0 を返したことになるので
書きたくなければ省略してもいい。



906 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 02:05:38.62 ID:3rxFsIot0.net]
身は出しちゃ駄目

907 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 02:19:44.39 ID:n50ApA7d0.net]
>>899
あったなあ、そういう仕様。
main()では必ずexit(0)するコードとかあったっけ…

908 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 02:28:56.87 ID:3rxFsIot0.net]
exit()はmain以外でも使えるから便利w

909 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 02:29:12.39 ID:oNV2u1VT0.net]
>>896
なぜputs()のエラー判定をしないのか。

910 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 02:32:02.03 ID:n50ApA7d0.net]
>>902
やるな、ってw
longjump()使うとかせいw

911 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 04:19:06.21 ID:bj0HIe9W0.net]
longjmpのほうがよっぽどないわー

912 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 10:54:44.43 ID:n50ApA7d0.net]
>>905
まだまだ経験が足りんな

913 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 13:19:20.87 ID:o4J1slTs0.net]
inf main(void)

914 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 13:33:17.16 ID:VPG/eawh0.net]
フラグを返して呼び出し直後でif文、またフラグを返して、の繰り返しが
今まで何やってたんだろうというくらい、すっきりする

915 名前:はちみつ餃子 mailto:sage [2021/06/04(金) 14:38:58.11 ID:Xsuyfl+R0.net]
C++ の例外送出の実装方式にはいくつか種類があるけど、
sjlj と呼ばれる方式は setjmp/longjmp の略で C の setjmp と longjmp と同じことをしている。
(sjlj は移植性はあるがかなり遅いので実際には廃れ気味。)
逆に setjmp と longjmp で例外の真似をするという発想もわからんでもない。

ただなぁ、例外は例外で色々と問題をかかえているし、
後発の言語である Go や Rust がエラーを返却値で返す方式に回帰しているのを見ると、
こういうのでいいんだよこういうので……と近頃は思うようになった。



916 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 21:29:01.37 ID:VPG/eawh0.net]
C++の例外はイケてない
俺はそこそこのC++loverのつもりだが
ここはどうにも愛せない

C++98の動的例外指定をやめてnoexceptにしたおかげでマシにはなったが
まだまだ膿が出し切れてない

もうexceptionやめてnested_exceptionだけに絞った方がいいんじゃないかという気がしてる
あれこそ単一継承教の害悪の典型だろ

917 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 22:27:18.41 ID:n50ApA7d0.net]
>>909
まあその辺の考え方はわからんでもないけどね
ただ、一度longjmp()慣れたら、はっきりいって違和感はないし。
そもそもあちこちでexitするとか、それは昔のIBM系で悪名高い、
おかしくなったらABENDってのと何が違うんだよ、と思ってしまうので
それを考えるとね、exit()するくらいなら、longjmp()で制御戻して
出口一つにしとくようにしようよ、と思うわけさ。
問題って言っても、それこそANSIの最初の標準からあるわけだし。

918 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 22:51:54.40 ID:n50ApA7d0.net]
あと、もう一つメリット。
デバッガで動きを追うときに必ずsetjmp()の後ろにブレークを張っておく、と。
そすると、おおぅ、というような動きで異常終了とかでも、プログラムは落ちないから
グローバル変数くらいは確認できるw

919 名前:デフォルトの名無しさん mailto:sage [2021/06/04(金) 23:18:26.41 ID:HbomffeSM.net]
それはexitにブレーク貼れば同じことできるのでは?

920 名前:デフォルトの名無しさん [2021/06/05(土) 16:53:19.77 ID:lg0pCfQ90.net]
>>903
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /

921 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 09:53:00.73 ID:ZY57P3KvM.net]
BSD, macOS, Linuxで動くgets_sの模範的実装下さい。

922 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 10:02:19.40 ID:uVO5juz10.net]
C++ならtemplate <typename charT, int N> charT* gets(charT (&ary)[N]);と
従来の使い方をそのまま残してサイズ渡せるんだけどな

923 名前:デフォルトの名無しさん mailto:sage [2021/06/12(土) 11:53:46.28 ID:3zqNVH/1M.net]
BSP

924 名前:デフォルトの名無しさん mailto:sage [2021/06/12(土) 18:43:44.02 ID:QmJfg8OWF.net]
res しない自由

925 名前:デフォルトの名無しさん mailto:sage [2021/06/14(月) 20:39:15.79 ID:b2JLFDmD0.net]
C言語クイズ

void f(char **p) {
printf("%c\n", **p);
}

int main(void) {
char s[100];
f(&s);
return 0;
}

↑のコードは合法か否か?



926 名前:デフォルトの名無しさん mailto:sage [2021/06/14(月) 21:11:18.60 ID:zK/HfdvT0.net]
>>919
違法です

927 名前:デフォルトの名無しさん mailto:sage [2021/06/14(月) 21:28:44.78 ID:QzrjrzJVM.net]
実行犯は逮捕されます

928 名前:デフォルトの名無しさん [2021/06/14(月) 22:16:38.04 ID:q3ZquDHG0.net]
法的にはアレだが感情的には(ry

929 名前:デフォルトの名無しさん mailto:sage [2021/06/14(月) 22:43:48.58 ID:JlQ40LV2a.net]
>>919
行けそうな気がするけどダメなのか
char s[100];
じゃなくて
char *s = "abc";
ならオッケーなんだよね

930 名前:デフォルトの名無しさん [2021/06/14(月) 23:17:08.16 ID:stHhaeqd0.net]
f() は char **p を受け取るようになってるからな。
p が指す先の *p が char * 型で、更にその先の **p が char 型になる。

931 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 00:41:45.66 ID:uIngvlIz0.net]
>>920-923
正解です

>>924
コンパイラ通してみるとわかる
ちなみに俺は今日までこの仕様を知らなかった( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \

932 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 06:59:43.45 ID:FhuU/vlv0.net]
そもそも初期化されていない領域へのアクセスがアレなのでは

933 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 07:34:01.16 ID:d2euf9Bx0.net]
未だにchar**とchar(*)[100]の区別がつかないやつがいるのか

934 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 07:39:05.57 ID:ul7dDyuz0.net]
未初期化で不定なポインタではなく
指し先の実体が未初期化なだけなのでセーフということにしたい

935 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 07:51:57.42 ID:d2euf9Bx0.net]
union
{
char s[100];
char *t;
} u;
char **p;
p = &u.t;
printf("%c\n", **p);
とやってるのと同じで
*pつまりtが不定なのに逆参照しちまってるじゃねえか



936 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 08:28:39.63 ID:WH9TaISq0.net]
あれ? あれ?

937 名前:デフォルトの名無しさん [2021/06/15(火) 09:50:49.77 ID:Pt7e5czla.net]
>>929
違う。

938 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 10:26:31.47 ID:d2euf9Bx0.net]
>>931
何が?

939 名前:デフォルトの名無しさん [2021/06/15(火) 14:55:22.33 ID:dTl1pSLYF.net]
じゃあ別の問題
char s[100];
のとき
char *p = s; は ok
char **q = &s; は?

940 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 15:02:32.98 ID:d2euf9Bx0.net]
ダメに決まってんだろ
別の問題じゃねえじゃん
同じこと聞いてんなよ

941 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 15:03:48.90 ID:d2euf9Bx0.net]
通せるコードが知りたいの?
char (*q)[100] = &s;
ほれ

おまえさんがやりそうな
char **q = (char**)&s;
はコンパイルは通るが○はやれないよ

942 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 16:23:49.89 ID:Ggb59cAP0.net]
◯とか×とかの恣意的な答えじゃなくてじゃなくて仕様書読めないのがここの限界だよな
オレもだけど
未定義動作なんて又聞きでしかしらねぇや

943 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 16:43:11.36 ID:uIngvlIz0.net]
仕様書読んでる人なんか沢山いたじゃんこのスレ
今はいないの?

944 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 16:43:19.15 ID:d2euf9Bx0.net]
このへんを理解するのに規格票なんか読んでたら却って時間かかるよ
規格票は初心者が読むようにはできてないから

それよりポインタの基本をしっかり押さえていくと自然に答えに行き着く
実際、俺がそうだった
じっくり真剣な考察がいるからテキトーこいてるうちはわからない
いわばテキトーセンサーだ

945 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 16:43:29.10 ID:Zky1caEs0.net]
コンパイルで、警告が出るだろ
右折禁止って書いてあるところ無理に右折するから、捕まる



946 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 17:28:08.27 ID:Zky1caEs0.net]
配列sに初期値を入れておかないと表示出来ません
int main(void) {
 char s[100]={'a'};
 char *p=&s[0];

 f(&p);
 return 0;
}

947 名前:デフォルトの名無しさん mailto:sage [2021/06/15(火) 22:57:25.73 ID:v+13MMUQa.net]
配列とポインタは交換可能な場面が多いけど、結構融通が利かないことが多いですね
そもそもの >919 は定数の s を変数に適用しようとするからダメなのかな

しばらく C をやってないから、すっかりピンとこなくなってしまった
そもそも、こんな紛らわしい、クイズになるような記述はしないけど…

948 名前:デフォルトの名無しさん mailto:sage [2021/06/16(水) 00:39:49.95 ID:QUFt1TkX0.net]
sのアドレスを関数に渡した場合は、
受けとった側がこのアドレスをchar型の要素数100の配列として操作する必要がある。
これは関数f()のプロトタイプである、ポインタのポインタとは違う物である。
コンパイルしたときの警告をよく読んでみよう。

949 名前:デフォルトの名無しさん [2021/06/16(水) 16:30:37.87 ID:uJQ6HHCXF.net]
char s[100];
のときの
s と &s[0]
上の二つと &s の違い

950 名前:デフォルトの名無しさん mailto:sage [2021/06/16(水) 20:00:03.68 ID:kgg3yKk+0.net]
アセンブラ「?」

951 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 02:32:09.07 ID:JsrG75zva.net]
>>919
語弊があるかもしれないけど、
関数 fは charへのポインタの配列(ポインタ)を受けようとしていて、
呼び出し側はcharの配列への参照(ポインタ)を
渡そうとしているんだよね

952 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 11:15:04.23 ID:SWOKbVD80.net]
char **p は 「charへのポインタの配列」 ではないよ

int main(void) {
 char s='a';
 char *p=&s;

 f(&p);
 return 0;
}

953 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 11:32:48.85 ID:qVo1n1YK0.net]
ポインタ=配列と思い込んでいるときの症状だな
char s[100];
char *p = s;
assert(sizeof s != sizeof p);

954 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 12:21:59.90 ID:u4WNkp++0.net]
C言語には一応配列型があるんだっけ?
ほとんどポインタと同義で扱えるから分からんだけらしいが

955 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 12:27:26.73 ID:PisvSOwJa.net]
>>946
その通りです
なので、語弊があるかもと書きました

main の第2引数を
char *argv[]
char **argv
のいずれにもできるアレです
Cには配列型はないので



956 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 12:34:26.88 ID:qVo1n1YK0.net]
> Cには配列型はないので

ある!
char s[100];
これが配列型だ

957 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 12:55:46.07 ID:PisvSOwJa.net]
たしかに配列ですけど、配列型なのかな

自分もちょっと理解があやしいので…
誰か男の人来て〜!!

958 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 13:09:37.10 ID:qVo1n1YK0.net]
「型」とは何だと思う?
こういうのは型で、こういうのは型じゃない、という境界を示せるか?

959 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 14:03:32.36 ID:4qObO6qj0.net]
rui_ueyamaのコンパイラ入門だと配列型とポインタ型は別々だって言ってたよ

960 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 14:06:34.50 ID:qVo1n1YK0.net]
951が言いたいのはこういうことか?

typedef char T[100];
T s; //これなら型だ
T s[100]; //これは型なのかな

961 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 15:31:45.57 ID:YvA5lG3W0.net]
型って言うと普通はintとかfloatだよね
配列型っていうか「int型の配列」と表現することはあるけど

962 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 15:48:44.73 ID:Cedau++pM.net]
基本型(数値型と文字型)と集成体型(配列と構造体)とポインタ型

963 名前:デフォルトの名無しさん [2021/06/17(木) 16:05:49.23 ID:LpiEWNiEM.net]
型はintとcharとfloatとdouble等
配列はその型を[100]みたいに指定した固定数だけ宣言して使えるようにしたもの
ポインタは指定した型のメモリ上の場所だけを指し、*allocでサイズが変えれる
配列もメモリの場所を示すポインタで参照はできるがサイズは固定

で覚えた

964 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 16:13:28.27 ID:qVo1n1YK0.net]
>>955
キーワードのみで指定される型は基本型(basic type)だ

6.2.5 型 オブジェクトに格納した値又は関数の返す値の意味は,それをアクセスするのに使われる式の型(type)によって決定する。(オブジェクトとして宣言された識別子は最も単純な式とし,その型は識別子の宣言において指定された型とする。)型は,オブジェクト型(object type)(オブジェクトを完全に規定する型),関数型(function type)(関数を規定する型),及び不完全型(incomplete type)(オブジェクトを規定する型で,その大きさを確定するのに必要な情報が欠けたもの)に分類する。

965 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 13:25:25.10 ID:askuiBap0.net]
>>958
なるほど



966 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 14:20:34.01 ID:askuiBap0.net]
あ、ほんとだ
規格書見たら普通に配列型と書いてあるね
知らんかった
ネットで検索しても「配列型」は引っかからないけど

967 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 14:36:30.74 ID:askuiBap0.net]
>配列型(array type)は,要素型(element type)と呼ぶ特定のメンバオブジェクト型をもつ空でないオブジェクトの集合を連続して割り付けたものを表す(36)。配列型は,その要素型及び配列の要素の個数によって特徴付ける。配列型はその要素型から派生されるといい,要素型がTの場合,配列型は“Tの配列”と呼ぶ。要素型から配列型を構成することを“配列型派生”と呼ぶ。

「Tの配列」という表現は「配列型」と同義なのか、勉強になった

968 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 15:24:35.28 ID:AVf6Ht590.net]
配列が型でなければ、sizeof int[4]とか、(char (*)[4])ptrとか書けないからね

969 名前:951 [2021/06/19(土) 00:09:10.43 ID:zB4v1zpja.net]
では、cには文字列型があるといえるのかな

970 名前:デフォルトの名無しさん [2021/06/19(土) 00:14:04.98 ID:MQWrKSb70.net]
関数の引数で

void func(char s[][10])

なんて書き方をすると配列型をちょっと実感できる。

971 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 00:14:26.03 ID:8xkixJIf0.net]
>>963
charの配列を文字列として扱うよ

972 名前:951 mailto:sage [2021/06/19(土) 00:20:12.06 ID:zB4v1zpja.net]
いや、規格書に書いてあるのだから、私の間違いでした
すみませんでした

973 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 00:48:51.22 ID:AhXAE8oj0.net]
NUL終端していないchar配列はただの配列

974 名前:デフォルトの名無しさん [2021/06/19(土) 05:43:30.69 ID:MQWrKSb70.net]
飛ばない豚はただの豚

975 名前:デフォルトの名無しさん [2021/06/19(土) 17:04:29.32 ID:zDrgWeBeF.net]
void func(char s[][10])
は嫌い
void func(char (*s)[10])
じゃいかんの



976 名前:はちみつ餃子 mailto:sage [2021/06/19(土) 17:34:38.67 ID:/f53/cxR0.net]
>>969
意味は同一。
仕様上の意味付けとしては後者がまずあって
前者はその構文糖という位置づけ。

977 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 17:54:37.68 ID:BH9bYKW90.net]
初心者を救済すべく用意された構文糖が
結果的に初心者を陥れる陰険な罠になっているという皮肉

978 名前:デフォルトの名無しさん mailto:sage [2021/06/20(日) 06:40:26.90 ID:vSgOvpHd0.net]
少なくともCのシンタックスシュガーは熟練者がタイプ数を減らすためのものであって初心者を楽させるものではない気がする

979 名前:デフォルトの名無しさん [2021/06/21(月) 15:18:17.55 ID:os4CEfZ3F.net]
こんなところでCが中途半端に出来るだけが自慢の専門卒みたいな連中に尋ねるよりも
大学の先生かチューターの院生に尋ねた方がいいだろう
進みたい研究室があればそこに行って訊くと

980 名前:良い []
[ここ壊れてます]

981 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 20:27:45.83 ID:yU7HyP9W0.net]
院生以下のゴミw

982 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 23:06:35.04 ID:jHz8GYW10.net]
// b.c
int b[] = {123, 456};

// a.c
#include <stdio.h>

int a[] = {123, 456};
int main()
{
  extern int *b;
  printf("val b\n");
  printf("%d\n", *(b + 1));

// printf("val a\n");
// printf("%d\n", *(a + 1));

 return 0;
}

こういう分割ソースをコンパイル、リンクして実行すると、何も表示無しで終了する
デバッガー使って実行してみると、SEGVになってる

分割せず、コメント部分のaの表示だけにすると、動く

院生の人、何故かを説明して

983 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 23:10:51.91 ID:imPHrgSTa.net]
こういうの、昔 柴田何某のポインタ本で勉強したけど、みんな忘れたな…

984 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 02:41:53.17 ID:UBIESj0w0.net]
extern int b[];にすると動いたから配列型とポインタ型の違いっぽい

985 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 06:19:00.39 ID:jiZrgPwV0.net]
配列とポインタを混同するなと教えるときの典型的なサンプルだね



986 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 22:30:25.89 ID:dO7B5XH7a.net]
外部りんけーじだと、bのメモリに配置されているのが値なのかポインタなのか分からないからかな
この場合、使用側はbに配置されたのがポインタと決めつけてるけど、実態は値だから?

987 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 00:13:40.21 ID:4uPMP2M7M.net]
int b[] = {123, 456};
*b で期待されるのは b=&123;
b[] で期待されるのは b[2]={123,456}
b[]の中身をスタックに積んだ後に*bの場合必要ないからextern更新して無いんじゃね?

988 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 05:17:30.22 ID:m16dmNKT0.net]
現象としてはコンパイル後のアセンブリを見ればいいけど, 一般論としてはODR違反だからどう扱おうがコンパイラの自由だとしか

989 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 06:27:58.72 ID:rIfoeFmJ0.net]
>>980
ここはCスレなのでCで表現してくれ
オレ語じゃわからん

990 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 12:05:27.59 ID:qvRJvNKF0.net]
>>982
アホは無理して答えなくていいぞ

991 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 12:26:06.31 ID:5TaXVwksM.net]
extern int *b; じゃスタックに何も積んだりしないしどう見ても>>980がアホなんですが

992 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 12:32:06.50 ID:OZF9neOD0.net]
>>983
自己紹介乙

993 名前: mailto:sage [2021/06/24(木) 19:56:26.10 ID:i6kIKJxB0.net]
>>980
>&123
お前、何をいっているんだ?
ちゃんと日本語とC言語で記述しろ、馬鹿、死ね

994 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 20:21:39.46 ID:y6Bfeav/M.net]
じゃあ
b&=123;
でお願いしまつ。

995 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 20:45:24.69 ID:alz36GlD0.net]
ビットandしながら代入



996 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 15:41:59.61 ID:rcGmQQfw0.net]
2進で 0111 1011 か
マスクでありそうなパターンだ

997 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 17:37:21.28 ID:+QaNJXlp0.net]
127より4小さい数か

998 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 19:59:22.30 ID:jSzR7q5R0.net]
ビット and ラーン

999 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 23:07:19.68 ID:crztuVLoM.net]
(int)123を.data sectionに置きアドレスを取得する方法。

1000 名前:デフォルトの名無しさん [2021/06/26(土) 02:00:51.59 ID:RjjpcdnV0.net]
int a[] = { 123 };
って初期化すれば a が (int) 123 の入っている先頭アドレスになる。
もちろん *a が作られたわけではないので a に対しては代入できない。
あくまでも a を使おうとすると 123 の入っているアドレスに置き換わるだけ。

1001 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 07:06:52.87 ID:MV3qzcHy0.net]
キャストしなくても元々intだろうが

1002 名前:デフォルトの名無しさん [2021/06/26(土) 14:00:05.06 ID:RjjpcdnV0.net]
気分の問題。

1003 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 09:33:23.09 ID:so+vl3vs0.net]
printf("%d", sizeof (char)123); とやろうとしたら
キャストのカッコがsizeofのカッコと解釈されてエラーになるのな
printf("%d", sizeof((char)123)); ならおkなんだけど
なんだか気持ち悪い

1004 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 10:13:18.97 ID:x/UkG1ge0.net]
>>996
sizeofって括弧なしで使えるの? 知らなかった

1005 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 10:20:43.69 ID:WejOUFlX0.net]
>>996
sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと
まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという
おかしな状態になるのでエラーになったのでは?



1006 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 10:38:03.51 ID:so+vl3vs0.net]
sizeofとキャストはどちらも単項式なので右から結合するはず
にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ
字句解析と意味解析ってことかな

1007 名前:デフォルトの名無しさん [2021/06/28(月) 11:05:48.75 ID:HW6dR9O/0.net]
そもそも
sizeof (char)
だけでいいものをそう記述してるのが気持ち悪い。

1008 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 272日 20時間 24分 19秒

1009 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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