Aracılığıyla paylaş


Kullanarak ek kod bilgilerini belirtme _Analysis_assume_

C/C++ kodu için kod çözümleme aracına analiz işlemine ve uyarıları azaltmaya yardımcı olan ipuçları sağlayabilirsiniz. Ek bilgi sağlamak için aşağıdaki işlev makrosunu kullanın:

_Analysis_assume_( expr )

expr - true olarak değerlendirildiğinde kabul edilen herhangi bir ifade.

Kod çözümleme aracı, ifadeyle expr temsil edilen koşulun işlevin göründüğü noktada true olduğunu varsayar. Ayrıca, örneğin bir değişkene atamayla değiştirilene kadar expr true kalır.

Dekont

_Analysis_assume_ kod iyileştirmeyi etkilemez. Kod çözümleme aracının dışında, _Analysis_assume_ bir operasyon yok olarak tanımlanır.

Örnek

Aşağıdaki kod, C6388 kod çözümleme uyarısını düzeltmek için kullanır_Analysis_assume_:

#include <windows.h>
#include <sal.h>

// Requires pc to be null.
void f(_Pre_null_ char* pc);

// Calls free and sets ch to null.
void FreeAndNull(char** ch);

void test()
{
    char* pc = (char*)malloc(5);
    FreeAndNull(&pc);
    _Analysis_assume_(pc == NULL);
    f(pc);
}

_Analysis_assume_ son çare olarak kullanılmalıdır. Öncelikle işlevlerin sözleşmelerini daha kesin hale getirmeye çalışmamız gerekir. Bu durumda, kullanmak _Analysis_assume_yerine sözleşmesini FreeAndNull geliştirebiliriz:

#include <windows.h>
#include <sal.h>

// Requires pc to be null.
void f(_Pre_null_ char* pc);

// Calls free and sets ch to null.
_At_(*ch, _Post_null_)
void FreeAndNull(char** ch);

void test()
{
    char* pc = (char*)malloc(5);
    FreeAndNull(&pc);
    f(pc);
}

Ayrıca bkz.