Как я делаю машину Perl или зависимого платформы TDD?

Здесь есть разные проблемы.

Сначала ваш последний член имеет неполный тип, потому что это массив необъявленного измерения. Это не разрешено в C ++, но большинство компиляторов допускает его как расширение с той же семантикой, что и в C. В любом случае, это довольно сложно использовать, поскольку его можно использовать только с выделенными структурами, где вы выделяете память для самой структуры и неполный массив.

Далее вы пытаетесь присвоить массиву. Ты не можешь. Массивы не являются объектами первого класса в C ++ (и в C). Вы можете инициализировать массив целиком, но можете назначить его только элементу массива.

И наконец, вы назначаете C литеральную строку для char *. Это плохо, потому что стандарт объявляет, что литеральные строки имеют значение const, поэтому использование более позднего указателя для изменения символа будет неопределенным поведением. Это сработает, если вы этого не сделаете, но указатели должны быть по крайней мере объявлены как const.

Вот как вы можете использовать все это:

widget_t* setUpFunction () {
    // allocates a widget_t with 2 slots in nicknames
    widget_t *someWidget = (widget_t *) malloc(sizeof(widget_t) + 2 * sizeof(char *));
    someWidget.name = (char *)"Lawn Mower";   // VERY DANGEROUS: pointer should be const
    someWidget.numberOfNicknames = 2;
    someWidget.nicknames[0] = (char *) "Choppie McGrasschopper"; // SAME DANGER
    someWidget.nicknames[1] = (char *) "Really Noisy"            // Still same danger
    return widget_t;
}

Но все это скорее C-ish и его следует избегать в C ++. Кроме того, он все еще требует выделенной памяти, что может не соответствовать тому, что вы хотите для Arduino

5
задан Mihai Limbășan 24 March 2009 в 08:03
поделиться

2 ответа

Для следования предложению фиктивных объектов Jason необходимо смотреть на статью "Interfacing with hard-to-test third party controls" Misko Hevery. Это непосредственно обращается к сторонним компонентам тестирования.

5
ответ дан 14 December 2019 в 04:49
поделиться

Обычно Вы используете фиктивные объекты для "фальсифицирования" результатов тех системных вызовов.

Во время тестирования используйте фиктивные объекты и сделайте, чтобы они возвратили различные результаты, которые Вы ожидали бы на различных платформах, тестируя, что Ваш код реагирует правильно в тех случаях.

3
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

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