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

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