Приведение структуры допускается с помощью компилятора GCC, но не с помощью Visual Studio. - PullRequest
0 голосов
/ 24 июня 2018

Я скачал пакет кодов Keccak с их веб-сайта , и сейчас я пытаюсь реализовать алгоритм Kangaroo Twelve с использованием источников, которые они предоставляют в пакете.

Однако у меня есть проблема, с которой я уже столкнулся при реализации деривации ключей AES-NI (это была точно такая же проблема), которая связана с приведением структуры, которое не разрешено в Visual Studio, как это происходит в блоках кода с компилятором GCC..

Так вот мой код:

int main()
{
    _m256i *stateAsLanes;

    unsigned int i;

    const UINT64 *curData0;
    const UINT64 *curData1;
    const UINT64 *curData2;
    const UINT64 *curData3;

    _m256i lanes0, lanes1, lanes2, lanes3, lanesL01, lanesL23, lanesH01, lanesH23;

    lanes0 = _mm256_loadu_si256((const _m256i *)&(curData0[0]));
    lanes1 = _mm256_loadu_si256((const _m256i *)&(curData1[0]));
    lanes2 = _mm256_loadu_si256((const _m256i *)&(curData2[0]));
    lanes3 = _mm256_loadu_si256((const _m256i *)&(curData3[0]));

    lanesL01= (_m256i )_mm256_permute2f128_ps((__m256)(lanes0), (__m256)(lanes2), 0x20);

    ...
}

Ошибка в последней строке:

приведение к типу "__m256i" не разрешено

приведение к типу "__m256" не разрешено

приведение к типу "__m256" не допускается

Iтолько дал вам кусок кода, поскольку это та же самая проблема «приведение к типу - Внутренний тип - не разрешено» везде в коде.

Итак, вот мой последний вопрос: как я могу получить этокод для компиляции под компилятором Visual Studio, а такжеэто с компилятором GCC?Есть ли способ "разрешить" такие виды приведения в Visual Studio?

1 Ответ

0 голосов
/ 24 июня 2018

Основная проблема: Visual Studio - это компилятор C, застрявший в прошлом тысячелетии. Все, что он поддерживает, является C89. Никаких вкусностей в C99, таких как bool, и, как вы обнаружили, struct cast. MS не выразил энтузиазма, чтобы изменить это в ближайшее время, если вообще.

Возможно, стоит попробовать скомпилировать его с помощью компилятора VS C ++, но имейте в виду, что C и C ++ - это разные языки, и существуют допустимые программы на C, которые являются допустимыми программами на C ++ с различным поведением. Я бы не стал доверять такому исполняемому файлу.

Мой совет - забыть о компиляции этого программного обеспечения с VS и установить последнюю версию gcc, которая работает в Windows (Cygwin, Mingw). Есть также Clang, который является хорошим кандидатом и имеет gcc-совместимые опции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...