Я так не думаю. Вы можете создать строку из имени параметра, но не можете проанализировать содержимое параметра.
Звучит так, как если бы вы в любом случае создавали разные макросы для каждого условия строки, поэтому проще всего просто использоватьразные имена для каждого условия, например:
#define SAMPLE_MACRO(x) somefunction(x)
#define SAMPLE_MACRO_A(x) otherfunction(x)
Если макрос состоит из нескольких строк, и вы хотите, чтобы отличалась только одна строка, один из способов - передать имя функции в качестве параметра макроса:
#define SAMPLE_MACRO(f, x) { \
...
f(x);
...
}
Позвоните куда-нибудь:
SAMPLE_MACRO(otherfunction, "abc");
SAMPLE_MACRO(somefunction, "bbe");
Другой вариант - создать макросы для других строк и использовать их в определенных макросах:
#define SAMPLE_MACRO_PRE(x) ...
#define SAMPLE_MACRO_POST(x) ...
#define SAMPEL_MACRO(x) { \
SAMPLE_MACRO_PRE(X); \
somefunction(x); \
SAMPLE_MACRO_POST(x); \
}
#define SAMPEL_MACRO_A(x) { \
SAMPLE_MACRO_PRE(X); \
otherfunction(x); \
SAMPLE_MACRO_POST(x); \
}
Thisэто все, что относится и к Си. Если вы хотите быть объектно-ориентированным, подумайте о создании классов для обработки различий в строках, а не в макросах. Наследовать от базового типа и иметь разные реализации функции-члена .somefunction (). Правильная ориентация объекта может устранить множество операторов switch () или каскадных операторов if ().