2010-08-24 3 views

ответ

3

Intrinsic function, cannot be defined

В этом случае intrinsic означает, что компилятор уже имеет реализацию функции под названием abs, и которые вы не можете переопределить.

Решение? Измените на ваше имя функции на что-то еще, snakile_abs например.

Для получения дополнительной информации проверьте документацию MSDN по функции abs.

2

Проблема не в заголовке или нет.

Проблема заключается в том, что встроенные функции, то есть функции, которые компилятор распознает и реализует сам, обычно с оптимизациями, которые не будут доступны только в C-коде, не могут быть определены.

+0

Спасибо. Не могли бы вы привести пример? Что вы подразумеваете под «компилятор ... реализует себя»? Что делать, если мне нужно использовать эту функцию abs()? – snakile

+0

@sna '#include ' – Artefacto

+0

Включает . Все еще не работает – snakile

0

Имена всех математических функций (см math.h)

имена всех математических функций с префиксом «F» или «L».

зарезервированы для реализации.

0

Определение static int abs(int x) { ... } должно быть законным, но просто int abs(int x) { ... } имеет неопределенное поведение, и, таким образом, одна разумная вещь, которую может сделать компилятор, - это ошибка.

+1

Некоторые заголовки могут по-прежнему иметь '#define abs __builtin_magic_abs' или тому подобное. Поскольку препроцессор сначала видит текст, вы все равно пытаетесь определить 'static int __buildin_magic_abs (int x) {...}'. Поскольку abs() - это имя, определенное в стандартной библиотеке C, вероятно, будет неразумным (и, конечно, не переносимым), чтобы попытаться заменить его по имени. – RBerteig

+1

До тех пор, пока вы не «включаете» любой заголовок, который определяет 'abs' или' # undef', перед определением вашей собственной версии, стандарт специально позволяет вам заменить его на 'static'. Однако замена версии 'extern' - неопределенное поведение. –

Смежные вопросы