Что такое & & & операция в C
#include <stdio.h>
volatile int i;
int main()
{
int c;
for (i = 0; i < 3; i++)
{
c = i &&& i;
printf("%dn", c);
}
return 0;
}
вывод вышеуказанной программы скомпилирован с помощью gcc - это
0
1
1
С -Wall или , gcc выдает предупреждение:
warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]
как c оцениваются в вышеуказанной программе?
2 ответов:
это
c = i && (&i);, причем вторая часть является избыточной, так как&iникогда не будет оценено какfalse.для пользовательского типа, где вы можете фактически перегрузить унарный
operator &, это может быть по-другому, но это все еще очень плохая идея.если вы включить предупреждения, вы получите что-то вроде:
внимание: адрес ‘i 'всегда будет оцениваться как 'true'
нет
&&&оператор или маркер в C. Но&&(логическое "и") и&(унарный адрес или побитовые операторы "и") существуют.на максимальная Мунка правило, это:
c = i &&& i;эквивалентно этому:
c = i && & i;задает
c1, если иiи&iистинны, и 0, если одно из них является ложным.для int любое ненулевое значение равно true. Для указателя любое ненулевое значение значение true (и адрес объекта всегда не равен нулю). Итак:
задает
c1, ЕслиiНе равно нулю, или до0еслиiравна нулю.что означает, что
&&&используется здесь только для сознательного запутывания. Задание может быть любым из следующих:c = i && 1; c = !!i; c = (bool)i; // C++ or C with <stdbool.h> c = i ? 1 : 0; /* C */ c = i ? true : false; // C++
Comments