Правильный стиль C

Правильный стиль C Reddit, Языки программирования, Винни-Пух, Скриншот, Программирование

IT-юмор

5.6K постов52.5K подписчиков

Добавить пост

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

1
Автор поста оценил этот комментарий

И это не сработает, потому что дефайн закрыли точкой-с-запятой. Итого вышло:

int;* a = (int*)malloc(10*sizeof(int));

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Не дефайн а тайпдеф)

показать ответы
5
Автор поста оценил этот комментарий

И чем же это будет более правильно?

1) int a[10] не будет инициализирован нулями. Чтобы он был инициализирован, нужно хотя бы написать int a[10] = {0}; (в с++ все сложнее, но тут вроде речь о С)

Ваш же calloc предоставит гарантированно обнуленную память

2) calloc, как и все средства выделения памяти в С, возвращает void*. Вы не можете просто так положить его в int*, нужен каст (ЕМНИП, некоторые компиляторы позволяют сделать это без каста, но это все равно неправильно)

3) Если вы намекаете на то, что у calloc'a есть явное указание количества элементов, как и у массива — ну, а на что оно влияет? Так или иначе размер указывается через sizeof, а не просто через количество элементов.

И размер выделенного массива у calloc и у malloc все равно будет одинаковый.


Кроме того, оба варианта неправильные, потому что при объявлении "int a[10]" тип переменной совсем не int*. Правильный тип переменной: int (*const)[10].


/zanuda_mode off

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
#define calloc (int*)calloc
показать ответы