初めて質問させていただきます。
やりたいこと
括弧付きの文字列を#defineで置き換えたい。
例としては、
*(p->func_addr)
といった文字列を #define で置き換えたいです。
単純に
#define *(p->func_addr) XXX
とすると、括弧は #define A(x) ((x)+1)みたいな意味に解釈されてしまいますよね?
これを括弧含めてただの文字列としてXXXに置き換えたいです。
やり方、それは無理、無理だけどこんな代替がある、があれば教えて頂きたいと思います。
よろしくお願いいたします。
define で括弧付きの文字列を置き換える
Re: define で括弧付きの文字列を置き換える
東上☆海美☆「
貴方が本当にやりたいことは
#define XXX *(p->func_addr)
じゃないの ?
typedef unsigned int uint;
とかと、順番が混乱してない ?
」
貴方が本当にやりたいことは
#define XXX *(p->func_addr)
じゃないの ?
typedef unsigned int uint;
とかと、順番が混乱してない ?
」
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: define で括弧付きの文字列を置き換える
レスありがとうございます。
いえ、元の順序であっています。
元々のCソースに *(p->func_addr)と書いてあるところを、XXXというテストスタブで
置き換えたい感じです。
いえ、元の順序であっています。
元々のCソースに *(p->func_addr)と書いてあるところを、XXXというテストスタブで
置き換えたい感じです。
Re: define で括弧付きの文字列を置き換える
東上☆海美☆「
ソースの *(p->func_addr) を YYY に置換して #define ZZZ されているか、否か、で切り替える。
」
ソースの *(p->func_addr) を YYY に置換して #define ZZZ されているか、否か、で切り替える。
」
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: define で括弧付きの文字列を置き換える
あらかじめ、#define で単純に置き換えられるYYYになっていれば
切り替え可能ですが、現状 *(p->func_addr)なので
「ソースの*(p->func_addr)をYYYに置換して」の前提が無理です。
既存コードに手を入れるのはなしでいきたいので
#define で無理であれば、sed とかパイプつないで入力は手が入っていない元ソース
にしようと思います。
そこまでするなら元ソース手を入れても同じじゃんとは私も思うのですが。
切り替え可能ですが、現状 *(p->func_addr)なので
「ソースの*(p->func_addr)をYYYに置換して」の前提が無理です。
既存コードに手を入れるのはなしでいきたいので
#define で無理であれば、sed とかパイプつないで入力は手が入っていない元ソース
にしようと思います。
そこまでするなら元ソース手を入れても同じじゃんとは私も思うのですが。
Re: define で括弧付きの文字列を置き換える
C言語のプリプロセッサの #define の文法は
(引用元:N1570 6.10.3 Macro replacement)
すなわち、置き換え元は識別子 (identifier) でなければなりません。
identifier は 6.4.2 Identifiers で定義されており、処理系によって使える文字を独自に増やせるともありますが、
*(p->func_addr) を識別子扱いするのは式の記述と衝突する可能性があり、さすがに無理があるでしょう。
どうしても #define を使いたいのであれば、
C言語とは関係なく独自に定義した #define を処理する独自の処理プログラムを開発し、使用するのがいいでしょう。
または
となっています。
(引用元:N1570 6.10.3 Macro replacement)
すなわち、置き換え元は識別子 (identifier) でなければなりません。
identifier は 6.4.2 Identifiers で定義されており、処理系によって使える文字を独自に増やせるともありますが、
*(p->func_addr) を識別子扱いするのは式の記述と衝突する可能性があり、さすがに無理があるでしょう。
どうしても #define を使いたいのであれば、
C言語とは関係なく独自に定義した #define を処理する独自の処理プログラムを開発し、使用するのがいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: define で括弧付きの文字列を置き換える
ありがとうございます。
#defineではできないこと、なぜできないか、を理解できました。
*(p->func_addr)のpの先を置き換えるか、sed等でプリ処理を作って対処します。
#defineではできないこと、なぜできないか、を理解できました。
*(p->func_addr)のpの先を置き換えるか、sed等でプリ処理を作って対処します。
Re: define で括弧付きの文字列を置き換える
東上☆海美☆「
#4> ソースの *(p->func_addr) を YYY に置換して
は、
#5> あらかじめ、#define で単純に置き換えられるYYYになっていれば
#5> 切り替え可能ですが、現状 *(p->func_addr)なので
#5> 「ソースの*(p->func_addr)をYYYに置換して」の前提が無理です。
#define を使用するのではなく、ソースコードをエディタ等で置換する、という意味で書きました。
> 既存コードに手を入れるのはなしでいきたいので
> #define で無理であれば、sed とかパイプつないで入力は手が入っていない元ソース
> にしようと思います。
『既存コードに手を入れるのは、なし』なら #define を追加するのもダメですね。
#5> そこまでするなら元ソース手を入れても同じじゃんとは私も思うのですが。
上司の命令なんですか ?
」
#4> ソースの *(p->func_addr) を YYY に置換して
は、
#5> あらかじめ、#define で単純に置き換えられるYYYになっていれば
#5> 切り替え可能ですが、現状 *(p->func_addr)なので
#5> 「ソースの*(p->func_addr)をYYYに置換して」の前提が無理です。
#define を使用するのではなく、ソースコードをエディタ等で置換する、という意味で書きました。
> 既存コードに手を入れるのはなしでいきたいので
> #define で無理であれば、sed とかパイプつないで入力は手が入っていない元ソース
> にしようと思います。
『既存コードに手を入れるのは、なし』なら #define を追加するのもダメですね。
#5> そこまでするなら元ソース手を入れても同じじゃんとは私も思うのですが。
上司の命令なんですか ?
」
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: define で括弧付きの文字列を置き換える
#define は、左側の文字列を、右側の文字列に置き換えるという所をするため、
本来は使うべきではありません。
本来は使うべきではありません。