C言語なら俺に聞け 153
at TECH
39:デフォルトの名無しさん
19/09/17 19:09:34.89 g1BlUkdva.net
>>37
なぜって、#defineを使用するための構文を完全に無視してるからだよ。こちらが思ったことを都合良く解釈してくれるわけでなく、構文通りの単純な置換をしてくれるだけだよ。
一度ちゃんと調べておいた方がいい。
40:デフォルトの名無しさん
19/09/17 19:57:33.48 pZqZMIzxM.net
>>39
なるほどです。
では、[]や:を利用して独自の構文を定義するのはC言語において不可能、ということですか?
41:デフォルトの名無しさん
19/09/17 20:37:25.67 g1BlUkdva.net
>>40
不可能。やるなら自前でプリプロセサでも書けばいいが、そんなことするくらいなら、ソース上に書くのではなく独自のデータファイルとそれを読み込んでデータを初期化するような処理でも作れば?
42:デフォルトの名無しさん
19/09/17 20:47:01.62 pZqZMIzxM.net
>>41
ありがとうございます。
最終的な目標は、Cを他言語ライクな記述でコーディングすることなので、プリプロセッサについて調べてみます。
43:デフォルトの名無しさん
19/09/17 22:44:02.30 WDh8MszDa.net
新言語作った方が良さそうな。
初期のC++みたいにC言語へのコンバータとして作っちゃえば楽だと思う。Cと同じで良い部分はほとんど素通しで行けるし。
44:デフォルトの名無しさん
19/09/18 03:52:29.58 YwguJHoc0.net
そこまでしてCに拘る意味がわからない
45:デフォルトの名無しさん
19/09/18 05:50:30.71 A+b/Im8h0.net
あの変態的にC言語には見えないObjective CでさえほとんどプリプロセッサでCに変換してからコンパイルしてたと聞くので、やろうと思えばできるんだろうね。
46:デフォルトの名無しさん
19/09/18 07:02:57.91 ik5RQtCe0.net
yaccとlexを使えばできるだろう。たぶん
47:デフォルトの名無しさん
19/09/18 08:32:22.55 cLmp+ocZM.net
独自言語を開発したときなんかはとりあえずCに変換するというのはわりとある話。
コード生成とか最適化とか考えずに済むから。
昔、独自じゃないけど、とある言語からCへのコンバータ作ったよ。
楽しかった。
48:デフォルトの名無しさん
19/09/18 08:40:59.31 vdXxwq0s0.net
コンパイル前にソースを別のソフトで変換、置き換えさせて・・・
49:デフォルトの名無しさん
19/09/18 09:00:45.02 qgVAc8a30.net
そしてCにもどるネズミの嫁入り
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
1704日前に更新/17 KB
担当:undef