Шина (инструмент для программирования) - Splint (programming tool)

Шина
Разработчики) Разработчики сплинта
Стабильный выпуск
3.1.2 / 12 июля 2007 г . ; 14 лет назад ( 2007-07-12 )
Репозиторий github .com / splintchecker / шина
Операционная система Кроссплатформенность
Тип Статический анализ кода
Лицензия GPL
Веб-сайт www .splint .org

Splint , сокращение от Secure Programming Lint , представляет собой инструмент программирования для статической проверки программ C на наличие уязвимостей безопасности и ошибок кодирования. Ранее называвшаяся LCLint, это современная версия инструмента lint Unix .

Splint имеет возможность интерпретировать специальные аннотации к исходному коду , что дает ему более строгую проверку, чем это возможно, просто глядя на исходный код. Шина используется gpsd как часть усилий по устранению дефектов.

Splint - это бесплатное программное обеспечение, выпущенное в соответствии с условиями Стандартной общественной лицензии GNU .

Основная деятельность по разработке Splint была остановлена ​​в 2010 году. Согласно CVS на SourceForge , по состоянию на сентябрь 2012 года самое последнее изменение в репозитории было в ноябре 2010 года. В репозитории Git на GitHub есть более свежие изменения, начиная с июля 2019 года.

Пример

#include <stdio.h>
int main()
{
    char c;
    while (c != 'x');
    {
        c = getchar();
        if (c = 'x')
            return 0;
        switch (c) {
        case '\n':
        case '\r':
            printf("Newline\n");
        default:
            printf("%c",c);
        }
    }
    return 0;
}

Выход шины:

Variable c used before definition
Suspected infinite loop. No value used in loop test (c) is modified by test or loop body.
Assignment of int to char: c = getchar()
Test expression for if is assignment expression: c = 'x'
Test expression for if not boolean, type char: c = 'x'
Fall through case (no preceding break)

Фиксированный источник:

#include <stdio.h>
int main()
{
    int c = 0;  // Added an initial assignment definition.

    while (c != 'x') {
        c = getchar();  // Corrected type of c to int
        if (c == 'x') // Fixed the assignment error to make it a comparison operator.
            return 0;
        switch (c) {
        case '\n':
        case '\r':
            printf("Newline\n");
            break;  // Added break statement to prevent fall-through.
        default:
            printf("%c",c);
            break;  //Added break statement to default catch, out of good practice.
        }
    }
    return 0;
}

Смотрите также

использованная литература

внешние ссылки