cunit库的README例子错误

我下载了cunit库,原作者的源码在https://gitlab.com/cunity/cunit/-/tree/master

我下载的git 提交的版本:

Author: Chris Doherty
Date:   Tue Feb 25 15:27:40 2020 +0000

 

头文件中重复定义了四个函数指针,我修改后的文件如下

#ifndef CCU_CUNITCI_H
#define CCU_CUNITCI_H

#include "CUnit/CUnitCITypes.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * Run all registered tests and save a junit xml report in the current working directory
 */
#define CU_CI_RUN_SUITES() \
    CU_CI_main(argc, argv)

/**
 * Set the current suite including any setup/teardown functions
 *
 * @param name the suite name
 * @param init suite setup function
 * @param clean suite teardown function
 * @param setup test setup function
 * @param teardown test teardown function
 */
#define CU_CI_DEFINE_SUITE(name, init, clean, setup, teardown) \
    CU_CI_add_suite(name, init, clean, setup, teardown)

/**
 * Add a new test to the current suite.
 *
 * @param test the test function to call.
 */
#define CUNIT_CI_TEST(test) \
    CU_CI_add_test(#test, test)

#define CU_SUITE_SETUP_FUNCNAME    __CUnit_suite_setup
#define CU_SUITE_TEARDOWN_FUNCNAME __CUnit_suite_teardown
#define CU_TEST_SETUP_FUNCNAME     __CUnit_test_setup
#define CU_TEST_TEARDOWN_FUNCNAME  __CUnit_test_teardown

static CU_InitializeFunc __cu_suite_setup;
static CU_CleanupFunc    __cu_suite_teardown;
static CU_SetUpFunc      __cu_test_setup;
static CU_TearDownFunc   __cu_test_teardown;

/**
 * Define a suite setup routine
 */
#define CU_SUITE_SETUP()    static int  CU_SUITE_SETUP_FUNCNAME(void); \
    static int  CU_SUITE_SETUP_FUNCNAME(void)

/**
 * Define a suite cleanup routine
 */
#define CU_SUITE_TEARDOWN() static int  CU_SUITE_TEARDOWN_FUNCNAME(void); \
    static int CU_SUITE_TEARDOWN_FUNCNAME(void)

/**
 * Define a pre test setup routine
 */
#define CU_TEST_SETUP()     static void CU_TEST_SETUP_FUNCNAME(void); \
    static void CU_TEST_SETUP_FUNCNAME(void)

/**
 * Define a post test cleanup routine
 */
#define CU_TEST_TEARDOWN()  static void CU_TEST_TEARDOWN_FUNCNAME(void); \
    static void CU_TEST_TEARDOWN_FUNCNAME(void)

/**
 * Run the given tests as part of a single exe suite.
 */
#define CUNIT_CI_RUN(_suitename, ...)   \
int main(int argc, char** argv) {       \
            __cu_suite_setup = &CU_SUITE_SETUP_FUNCNAME;\
            __cu_suite_teardown = &CU_SUITE_TEARDOWN_FUNCNAME; \
            __cu_test_setup = &CU_TEST_SETUP_FUNCNAME; \
            __cu_test_teardown = &CU_TEST_TEARDOWN_FUNCNAME; \
            CU_CI_add_suite(_suitename, \
            __cu_suite_setup,           \
            __cu_suite_teardown,        \
            __cu_test_setup,            \
            __cu_test_teardown);        \
    __VA_ARGS__                  ;    \
    return CU_CI_main(argc, argv); }


/**
 * Disable CUCI setup/teardown and silence compiler warnings about unused variables.
 */
#define CUNIT_CI_CLEAR_SETUPS()                                                             \
do {                                                                                        \
  __cu_suite_setup = NULL;                                                                  \
  __cu_suite_teardown = NULL;                                                               \
  __cu_test_setup = NULL;                                                                   \
  __cu_test_teardown = NULL;                                                                \
  (void)(__cu_suite_setup || __cu_suite_teardown || __cu_test_setup || __cu_test_teardown );\
} while (0)

#ifdef __cplusplus
}
#endif

#endif // CCU_CUNITCI_H
/** @} */

另外源码中的README文件中举出的例子也有问题,调用函数时的宏CUNIT_CI_RUN(_suitename, ...)传入的参数应该以分号分隔开来;否则宏展开时会把逗号作为函数之间的分隔符。

你可能感兴趣的:(c语言)