exponenta event banner

Код деактивирован постоянным ложным условием

Сегмент кода деактивирован #if 0 директива или if(0) состояние

Описание

Этот дефект возникает, когда блок кода деактивируется с помощью #if 0 директива или if(0) состояние.

Риск

A #if 0 директива или if(0) условие используется для временной деактивации сегментов кода. Если производственный код содержит эти директивы, это означает, что деактивация не была отменена до отгрузки кода.

Зафиксировать

Если сегмент кода присутствует только для отладки, удалите сегмент из производственного кода. Если отключение произошло случайно, снимите #if 0 и #endif заявления.

Часто сегмент кода деактивируется для конкретных условий, например для конкретной операционной системы. Использовать макросы с #if директива для указания этих условий вместо полной деактивации кода с помощью #if 0 директива. Например, GCC предоставляет макросы для обнаружения операционной системы Windows ®:

#ifdef _WIN32
   //Code deactivated for all operating systems
   //Other than 32-bit Windows
#endif

Если вы не хотите устранять проблему, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

Примеры

развернуть все

#include<stdio.h>
int Trim_Value(int* Arr,int Size,int Cutoff) 
{
    int Count=0;

    for(int i=0;i < Size;i++){
        if(Arr[i]>Cutoff){
            Arr[i]=Cutoff;
            Count++;
        }
    }

    #if 0
    /* Defect: Code Segment Deactivated */

    if(Count==0){
        printf("Values less than cutoff.");
    }
     #endif

    return Count;
}

В предыдущем коде printf оператор помещается в #if #endif директива. Программное обеспечение рассматривает часть в директиве как комментарии кода, но не компилируется.

Коррекция - изменение #if 0 кому #if 1

Если только вы не намереваетесь деактивировать printf оператор, одним из возможных исправлений является повторная активация блока кода в #if #endif директива. Чтобы повторно активировать блок, измените #if 0 кому #if 1.

#include<stdio.h>
int Trim_Value(int* Arr,int Size,int Cutoff) 
{
 int Count=0;

 for(int i=0;i < Size;i++)
     {
      if(Arr[i]>Cutoff)
            {
             Arr[i]=Cutoff;
             Count++;
            }
     }


 /* Fix: Replace #if 0 by #if 1 */	  
 #if 1  
      if(Count==0)
           {
            printf("Values less than cutoff.");
           }
 #endif

 return Count;
}

Информация о результатах

Группа: Поток данных
Язык: C | C++
По умолчанию: off
Синтаксис командной строки: DEACTIVATED_CODE
Воздействие: Низкий
Представлен в R2013b