J'utilise MSVC et il semble que le code ci-dessous ne plante pas et le pointeur de fonction est initialisé à NULL par le compilateur.Les pointeurs de fonction seront-ils toujours initialisés à NULL?
int (*operate)(int a, int b);
int add(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
int main()
{
if(operate) //would crash here if not NULL
{
cout << operate(5,5);
}
operate = add;
if(operate)
{
cout << operate(5,5);
}
operate = subtract;
if(operate)
{
cout << operate(5,5);
}
return 0;
}
Il semble donc MSVC initialise des pointeurs de fonction NULL, mais si je construis cela sur gcc sous Linux serait-il aussi NULL? Est-ce que c'est conventionnel ou spécifique à MSVC, puis-je m'attendre à ce qu'il soit nul là où je vais?
Merci
Faites du pointeur une variable locale et vous verrez que ce n'est pas le cas. Vous avez un global non initialisé et le compilateur le mettra généralement dans le segment ['.bss'] (http://en.wikipedia.org/wiki/.bss) qui est initialisé à zéro. –
C ou C++, ce sont des langages différents. – GManNickG
@Jeff: où le compilateur le met est sans importance. Il doit être initialisé à zéro s'il a une durée de stockage statique. –