C言語なら俺に聞け 153
at TECH
[1からを表示]
50:デフォルトの名無しさん
19/09/18 12:47:21.47 1Vhu13ZT0.net
BNFとyaccのお勉強から
51:デフォルトの名無しさん
19/09/19 15:34:03.81 yCvdPLl+M.net
#define ARR_NAME(n) arr##n
int arr0 [] = {0,0,0};
int arr1 [] = {1,1,1};
int* select_arr(int i){
return ARR_NAME(i);
}
これはどうしてコンパイルエラーになりますか?
ちなみにreturn ARR_NAME(0)だと正しく動きます。
52:デフォルトの名無しさん
19/09/19 16:38:05.33 1k0/HGmS0.net
タイミングの問題だ
#defineはコンパイル前に解釈されるが
関数仮引数の値は実行時に渡される
実行時とはコンパイル〜リンクまで全て終わった後の話だ
だから関数仮引数の値を#defineで置き換えることができない
53:さまよえる蟻人間
19/09/19 17:34:18.54 fzYUHnaEd.net
arriという変数はない。プリプロセッサでは変数の中身までは見られない。
54:デフォルトの名無しさん
19/09/19 18:13:33.75 yCvdPLl+M.net
分かりやすかったです。ありがとう。
この機能の代替として良き方法はありますか?配列のdimを増やすしかないですか?
55:さまよえる蟻人間
19/09/19 18:22:24.66 fzYUHnaEd.net
次元を増やすのがベストだろう。
56:デフォルトの名無しさん
19/09/19 18:23:38.47 QG4rugRZ0.net
配列変数名はコンパイル時には分かっているのだから
その配列のアドレスを格納したポインタ配列を用意してやる
57:デフォルトの名無しさん
19/09/19 18:24:58.88 Hv2f/JNH0.net
>>55
これに1票。
58:デフォルトの名無しさん
19/09/20 15:15:19.52 X5/vL2CD0.net
__、
iー'゙゙゙゙''''ー-,/^´ ゙';
| ゙ゝ....‐ .}
! |,
i____________......r'".'''゙ヽ . ..,,、
,,. -/ `'ー | .' 、
,..-'" l゙ __.. -''′ ./
. ,/ .`''''〜- ....---''''"゛ ,/
/.,, ,,..r'"
`''ー、,、 _,,,-'" `!、
/'r‐、 ,/´ /゙゙', ヽ
/ レ'゙ ´゙リ´ . `^^゙゙゙゙゙゙厂j .! │ . l
/ | .l. 丿/ / . / !
l ! .,,....--ー'''''''″ / .| (、 . !
_ .ィ‐¨゙゙'广゛ ...... ./ ,ノ.l. `'ィ ..,,_/
..-‐'"゛ 'l_゙'ーノ`' ..........,,_ .,, -" / │ .! ゙''''-.
.i''i ヽ、 / .! !
,)イ : ..,,,,,>u;;;;,、.__ _,,,.. / | "
/ . 、 ! .` |
!, ,!
." ゙
59:デフォルトの名無しさん
19/09/20 17:51:25.98 /93Uxf6sM.net
それは増やさなくていいから
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
1705日前に更新/17 KB
担当:undef