Ответ 1
Является ли этот код? Если это так, и это не C99, вам нужно переместить объявление testfd до назначения для tarr [X].
Я столкнулся с некоторой проблемой здесь, я возился с машинным кодом и указателями функций, а там немного моего кода, который VС++ просто отказывается компилировать.
Скомпилируется и выполняется точно так, как ожидалось:
#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 С++ 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();
}
Я посмотрел на предположительно ошибочный код, и я не вижу в этом ничего плохого. Что происходит? Что-то мне не хватает?
Является ли этот код? Если это так, и это не C99, вам нужно переместить объявление testfd до назначения для tarr [X].
Код компилируется с предупреждениями в GCC и не компилируется с g++. Вам не хватает роли на этой линии. Вам также не хватает возвращаемого значения из основного.
int (*testfn)() = (int (*)()) tarr; // no more syntax error?