Никакой ; Вы не делаете , бросает результат, с тех пор:
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].
У меня есть
на Datagrid XAML, поместите атрибут:
IsReadOnly="True"