Tüm işlevlerin aynı döndürme türünü paylaştığını varsayarsak, her biri bir "genel" işlev işaretçisi tarafından çağrılan, boş parantezlerle bildirilen (bu nedenle argümanlarını belirtmez) geçerli midir? Tam olarak bu şekildeBu, farklı bir prototiple işlevlerini bir sözde genel işlev işaretçisi ile çağırmasına izin veriliyor mu?
#include <stdio.h>
void fun1(void)
{
printf("fun1\n");
}
void fun2(int a)
{
printf("fun2: %d\n", a);
}
void fun3(int a, int b)
{
printf("fun3: %d %d\n", a, b);
}
int main(void)
{
void (*pf)(); // pseudo-generic function pointer
pf = fun1;
pf();
pf = fun2;
pf(0);
pf = fun3;
pf(1, 2);
return 0;
}
Olası çoğaltılabilir [İşlev işaretçisi bağımsız değişken türleri?] (Http://stackoverflow.com/questions/20835534/function-pointer-without-arguments-types) –
İlginç soru. "Olduğu gibi derleme ve beklendiği gibi çalışır?" evet, "-Wall" ile uyarı yazmadan "derler mi?" derleyicilerimde evet :-) – Dilettant
Evet, paranoyak modda bile uyarı yok '-Wampra -pedantic -Wconversion' GCC 4.9 ... @Dilettant – alk