Как ввести бросок литерал в C

В панели управления U1 существует опция установить U1 для не соединения автоматически. Возможно, это - то, в чем Вы нуждаетесь. Когда Вы войдете в систему, U1 не запустится, и необходимо запустить его вручную через панель управления.

6
задан Günther Jena 1 September 2009 в 13:13
поделиться

4 ответа

Даже с приведением, сравнение остается верным во всех случаях определенного поведения. Компилятор по-прежнему определяет, что (signed int) 0 имеет значение 0, и по-прежнему определяет, что (signed int) x) неотрицательно, если ваша программа определила поведение (приведение из unsigned to signed не определено, если значение выходит за пределы диапазона для подписанного типа).

Таким образом, компилятор продолжает выводить предупреждение, потому что он продолжает полностью исключать случай else.

Изменить : Чтобы отключить предупреждение, напишите ваш код как

#define VALUE 0

int test(unsigned char x) {
#if VALUE==0
  return 1;
#else
  return x>=VALUE;
#endif
}
12
ответ дан 8 December 2019 в 05:22
поделиться

x - это беззнаковый символ , что означает, что он находится между 0 и 256. Поскольку int больше, чем char , преобразование unsigned char в signed int по-прежнему сохраняет исходное значение char . Поскольку это значение всегда> = 0, ваш if всегда истинен.

7
ответ дан 8 December 2019 в 05:22
поделиться

Все значения unsigned char могут идеально соответствовать вашему int , поэтому даже с приведением вы никогда не получите отрицательное значение. Вам нужно преобразование в signed char - однако в этом случае вы должны объявить x как signed в сигнатуре функции. Нет смысла лгать клиентам, что вам нужно беззнаковое значение, в то время как на самом деле вам нужно подписанное.

3
ответ дан 8 December 2019 в 05:22
поделиться

#define of VALUE to 0 означает, что ваша функция сводится к следующему:

int test(unsigned char x) {
  if (x>=0)
    return 0;
  else
    return 1;
}

Начиная с x всегда передается как беззнаковый char , тогда он всегда будет иметь значение от 0 до 255 включительно, независимо от того, приводите ли вы x или 0 в подписанное int в операторе if . Поэтому компилятор предупреждает вас, что x всегда будет больше или равно 0 , и что условие else никогда не будет достигнуто.

1
ответ дан 8 December 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: