Не могу найти мою синтаксическую ошибку, VC ++ говорит, что есть одна - PullRequest
2 голосов
/ 12 февраля 2010

У меня тут небольшая проблема, я возился с машинным кодом и указателями функций, и есть немного моего кода, который VC ++ просто отказывается компилировать.

Это компилируется и работает точно так, как ожидалось:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char tarr[] = {0xb8, 222, 0, 0, 0, 0xc3};

    int (*testfn)() = tarr;

    printf("%d", testfn()); // prints 222

    getchar();
}

Однако Visual C ++ Express не будет компилировать следующее, выдавая эту ошибку: error C2143: syntax error : missing ';' before 'type'

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char* tarr = (char*) malloc(1000);
    tarr[0] = 0xb8;
    tarr[1] = 222;
    tarr[2] = 0;
    tarr[3] = 0;
    tarr[4] = 0;
    tarr[5] = 0xc3;

    int (*testfn)() = tarr; // syntax error here

    printf("%d", testfn());

    getchar();
}

Я посмотрел на предположительно неисправный код и не вижу в этом ничего плохого. В чем дело? Я что-то упускаю?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2010

Это код C? Если это так, и это не C99, то вам нужно переместить объявление testfd до назначения для tarr [X].

1 голос
/ 12 февраля 2010

Код компилируется с предупреждениями в GCC и не компилируется с G ++. Вы пропустили бросок на этой линии. Вам также не хватает возвращаемого значения из main.

    int (*testfn)() = (int (*)()) tarr; // no more syntax error?
...