ISO C forbids nested functions

0

Cześć pomoże ktoś , macro ma tworzyć funkcje dla dowolnego typu. Wywala mi błąd że ISO C zabrania zagnieżdżonych funkcji. Ktoś wie co mogę z tym zrobić?

#define CREATE_READ_FUNCTIONS(TYPE,SCAN)\
int read_##TYPE(TYPE *data,int size){\
if(data==NULL || size <= 0) return 1;\
int i,x;\
printf("Podaj dane : \n");\
for(i=0;i<size;i++)\
{\
    x=scanf(SCAN,data+i);\
    if(x==0)\
    {\
    	return 2;\
	}\
}\
return 0;\
}

0

Jak wywołujesz to makro?

0

mam if'a w zaleznosci od tego jaki uzytkownik wybiera typ danych, dla 0 będzie CREATE_READ_FUNCTIONS(int,"%d"); dla 1 CREATE_READ_FUNCTIONS(float,"%f");

0

if jest w funkcji. Tworzysz funkcję w funkcji. I to mówi błąd kompilatora.

1

CREATE wywołujesz w globalnym scope, a potem wywołujesz już konkretne funkcje, a nie makro.

0

tak ale najpierw musze wiedziec dla jakiego typu zmiennej chce go wywołać.

0

Zadeklaruj funkcje dla wszystkich typów, których się spodziewasz.

0

Takie pisanie makr to dopraszanie się o kłopoty. Może powiedz @Spander688 jaki efekt chcesz uzyskać?
EDIT:
Tutaj masz działający przykład - https://onlinegdb.com/B1MtaiQpV

1

Zwykle takie makra robi się w parach. Jedno definiuje funkcję (używane w plic .c), a drugie deklaruje funkcję (i używa w nagłówkach .h).
Tak jest zrobione np openSsl.

1 użytkowników online, w tym zalogowanych: 0, gości: 1