При тестировании программного обеспечения на Си я хотел бы использовать макросы для генерации вызовов функций. Использование компилятора codewarrior 5.2 (очень старого) - потому что у меня нет выбора, я не знаю, является ли это стандартным поведением.
в macros.h
#define RUNTEST(i) \
testcase_index = i; \
__PREFIX__##_testCase_##i()
в test_foo.c
#include "macros.h"
#define __PREFIX__ foo
RUNTEST(10);
По-видимому, __PREFIX__
не раскрывается, и препроцессор генерирует вызов на __PREFIX___testcase_10()
, который, конечно, потерпит неудачу при связывании времени.
Копирование всего в одном файле, кажется, ничего не меняет.
Есть ли простой выход?
Альтернативный
Я также попытался #define __PREFIX__() foo
, чтобы вызвать расширение макроса. В этом случае он почти работает и теперь генерирует foo _testcase_10()
(с пробелом), который, конечно, не будет компилироваться.