2016-02-15 4 views
0

CppCheck (v1.72) говорит, что существует разница при использовании (*f) или только *f. Этого случайРазница между * f и (* f) в C?

void test(float *f) 
{ 
    float a = 0.0f; 
    if(*f>a) 
    { 
     (*f) += 0.01f; 
     if(*f<a) *f=a; 
    } 
} 

cppCheck говорит «противоположные условия в вложенной„если“блоки приводят к мертвому блоку кода, где, как

void test(float *f) 
{ 
    float a = 0.0f; 
    if(*f>a) 
    { 
     *f += 0.01f; 
     if(*f<a) *f=a; 
    } 
} 

делает cppCheck счастливым. Что именно разница?

+0

Без разницы. Что-нибудь еще? – haccks

+0

да, почему cppcheck имеет значение здесь, когда его нет? – floquet22

+1

Потому что в первом 'if' вы спросили' * f> a' и во вложенном (втором) 'if' вы спросили об обратном - Вероятно, CppCheck не может видеть, что' * f' был изменен – ColdSteel

ответ

4

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

Однако cppcheck не является непогрешимым. Не предполагайте, что если cppchec k нет проблем, их нет. Это просто еще один полезный инструмент, который помогает обнаружить плохой код, который в противном случае мог бы остаться незамеченным.

1

Благодарим вас за сообщение об этой проблеме здесь, в stackoverflow. Я создал билет об этой проблеме на ccpcheck's bug tracker.

Смежные вопросы