C言語なら俺に聞け 153 at TECH
[2ch|▼Menu]
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

1684日前に更新/17 KB
担当:undef