ti-enxame.com

comparando int com size_t

Se eu tiver uma variável int e size_t, posso compará-las como:

int i=1;
size_t y=2;
if(i==y)
// do something..

ou eu tenho que escrever um deles?

40
Fahad Uddin

É seguro, desde que int seja zero ou positivo. Se for negativo, e size_t é de classificação igual ou superior a int, então o int será convertido em size_t e, portanto, seu valor negativo se tornará um valor positivo. Esse novo valor positivo é então comparado ao size_t valor, que pode (em uma coincidência surpreendentemente improvável) dar um falso positivo. Para ser realmente seguro (e talvez cauteloso), verifique se o int não é negativo primeiro:

/* given int i; size_t s; */
if (i>=0 && i == s)

e para suprimir avisos do compilador:

if (i>=0 && (size_t)i == s)
56
Philip Potter

size_t será algum tipo de número inteiro (embora possivelmente não assinado, por isso pode gerar um aviso), portanto a conversão apropriada deve ser feita automaticamente para você.

Como outros já disseram, você pode revisitar qualquer cálculo que esteja produzindo o int e ver se é possível fazê-lo em size_t em primeiro lugar, se você estiver calculando o tamanho necessário para algo.

0
Paul Tomblin

Não há problema em comparar um size_t valor com um valor int, o valor int será implicitamente convertido no tipo unsigned.

Alguns compiladores emitem um aviso quando você combina os tipos signed e unsigned nas comparações. Nesse caso, você pode converter explicitamente o valor signed em um tipo unsigned apropriado para suprimir o aviso.

0
codaddict