Как поймать утверждение с помощью теста Google?

Первоначальное распределение argv оставлено на усмотрение компилятора / среды выполнения. Так что может небезопасно изменять его волей-неволей. Многие системы строят его в стеке, поэтому он автоматически освобождается при возвращении main. Другие строят его в куче и освобождают (или нет), когда main возвращается.

Можно безопасно изменить значение аргумента, если вы не пытаетесь увеличить его (ошибка переполнения буфера). Можно сменить порядок аргументов.

Чтобы удалить аргументов, которые вы предварительно обработали , будет работать что-то вроде этого:

(множество условий ошибок не проверено, «--special», другие что первый аргумент не проверен и т. д. Это, в конце концов, просто демонстрационная концепция.)

int main(int argc, char** argv)
{
    bool doSpecial = false; // an assumption
    if (0 == strcmp(argv[1], "--special"))
    {
        doSpecial = true; // no longer an assumption
        // remove the "--special" argument
        //  but do copy the NULL at the end.
        for(int i=1; i

Но посмотрите на это для полной манипуляции: (часть libiberty библиотека, которая используется для управления векторами стиля argv)

http://www.opensource.apple.com/source/gcc/gcc-5666.3/libiberty/argv.c

Это лицензированный GNU LGPL.

36
задан Keith Pinson 6 February 2013 в 22:45
поделиться

1 ответ

EXPECT_FATAL_FAILURE (оператор, текст) и EXPECT_NONFATAL_FAILURE (оператор, текст) будет только передача , если 'оператор' вызовет сбой ASSERT_x или EXECT_x соответственно.

Эти операторы передадут в Ваших тестах:

EXPECT_NONFATAL_FAILURE( EXPECT_TRUE( 0 ), "" ); EXPECT_FATAL_FAILURE( ASSERT_TRUE( 0 ), "" );

0
ответ дан 27 November 2019 в 06:16
поделиться
Другие вопросы по тегам:

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