Я реализовал функцию abs(). Я получаю эту ошибку:Внутренняя функция не может быть определена (C)
Intrinsic function, cannot be defined
Что я сделал не так? Я использую Visual Studio 2005.
Я реализовал функцию abs(). Я получаю эту ошибку:Внутренняя функция не может быть определена (C)
Intrinsic function, cannot be defined
Что я сделал не так? Я использую Visual Studio 2005.
Intrinsic function, cannot be defined
В этом случае intrinsic означает, что компилятор уже имеет реализацию функции под названием abs
, и которые вы не можете переопределить.
Решение? Измените на ваше имя функции на что-то еще, snakile_abs
например.
Для получения дополнительной информации проверьте документацию MSDN по функции abs
.
Проблема не в заголовке или нет.
Проблема заключается в том, что встроенные функции, то есть функции, которые компилятор распознает и реализует сам, обычно с оптимизациями, которые не будут доступны только в C-коде, не могут быть определены.
Имена всех математических функций (см math.h)
имена всех математических функций с префиксом «F» или «L».
зарезервированы для реализации.
Определение static int abs(int x) { ... }
должно быть законным, но просто int abs(int x) { ... }
имеет неопределенное поведение, и, таким образом, одна разумная вещь, которую может сделать компилятор, - это ошибка.
Некоторые заголовки могут по-прежнему иметь '#define abs __builtin_magic_abs' или тому подобное. Поскольку препроцессор сначала видит текст, вы все равно пытаетесь определить 'static int __buildin_magic_abs (int x) {...}'. Поскольку abs() - это имя, определенное в стандартной библиотеке C, вероятно, будет неразумным (и, конечно, не переносимым), чтобы попытаться заменить его по имени. – RBerteig
До тех пор, пока вы не «включаете» любой заголовок, который определяет 'abs' или' # undef', перед определением вашей собственной версии, стандарт специально позволяет вам заменить его на 'static'. Однако замена версии 'extern' - неопределенное поведение. –
Спасибо. Не могли бы вы привести пример? Что вы подразумеваете под «компилятор ... реализует себя»? Что делать, если мне нужно использовать эту функцию abs()? – snakile
@sna '#include' –
Artefacto
Включает. Все еще не работает –
snakile