マクロ内でa->url
を使用すると失敗しますが、a->url
を置き換えて手動で文字列を入力すると動作します。 a->url
をマクロと互換性を持たせるにはどうすればよいですか?C++ - マクロを使用すると、このコードが機能しないのはなぜですか?
g++ -c -g -std=c++11 -MMD -MP -MF "build/Debug/GNU-MacOSX/main.o.d" -o build/Debug/GNU-MacOSX/main.o main.cpp
main.cpp:18:35: error: expected ';' after expression
cout << MANIFEST_URL(a->url);
CODE:
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
#define MANIFEST_URL(REPLACE) "https://" REPLACE "/manifest.json";
typedef struct custom {
char *id;
string url;
custom *next;
} custom;
int main() {
custom *a;
a = new custom;
a->url = "www.google.com";
cout << MANIFEST_URL(a->url);
cout << a->url;
return 0;
}
マクロ拡張について考えてみましょう。マクロとしてではなく直接書き込んだ場合、本当に有効でしょうか? –
また、前処理は実際のコンパイルとは別の手順であることに注意してください。プリプロセッサは構造体や変数について何も知らない。 –
マクロの代わりに、文字列連結を使用する関数を定義します。 –