Я пытаюсь использовать calloc
в моей программе. С явным приведением он компилируется и работает нормально, но когда я пытаюсь удалить явное приведение malloc Я вижу следующую ошибку:
Присвоение ‘… *’ (он же ‘……. *’) несовместимого типа ‘void *’
Как я могу скомпилировать свой код без явного приведения calloc
в Xcode?
Вы пытаетесь скомпилировать ваш код на C как C ++.
Хотя верно то, что некоторый код C также действителен в C ++, вы натолкнулись на пример кода C, который недопустим в C ++.
То есть C ++ не предлагает неявные преобразования в / из void *
что С делает.
Вам следует всегда компилируйте код на C, используя компилятор C, по следующим трем причинам:
Единственная причина, по которой люди пытаются компилировать код C с помощью компилятора C ++, заключается в том, что они ожидают использования своего кода C в проекте C ++. Однако в этом нет необходимости, поскольку вы обычно можете скомпилировать код C с помощью компилятора C, скомпилировать код C ++ с помощью компилятора C ++ и затем связать их вместе. Например:
gcc -c c_code.c
g++ -c cpp_code.cpp
gcc cpp_library.o c_library.o
В C ++ вообще плохая идея использовать *alloc
функции. Те, кто программируют специально на C ++, обычно *alloc
использовать.
В C это всегда плохая идея явно приводить void *
как ссылка, которую вы предоставили объясняет. Те, кто программирует специально на C, будут трепетать перед ненужным образцом, который потенциально может привести к ошибкам.
Других решений пока нет …