教本の記憶域の動的確保ってトコで、例文には

#include<stdio.h>
#include<stdlib.h>

int main(void){
int *x;
x=calloc(1,sizeof(int));

if(x==NULL)
puts("記憶域の確保に失敗しました");
else{
*x=57;
printf("*x=%d\n",*x);
free(x);
}
return 0;
}

ってあったんだが、voidからint *に変換出来ません、とかって変なエラー弾き出すから
(int *)calloc(1,sizeof(int));って風にキャストしてみたら通ったんだが
どっかの本でキャストは危なっかしいから出来れば避けろ、って聞いたからこのまま行っていいのか分からない
そもそも教本だとキャストしなくても出来るっぽいし、何故エラーが出たのか分からない、一体どういう事なんだ・・・