!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言語なら俺に聞け 155
https://mevius.5ch.net/test/read.cgi/tech/1589120427/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
C言語なら俺に聞け 156
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 9bb7-/QqT)
2020/09/28(月) 14:41:30.00ID:QxfbhGyV0904デフォルトの名無しさん (ワッチョイ 6953-WP4G)
2021/06/04(金) 02:32:02.03ID:n50ApA7d0905デフォルトの名無しさん (ワッチョイ 1abd-lV5Q)
2021/06/04(金) 04:19:06.21ID:bj0HIe9W0 longjmpのほうがよっぽどないわー
906デフォルトの名無しさん (ワッチョイ 6953-WP4G)
2021/06/04(金) 10:54:44.43ID:n50ApA7d0 >>905
まだまだ経験が足りんな
まだまだ経験が足りんな
907デフォルトの名無しさん (ワッチョイ c602-/VAH)
2021/06/04(金) 13:19:20.87ID:o4J1slTs0 inf main(void)
908デフォルトの名無しさん (ワッチョイ 9d45-hKmE)
2021/06/04(金) 13:33:17.16ID:VPG/eawh0 フラグを返して呼び出し直後でif文、またフラグを返して、の繰り返しが
今まで何やってたんだろうというくらい、すっきりする
今まで何やってたんだろうというくらい、すっきりする
909はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-p9zx)
2021/06/04(金) 14:38:58.11ID:Xsuyfl+R0 C++ の例外送出の実装方式にはいくつか種類があるけど、
sjlj と呼ばれる方式は setjmp/longjmp の略で C の setjmp と longjmp と同じことをしている。
(sjlj は移植性はあるがかなり遅いので実際には廃れ気味。)
逆に setjmp と longjmp で例外の真似をするという発想もわからんでもない。
ただなぁ、例外は例外で色々と問題をかかえているし、
後発の言語である Go や Rust がエラーを返却値で返す方式に回帰しているのを見ると、
こういうのでいいんだよこういうので……と近頃は思うようになった。
sjlj と呼ばれる方式は setjmp/longjmp の略で C の setjmp と longjmp と同じことをしている。
(sjlj は移植性はあるがかなり遅いので実際には廃れ気味。)
逆に setjmp と longjmp で例外の真似をするという発想もわからんでもない。
ただなぁ、例外は例外で色々と問題をかかえているし、
後発の言語である Go や Rust がエラーを返却値で返す方式に回帰しているのを見ると、
こういうのでいいんだよこういうので……と近頃は思うようになった。
910デフォルトの名無しさん (ワッチョイ 9d45-hKmE)
2021/06/04(金) 21:29:01.37ID:VPG/eawh0 C++の例外はイケてない
俺はそこそこのC++loverのつもりだが
ここはどうにも愛せない
C++98の動的例外指定をやめてnoexceptにしたおかげでマシにはなったが
まだまだ膿が出し切れてない
もうexceptionやめてnested_exceptionだけに絞った方がいいんじゃないかという気がしてる
あれこそ単一継承教の害悪の典型だろ
俺はそこそこのC++loverのつもりだが
ここはどうにも愛せない
C++98の動的例外指定をやめてnoexceptにしたおかげでマシにはなったが
まだまだ膿が出し切れてない
もうexceptionやめてnested_exceptionだけに絞った方がいいんじゃないかという気がしてる
あれこそ単一継承教の害悪の典型だろ
911デフォルトの名無しさん (ワッチョイ 6953-WP4G)
2021/06/04(金) 22:27:18.41ID:n50ApA7d0 >>909
まあその辺の考え方はわからんでもないけどね
ただ、一度longjmp()慣れたら、はっきりいって違和感はないし。
そもそもあちこちでexitするとか、それは昔のIBM系で悪名高い、
おかしくなったらABENDってのと何が違うんだよ、と思ってしまうので
それを考えるとね、exit()するくらいなら、longjmp()で制御戻して
出口一つにしとくようにしようよ、と思うわけさ。
問題って言っても、それこそANSIの最初の標準からあるわけだし。
まあその辺の考え方はわからんでもないけどね
ただ、一度longjmp()慣れたら、はっきりいって違和感はないし。
そもそもあちこちでexitするとか、それは昔のIBM系で悪名高い、
おかしくなったらABENDってのと何が違うんだよ、と思ってしまうので
それを考えるとね、exit()するくらいなら、longjmp()で制御戻して
出口一つにしとくようにしようよ、と思うわけさ。
問題って言っても、それこそANSIの最初の標準からあるわけだし。
912デフォルトの名無しさん (ワッチョイ 6953-WP4G)
2021/06/04(金) 22:51:54.40ID:n50ApA7d0 あと、もう一つメリット。
デバッガで動きを追うときに必ずsetjmp()の後ろにブレークを張っておく、と。
そすると、おおぅ、というような動きで異常終了とかでも、プログラムは落ちないから
グローバル変数くらいは確認できるw
デバッガで動きを追うときに必ずsetjmp()の後ろにブレークを張っておく、と。
そすると、おおぅ、というような動きで異常終了とかでも、プログラムは落ちないから
グローバル変数くらいは確認できるw
913デフォルトの名無しさん (ドコグロ MM4e-lV5Q)
2021/06/04(金) 23:18:26.41ID:HbomffeSM それはexitにブレーク貼れば同じことできるのでは?
914デフォルトの名無しさん (ワッチョイ caad-p9zx)
2021/06/05(土) 16:53:19.77ID:lg0pCfQ90 >>903
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
915デフォルトの名無しさん (テテンテンテン MMde-sC8v)
2021/06/06(日) 09:53:00.73ID:ZY57P3KvM BSD, macOS, Linuxで動くgets_sの模範的実装下さい。
916デフォルトの名無しさん (ワッチョイ 9d45-hKmE)
2021/06/06(日) 10:02:19.40ID:uVO5juz10 C++ならtemplate <typename charT, int N> charT* gets(charT (&ary)[N]);と
従来の使い方をそのまま残してサイズ渡せるんだけどな
従来の使い方をそのまま残してサイズ渡せるんだけどな
917デフォルトの名無しさん (ラクッペペ MM7f-Z9bY)
2021/06/12(土) 11:53:46.28ID:3zqNVH/1M BSP
918デフォルトの名無しさん (エムゾネ FF1f-U3V2)
2021/06/12(土) 18:43:44.02ID:QmJfg8OWF res しない自由
919デフォルトの名無しさん (ワッチョイ 93bb-l016)
2021/06/14(月) 20:39:15.79ID:b2JLFDmD0 C言語クイズ
void f(char **p) {
printf("%c\n", **p);
}
int main(void) {
char s[100];
f(&s);
return 0;
}
↑のコードは合法か否か?
void f(char **p) {
printf("%c\n", **p);
}
int main(void) {
char s[100];
f(&s);
return 0;
}
↑のコードは合法か否か?
920デフォルトの名無しさん (ワッチョイ 23da-t88l)
2021/06/14(月) 21:11:18.60ID:zK/HfdvT0 >>919
違法です
違法です
921デフォルトの名無しさん (テテンテンテン MM7f-Nnf8)
2021/06/14(月) 21:28:44.78ID:QzrjrzJVM 実行犯は逮捕されます
922デフォルトの名無しさん (ワッチョイ 7f36-gVNt)
2021/06/14(月) 22:16:38.04ID:q3ZquDHG0 法的にはアレだが感情的には(ry
923デフォルトの名無しさん (アウアウウー Sa67-223K)
2021/06/14(月) 22:43:48.58ID:JlQ40LV2a924デフォルトの名無しさん (ワッチョイ ffad-khlo)
2021/06/14(月) 23:17:08.16ID:stHhaeqd0 f() は char **p を受け取るようになってるからな。
p が指す先の *p が char * 型で、更にその先の **p が char 型になる。
p が指す先の *p が char * 型で、更にその先の **p が char 型になる。
925デフォルトの名無しさん (ワッチョイ 93bb-l016)
2021/06/15(火) 00:41:45.66ID:uIngvlIz0926デフォルトの名無しさん (ワッチョイ 3325-+PDx)
2021/06/15(火) 06:59:43.45ID:FhuU/vlv0 そもそも初期化されていない領域へのアクセスがアレなのでは
927デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/15(火) 07:34:01.16ID:d2euf9Bx0 未だにchar**とchar(*)[100]の区別がつかないやつがいるのか
928デフォルトの名無しさん (ワッチョイ 2301-E0Y3)
2021/06/15(火) 07:39:05.57ID:ul7dDyuz0 未初期化で不定なポインタではなく
指し先の実体が未初期化なだけなのでセーフということにしたい
指し先の実体が未初期化なだけなのでセーフということにしたい
929デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/15(火) 07:51:57.42ID:d2euf9Bx0 union
{
char s[100];
char *t;
} u;
char **p;
p = &u.t;
printf("%c\n", **p);
とやってるのと同じで
*pつまりtが不定なのに逆参照しちまってるじゃねえか
{
char s[100];
char *t;
} u;
char **p;
p = &u.t;
printf("%c\n", **p);
とやってるのと同じで
*pつまりtが不定なのに逆参照しちまってるじゃねえか
930デフォルトの名無しさん (ワッチョイ 1369-tD/8)
2021/06/15(火) 08:28:39.63ID:WH9TaISq0 あれ? あれ?
931デフォルトの名無しさん (アウアウウー Sa67-F5ry)
2021/06/15(火) 09:50:49.77ID:Pt7e5czla >>929
違う。
違う。
932デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/15(火) 10:26:31.47ID:d2euf9Bx0 >>931
何が?
何が?
933デフォルトの名無しさん (エムゾネ FF1f-U3V2)
2021/06/15(火) 14:55:22.33ID:dTl1pSLYF じゃあ別の問題
char s[100];
のとき
char *p = s; は ok
char **q = &s; は?
char s[100];
のとき
char *p = s; は ok
char **q = &s; は?
934デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/15(火) 15:02:32.98ID:d2euf9Bx0 ダメに決まってんだろ
別の問題じゃねえじゃん
同じこと聞いてんなよ
別の問題じゃねえじゃん
同じこと聞いてんなよ
935デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/15(火) 15:03:48.90ID:d2euf9Bx0 通せるコードが知りたいの?
char (*q)[100] = &s;
ほれ
おまえさんがやりそうな
char **q = (char**)&s;
はコンパイルは通るが○はやれないよ
char (*q)[100] = &s;
ほれ
おまえさんがやりそうな
char **q = (char**)&s;
はコンパイルは通るが○はやれないよ
936デフォルトの名無しさん (ワッチョイ 63d5-+PDx)
2021/06/15(火) 16:23:49.89ID:Ggb59cAP0 ◯とか×とかの恣意的な答えじゃなくてじゃなくて仕様書読めないのがここの限界だよな
オレもだけど
未定義動作なんて又聞きでしかしらねぇや
オレもだけど
未定義動作なんて又聞きでしかしらねぇや
937デフォルトの名無しさん (ワッチョイ 93bb-nisE)
2021/06/15(火) 16:43:11.36ID:uIngvlIz0 仕様書読んでる人なんか沢山いたじゃんこのスレ
今はいないの?
今はいないの?
938デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/15(火) 16:43:19.15ID:d2euf9Bx0 このへんを理解するのに規格票なんか読んでたら却って時間かかるよ
規格票は初心者が読むようにはできてないから
それよりポインタの基本をしっかり押さえていくと自然に答えに行き着く
実際、俺がそうだった
じっくり真剣な考察がいるからテキトーこいてるうちはわからない
いわばテキトーセンサーだ
規格票は初心者が読むようにはできてないから
それよりポインタの基本をしっかり押さえていくと自然に答えに行き着く
実際、俺がそうだった
じっくり真剣な考察がいるからテキトーこいてるうちはわからない
いわばテキトーセンサーだ
939デフォルトの名無しさん (ワッチョイ cf63-khlo)
2021/06/15(火) 16:43:29.10ID:Zky1caEs0 コンパイルで、警告が出るだろ
右折禁止って書いてあるところ無理に右折するから、捕まる
右折禁止って書いてあるところ無理に右折するから、捕まる
940デフォルトの名無しさん (ワッチョイ cf63-khlo)
2021/06/15(火) 17:28:08.27ID:Zky1caEs0 配列sに初期値を入れておかないと表示出来ません
int main(void) {
char s[100]={'a'};
char *p=&s[0];
f(&p);
return 0;
}
int main(void) {
char s[100]={'a'};
char *p=&s[0];
f(&p);
return 0;
}
941デフォルトの名無しさん (アウアウウー Sa67-223K)
2021/06/15(火) 22:57:25.73ID:v+13MMUQa 配列とポインタは交換可能な場面が多いけど、結構融通が利かないことが多いですね
そもそもの >919 は定数の s を変数に適用しようとするからダメなのかな
しばらく C をやってないから、すっかりピンとこなくなってしまった
そもそも、こんな紛らわしい、クイズになるような記述はしないけど…
そもそもの >919 は定数の s を変数に適用しようとするからダメなのかな
しばらく C をやってないから、すっかりピンとこなくなってしまった
そもそも、こんな紛らわしい、クイズになるような記述はしないけど…
942デフォルトの名無しさん (ワッチョイ cf63-khlo)
2021/06/16(水) 00:39:49.95ID:QUFt1TkX0 sのアドレスを関数に渡した場合は、
受けとった側がこのアドレスをchar型の要素数100の配列として操作する必要がある。
これは関数f()のプロトタイプである、ポインタのポインタとは違う物である。
コンパイルしたときの警告をよく読んでみよう。
受けとった側がこのアドレスをchar型の要素数100の配列として操作する必要がある。
これは関数f()のプロトタイプである、ポインタのポインタとは違う物である。
コンパイルしたときの警告をよく読んでみよう。
943デフォルトの名無しさん (アウウィフ FF67-U3V2)
2021/06/16(水) 16:30:37.87ID:uJQ6HHCXF char s[100];
のときの
s と &s[0]
上の二つと &s の違い
のときの
s と &s[0]
上の二つと &s の違い
944デフォルトの名無しさん (ワッチョイ 7f36-nisE)
2021/06/16(水) 20:00:03.68ID:kgg3yKk+0 アセンブラ「?」
945デフォルトの名無しさん (アウアウウー Sa67-223K)
2021/06/17(木) 02:32:09.07ID:JsrG75zva946デフォルトの名無しさん (ワッチョイ cf63-khlo)
2021/06/17(木) 11:15:04.23ID:SWOKbVD80 char **p は 「charへのポインタの配列」 ではないよ
int main(void) {
char s='a';
char *p=&s;
f(&p);
return 0;
}
int main(void) {
char s='a';
char *p=&s;
f(&p);
return 0;
}
947デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/17(木) 11:32:48.85ID:qVo1n1YK0 ポインタ=配列と思い込んでいるときの症状だな
char s[100];
char *p = s;
assert(sizeof s != sizeof p);
char s[100];
char *p = s;
assert(sizeof s != sizeof p);
948デフォルトの名無しさん (ワッチョイ 63d5-+PDx)
2021/06/17(木) 12:21:59.90ID:u4WNkp++0 C言語には一応配列型があるんだっけ?
ほとんどポインタと同義で扱えるから分からんだけらしいが
ほとんどポインタと同義で扱えるから分からんだけらしいが
949デフォルトの名無しさん (アウアウウー Sa67-223K)
2021/06/17(木) 12:27:26.73ID:PisvSOwJa950デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/17(木) 12:34:26.88ID:qVo1n1YK0 > Cには配列型はないので
ある!
char s[100];
これが配列型だ
ある!
char s[100];
これが配列型だ
951デフォルトの名無しさん (アウアウウー Sa67-223K)
2021/06/17(木) 12:55:46.07ID:PisvSOwJa たしかに配列ですけど、配列型なのかな
自分もちょっと理解があやしいので…
誰か男の人来て〜!!
自分もちょっと理解があやしいので…
誰か男の人来て〜!!
952デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/17(木) 13:09:37.10ID:qVo1n1YK0 「型」とは何だと思う?
こういうのは型で、こういうのは型じゃない、という境界を示せるか?
こういうのは型で、こういうのは型じゃない、という境界を示せるか?
953デフォルトの名無しさん (ワッチョイ 3325-+PDx)
2021/06/17(木) 14:03:32.36ID:4qObO6qj0 rui_ueyamaのコンパイラ入門だと配列型とポインタ型は別々だって言ってたよ
954デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/17(木) 14:06:34.50ID:qVo1n1YK0 951が言いたいのはこういうことか?
typedef char T[100];
T s; //これなら型だ
T s[100]; //これは型なのかな
typedef char T[100];
T s; //これなら型だ
T s[100]; //これは型なのかな
955デフォルトの名無しさん (ワッチョイ 93bb-l016)
2021/06/17(木) 15:31:45.57ID:YvA5lG3W0 型って言うと普通はintとかfloatだよね
配列型っていうか「int型の配列」と表現することはあるけど
配列型っていうか「int型の配列」と表現することはあるけど
956デフォルトの名無しさん (ラクッペペ MM7f-xyiz)
2021/06/17(木) 15:48:44.73ID:Cedau++pM 基本型(数値型と文字型)と集成体型(配列と構造体)とポインタ型
957デフォルトの名無しさん (アウアウクー MM87-LLAs)
2021/06/17(木) 16:05:49.23ID:LpiEWNiEM 型はintとcharとfloatとdouble等
配列はその型を[100]みたいに指定した固定数だけ宣言して使えるようにしたもの
ポインタは指定した型のメモリ上の場所だけを指し、*allocでサイズが変えれる
配列もメモリの場所を示すポインタで参照はできるがサイズは固定
で覚えた
配列はその型を[100]みたいに指定した固定数だけ宣言して使えるようにしたもの
ポインタは指定した型のメモリ上の場所だけを指し、*allocでサイズが変えれる
配列もメモリの場所を示すポインタで参照はできるがサイズは固定
で覚えた
958デフォルトの名無しさん (ワッチョイ 6345-XaDa)
2021/06/17(木) 16:13:28.27ID:qVo1n1YK0 >>955
キーワードのみで指定される型は基本型(basic type)だ
6.2.5 型 オブジェクトに格納した値又は関数の返す値の意味は,それをアクセスするのに使われる式の型(type)によって決定する。(オブジェクトとして宣言された識別子は最も単純な式とし,その型は識別子の宣言において指定された型とする。)型は,オブジェクト型(object type)(オブジェクトを完全に規定する型),関数型(function type)(関数を規定する型),及び不完全型(incomplete type)(オブジェクトを規定する型で,その大きさを確定するのに必要な情報が欠けたもの)に分類する。
キーワードのみで指定される型は基本型(basic type)だ
6.2.5 型 オブジェクトに格納した値又は関数の返す値の意味は,それをアクセスするのに使われる式の型(type)によって決定する。(オブジェクトとして宣言された識別子は最も単純な式とし,その型は識別子の宣言において指定された型とする。)型は,オブジェクト型(object type)(オブジェクトを完全に規定する型),関数型(function type)(関数を規定する型),及び不完全型(incomplete type)(オブジェクトを規定する型で,その大きさを確定するのに必要な情報が欠けたもの)に分類する。
959デフォルトの名無しさん (ワッチョイ ffbb-nlE7)
2021/06/18(金) 13:25:25.10ID:askuiBap0 >>958
なるほど
なるほど
960デフォルトの名無しさん (ワッチョイ ffbb-wUFk)
2021/06/18(金) 14:20:34.01ID:askuiBap0 あ、ほんとだ
規格書見たら普通に配列型と書いてあるね
知らんかった
ネットで検索しても「配列型」は引っかからないけど
規格書見たら普通に配列型と書いてあるね
知らんかった
ネットで検索しても「配列型」は引っかからないけど
961デフォルトの名無しさん (ワッチョイ ffbb-nlE7)
2021/06/18(金) 14:36:30.74ID:askuiBap0 >配列型(array type)は,要素型(element type)と呼ぶ特定のメンバオブジェクト型をもつ空でないオブジェクトの集合を連続して割り付けたものを表す(36)。配列型は,その要素型及び配列の要素の個数によって特徴付ける。配列型はその要素型から派生されるといい,要素型がTの場合,配列型は“Tの配列”と呼ぶ。要素型から配列型を構成することを“配列型派生”と呼ぶ。
「Tの配列」という表現は「配列型」と同義なのか、勉強になった
「Tの配列」という表現は「配列型」と同義なのか、勉強になった
962デフォルトの名無しさん (ワッチョイ 8abd-GQXG)
2021/06/18(金) 15:24:35.28ID:AVf6Ht590 配列が型でなければ、sizeof int[4]とか、(char (*)[4])ptrとか書けないからね
963951 (アウアウウー Sa47-QaMB)
2021/06/19(土) 00:09:10.43ID:zB4v1zpja では、cには文字列型があるといえるのかな
964デフォルトの名無しさん (ワッチョイ 9aad-19dE)
2021/06/19(土) 00:14:04.98ID:MQWrKSb70 関数の引数で
void func(char s[][10])
なんて書き方をすると配列型をちょっと実感できる。
void func(char s[][10])
なんて書き方をすると配列型をちょっと実感できる。
965デフォルトの名無しさん (ワッチョイ e3da-TbJT)
2021/06/19(土) 00:14:26.03ID:8xkixJIf0 >>963
charの配列を文字列として扱うよ
charの配列を文字列として扱うよ
966951 (アウアウウー Sa47-QaMB)
2021/06/19(土) 00:20:12.06ID:zB4v1zpja いや、規格書に書いてあるのだから、私の間違いでした
すみませんでした
すみませんでした
967デフォルトの名無しさん (ワッチョイ 4eb0-3RHv)
2021/06/19(土) 00:48:51.22ID:AhXAE8oj0 NUL終端していないchar配列はただの配列
968デフォルトの名無しさん (ワッチョイ 9aad-XI4R)
2021/06/19(土) 05:43:30.69ID:MQWrKSb70 飛ばない豚はただの豚
969デフォルトの名無しさん (エムゾネ FFba-b/96)
2021/06/19(土) 17:04:29.32ID:zDrgWeBeF void func(char s[][10])
は嫌い
void func(char (*s)[10])
じゃいかんの
は嫌い
void func(char (*s)[10])
じゃいかんの
970はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 763e-wUFk)
2021/06/19(土) 17:34:38.67ID:/f53/cxR0971デフォルトの名無しさん (ワッチョイ 7345-qv+0)
2021/06/19(土) 17:54:37.68ID:BH9bYKW90 初心者を救済すべく用意された構文糖が
結果的に初心者を陥れる陰険な罠になっているという皮肉
結果的に初心者を陥れる陰険な罠になっているという皮肉
972デフォルトの名無しさん (ワッチョイ a725-565v)
2021/06/20(日) 06:40:26.90ID:vSgOvpHd0 少なくともCのシンタックスシュガーは熟練者がタイプ数を減らすためのものであって初心者を楽させるものではない気がする
973デフォルトの名無しさん (エムゾネ FFba-b/96)
2021/06/21(月) 15:18:17.55ID:os4CEfZ3F こんなところでCが中途半端に出来るだけが自慢の専門卒みたいな連中に尋ねるよりも
大学の先生かチューターの院生に尋ねた方がいいだろう
進みたい研究室があればそこに行って訊くと良い
大学の先生かチューターの院生に尋ねた方がいいだろう
進みたい研究室があればそこに行って訊くと良い
974デフォルトの名無しさん (ワッチョイ 7345-qv+0)
2021/06/21(月) 20:27:45.83ID:yU7HyP9W0 院生以下のゴミw
975デフォルトの名無しさん (ワッチョイ b363-19dE)
2021/06/21(月) 23:06:35.04ID:jHz8GYW10 // 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の表示だけにすると、動く
院生の人、何故かを説明して
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の表示だけにすると、動く
院生の人、何故かを説明して
976デフォルトの名無しさん (アウアウウー Sa47-QaMB)
2021/06/21(月) 23:10:51.91ID:imPHrgSTa こういうの、昔 柴田何某のポインタ本で勉強したけど、みんな忘れたな…
977デフォルトの名無しさん (ワッチョイ db33-LVrK)
2021/06/22(火) 02:41:53.17ID:UBIESj0w0 extern int b[];にすると動いたから配列型とポインタ型の違いっぽい
978デフォルトの名無しさん (ワッチョイ 7345-qv+0)
2021/06/22(火) 06:19:00.39ID:jiZrgPwV0 配列とポインタを混同するなと教えるときの典型的なサンプルだね
979デフォルトの名無しさん (アウアウウー Sa47-QaMB)
2021/06/22(火) 22:30:25.89ID:dO7B5XH7a 外部りんけーじだと、bのメモリに配置されているのが値なのかポインタなのか分からないからかな
この場合、使用側はbに配置されたのがポインタと決めつけてるけど、実態は値だから?
この場合、使用側はbに配置されたのがポインタと決めつけてるけど、実態は値だから?
980デフォルトの名無しさん (ブーイモ MMba-A4zE)
2021/06/23(水) 00:13:40.21ID:4uPMP2M7M int b[] = {123, 456};
*b で期待されるのは b=&123;
b[] で期待されるのは b[2]={123,456}
b[]の中身をスタックに積んだ後に*bの場合必要ないからextern更新して無いんじゃね?
*b で期待されるのは b=&123;
b[] で期待されるのは b[2]={123,456}
b[]の中身をスタックに積んだ後に*bの場合必要ないからextern更新して無いんじゃね?
981デフォルトの名無しさん (ワッチョイ 0eda-ydLY)
2021/06/23(水) 05:17:30.22ID:m16dmNKT0 現象としてはコンパイル後のアセンブリを見ればいいけど, 一般論としてはODR違反だからどう扱おうがコンパイラの自由だとしか
982デフォルトの名無しさん (ワッチョイ 7345-qv+0)
2021/06/23(水) 06:27:58.72ID:rIfoeFmJ0983デフォルトの名無しさん (ワッチョイ ff05-3RHv)
2021/06/23(水) 12:05:27.59ID:qvRJvNKF0 >>982
アホは無理して答えなくていいぞ
アホは無理して答えなくていいぞ
984デフォルトの名無しさん (ドコグロ MM77-GQXG)
2021/06/23(水) 12:26:06.31ID:5TaXVwksM extern int *b; じゃスタックに何も積んだりしないしどう見ても>>980がアホなんですが
985デフォルトの名無しさん (ワッチョイ a75f-3lwz)
2021/06/24(木) 12:32:06.50ID:OZF9neOD0 >>983
自己紹介乙
自己紹介乙
987デフォルトの名無しさん (ワントンキン MM8a-DkEX)
2021/06/24(木) 20:21:39.46ID:y6Bfeav/M じゃあ
b&=123;
でお願いしまつ。
b&=123;
でお願いしまつ。
988デフォルトの名無しさん (ワッチョイ 7345-qv+0)
2021/06/24(木) 20:45:24.69ID:alz36GlD0 ビットandしながら代入
989デフォルトの名無しさん (ワッチョイ cf69-H7K1)
2021/06/25(金) 15:41:59.61ID:rcGmQQfw0 2進で 0111 1011 か
マスクでありそうなパターンだ
マスクでありそうなパターンだ
990デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/25(金) 17:37:21.28ID:+QaNJXlp0 127より4小さい数か
991デフォルトの名無しさん (ワッチョイ 7fda-mKoK)
2021/06/25(金) 19:59:22.30ID:jSzR7q5R0 ビット and ラーン
992デフォルトの名無しさん (ブーイモ MM5f-CfLj)
2021/06/25(金) 23:07:19.68ID:crztuVLoM (int)123を.data sectionに置きアドレスを取得する方法。
993デフォルトの名無しさん (ワッチョイ 3fad-wfqF)
2021/06/26(土) 02:00:51.59ID:RjjpcdnV0 int a[] = { 123 };
って初期化すれば a が (int) 123 の入っている先頭アドレスになる。
もちろん *a が作られたわけではないので a に対しては代入できない。
あくまでも a を使おうとすると 123 の入っているアドレスに置き換わるだけ。
って初期化すれば a が (int) 123 の入っている先頭アドレスになる。
もちろん *a が作られたわけではないので a に対しては代入できない。
あくまでも a を使おうとすると 123 の入っているアドレスに置き換わるだけ。
994デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/26(土) 07:06:52.87ID:MV3qzcHy0 キャストしなくても元々intだろうが
995デフォルトの名無しさん (ワッチョイ 3fad-wfqF)
2021/06/26(土) 14:00:05.06ID:RjjpcdnV0 気分の問題。
996デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/28(月) 09:33:23.09ID:so+vl3vs0 printf("%d", sizeof (char)123); とやろうとしたら
キャストのカッコがsizeofのカッコと解釈されてエラーになるのな
printf("%d", sizeof((char)123)); ならおkなんだけど
なんだか気持ち悪い
キャストのカッコがsizeofのカッコと解釈されてエラーになるのな
printf("%d", sizeof((char)123)); ならおkなんだけど
なんだか気持ち悪い
997デフォルトの名無しさん (ワッチョイ cf05-Ibo0)
2021/06/28(月) 10:13:18.97ID:x/UkG1ge0 >>996
sizeofって括弧なしで使えるの? 知らなかった
sizeofって括弧なしで使えるの? 知らなかった
998デフォルトの名無しさん (ワッチョイ 0fda-qjGA)
2021/06/28(月) 10:20:43.69ID:WejOUFlX0 >>996
sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと
まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという
おかしな状態になるのでエラーになったのでは?
sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと
まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという
おかしな状態になるのでエラーになったのでは?
999デフォルトの名無しさん (ワッチョイ 0f45-Sffs)
2021/06/28(月) 10:38:03.51ID:so+vl3vs0 sizeofとキャストはどちらも単項式なので右から結合するはず
にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ
字句解析と意味解析ってことかな
にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ
字句解析と意味解析ってことかな
1000デフォルトの名無しさん (ワッチョイ 0fd2-kMi9)
2021/06/28(月) 11:05:48.75ID:HW6dR9O/0 そもそも
sizeof (char)
だけでいいものをそう記述してるのが気持ち悪い。
sizeof (char)
だけでいいものをそう記述してるのが気持ち悪い。
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 272日 20時間 24分 19秒
新しいスレッドを立ててください。
life time: 272日 20時間 24分 19秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 空自機レーダー照射、音声データ公開 中国 ★3 [蚤の市★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★] [蚤の市★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 中国がここまで過敏になるのは日本に前科があるから。盧溝橋、満州事変。ジャップの先制攻撃は挙げればキリがないけど [472617201]
- ぶっちゃけ天のうって昭和天のうのせいで全然ありがたみないよな
- 犬って顔くっつけて寝たがるよな
- ゲームボーイのゲーム
- 『猟友会がクマ駆除を嫌がるなら潰すべき。職務を放棄するハンターから免許や銃を没収して罰金を取ろう』の声、ネットで上がる [932029429]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
