Существует ли способ использовать fopen_s () с GCC или по крайней мере создать #define об этом?

Если необходимо протестировать клиентскую логику: можно использовать платформу насмешки/Изоляции, чтобы заблокировать фактические вызовы к серверу и использовать платформу поблочного тестирования для записи надлежащих Модульных тестов.

Тестирование логики сервера может быть еще легче - все, в чем Вы нуждаетесь, должен протестировать вызов к бизнес-логике, и тупик звонит во внешние компоненты (т.е. база данных).

нет никакого фактического преимущества поблочного тестирования полного взаимодействия между клиентом к серверу, потому что Вы знаете, что работы WCF вместо этого добавляют интеграционное тестирование всей среды на выделенном сервере / клиенты.

14
задан Josh Darnell 31 July 2012 в 14:58
поделиться

1 ответ

Microsoft's *_s functions are unportable, I usually use equivalent C89/C99 functions and disable deprecation warnings (#define _CRT_SECURE_NO_DEPRECATE).

If you insist, you can use an adaptor function (not necessarily a macro!) that delegates fopen() on platforms that don't have fopen_s(), but you must be careful to map values of errno_t return code from errno.

errno_t fopen_s(FILE **f, const char *name, const char *mode) {
    errno_t ret = 0;
    assert(f);
    *f = fopen(name, mode);
    /* Can't be sure about 1-to-1 mapping of errno and MS' errno_t */
    if (!*f)
        ret = errno;
    return ret;
}

However, I fail to see how fopen_s() is any more secure than fopen(), so I usually go for portability.

28
ответ дан 1 December 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: