Как удалить пустую строку DataGrid при привязке с ObservableCollection <T>?

Никакой ; Вы не делаете , бросает результат, с тех пор:

  • Это является ненужным, поскольку void * автоматически и безопасно способствуется любому другому типу указателя в этом случае.
  • Это добавляет помеху к коду, составы исполнителей не очень легко считать (особенно, если тип указателя долог).
  • Это заставляет Вас повторить себя, которые обычно плохи.
  • Это может скрыть ошибку, если Вы забыли включать <stdlib.h>. Это может вызвать катастрофические отказы (или, хуже, не вызывают катастрофический отказ до пути позже в некоторой полностью другой части кода). Рассмотрите то, что происходит, если указатели и целые числа по-другому измерены; тогда Вы скрываете предупреждение путем кастинга и могли бы потерять биты возвращенного адреса.Примечание: с неявных функций C99 не стали от C, и этот момент больше не является важным, так как нет никакого автоматического предположения, что необъявленные функции возвращаются int.

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

Также примечание, как комментаторы указывают, что вышеупомянутые переговоры о прямом C, не C++. Я очень твердо верю в C и C++ как отдельные языки.

Для добавления далее код напрасно повторяет информацию о типе (int), который может вызвать ошибки. Лучше разыменовать указатель, используемый, чтобы сохранить возвращаемое значение, "заблокировать" два вместе:

int *sieve = malloc(length * sizeof *sieve);

Это также перемещается length в переднюю сторону для увеличенной видимости и отбрасывает избыточные круглые скобки с sizeof; они только необходимы , когда аргументом является имя типа. Многие люди, кажется, не знают (или игнорируют) это, которое делает их код более подробным. Помните: sizeof не функция!:)

<час>

При перемещении length к передней стороне может видимость увеличения в некоторых редких случаях, нужно также обратить внимание, что в общем случае, должно быть лучше записать выражение как:

int *sieve = malloc(sizeof *sieve * length);

Начиная с хранения sizeof первый, в этом случае, гарантирует, что умножение сделано по крайней мере с [1 111] математика.

Сравните: malloc(sizeof *sieve * length * width) по сравнению с [1 113] второе может переполниться length * width, когда width и length меньшие типы, чем [1 117].

40
задан Jonathan Leffler 7 September 2013 в 22:52
поделиться