2015-09-26 3 views
0

Я пытаюсь написать функцию, которая проверяет через char* a[], и часто в конечном итоге, используя что-то вродеЯвляется ли v [i ++] неопределенным в C?

if(a[i] == 'x'){ 
    i++; 
    //... 
} 

Теперь я действительно хотел бы изменить это a[i++] вместо этого, но это, кажется, не Работа.

Вопрос:

я делаю что-то здесь не так, или есть чистая альтернатива, чтобы избежать i++?

Примечание: В настоящее время 3 из моих 13 рядов в функции: i++, что делает ее значительно больше, чем она есть на самом деле.

+3

Можете ли вы добавить пример, где он не работает? – wimh

+0

К сожалению, нет, это просто проблема, которую у меня было несколько недель назад, и мне не удалось найти какую-либо информацию о том, является ли она законной или неюридической. Когда обсуждали это со своим помощником по комнате, у него были схожие проблемы, поэтому Я решил спросить, является ли это законным. Если я снова буду сталкиваться с проблемами с ним, я вернусь сюда;) – Elyviere

+0

Это не неопределенный, но имеет другую семантику. – Olaf

ответ

8

if (a[i++] == 'x') сами по себе хорошо в C. Это, однако, семантический разное: Ваш исходный код увеличивает только i, если условие истинно, в то время как if (a[i++] == 'x') всегда увеличивает i.

+0

Спасибо, я обязательно учту это! – Elyviere

2

v[i++] не является неопределенным, если v[i] не является неопределенным, а i++ не вызывает переполнение целого числа со знаком.

if(a[i++] == 'x'){ 
    ... 
} 

если не эквивалентно

if(a[i] == 'x'){ 
    i++; 
    ... 
} 

, потому что бывшие inclements i каждый раз, когда это выполняется, но последний inclements i только если a[i] == 'x' правда.

++i является альтернативой избегать i++. Обратите внимание, что значение ++i отличается от i++. (++i)-1 может быть полезным.

+0

Спасибо, я обязательно учту это! – Elyviere

+1

Как '(++ i) -1' лучше, чем' i ++'? – fuz

+1

Я не думаю, что '(++ i) -1' лучше, чем' i ++'. Это просто альтернатива тем, кто ненавидит «i ++». – MikeCAT

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