2017-02-20 25 views
-1

Я использую Visual Studio в данный момент, чтобы сделать что-то, что является довольно просто:Невозможно скомпилировать при оптимизации с помощью VS из-за проблемы с memcpy; рассматриваться в качестве неотъемлемого функции

memcpy(real, real_, n, sizeof(float)); 

где читать и real_ являются указателями типа поплавка *; указывая на начало двух блоков выделенной памяти размером = n * sizeof (float). У меня нет проблем с компиляцией этого без оптимизации, но после компиляции под/O2. Компилятор выдает следующее сообщение об ошибке:

Error 32 error C2167: 'memcpy' : too many actual parameters for intrinsic function 

Я не могу понять это, как я отключил встроенные функции и «CFLAGS» в командной сборке линии не включает/Oi

Я предполагаю, следовательно, что O2 делает это по умолчанию. Поэтому я использовал директиву pragama-компилятора для локального переключения как оптимизации, так и/или встроенных функций без эффекта.

На данный момент я полностью сбит с толку. Более того, у меня никогда не было проблем с этим. В настоящее время я работаю с VS 2013. MSDN мало или вообще не используется в этом вопросе.

EDIT:

Do'h - спасибо The Dark. Я отправлял четыре, а не три аргумента - см. Memcpy (3). Однако это компилировалось (даже без предупреждения) и отлично работало при компиляции без оптимизации.

+7

Ничего общего с intrinsic - 'memcpy' принимает 3 параметра, а не 4. Вы, вероятно, хотите сделать * вместо двух последних параметров. –

+0

Отлично. Как на земле он собирался без предупреждения (и работал) с очень большими массивами. – cdcdcd

+2

Отсутствует '#include '? – Ryan

ответ

1

В вашем фрагменте кода действительно слишком много аргументов. Перепишите его как:

memcpy(real, real_, n * sizeof(float)); 

И убедитесь, что вы включили <string.h>

Реальный вопрос:

  • Почему код обижая компилировать без /O2 вообще?

У вас есть предупреждения? У вас есть?

+0

Спасибо chqrlie - это странно. В том числе string.h ничего не меняет. Единственное, что я могу придумать, это то, что n, по какой-то случайности, больше, чем я думаю. Я не могу отлаживать код прямо сейчас, но буду делать, когда получаю шанс. – cdcdcd