• [^] # Re: Donc pour résumer...

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 4.

    le mangling, c'est juste le premier truc qui se voit et qui empêche que ça marche. Si tes compialteurs ont le même mangling (comme en C, vu que c'est souvent juste "on met le nom de la fonction dans le symbole", avec éventuellement un underscore en préfixe), tu peux avoir aussi des problèmes beaucoup plus chiants à débugger, quelques exemples au hasard:
    - Les deux compilateurs ne mettent pas les arguments sur la stack dans le même ordre
    - Les long int ne font pas la même taille
    - Un des deux compilateurs choisit de passer des paramètres via des registres, l'autre non (ou pas les mêmes paramètres dans les mêmes registres)
    - La gestion des varargs est différente
    - ...

    Donc, mélanger les compilateurs, même si on fait du C ou du "struct&pointers", c'est dangereux. Sauf s'il y a une ABI définie pour la plateforme qui précise tout ça (et pas juste le mangling). Et quand il n'y a pas d'ABI standard, finalement, il vaut peut être mieux que le mangling soit différent, au moins, on voit le problème à l'édition de liens (ou lors du chargement du plugin) et pas à l'exécution (on fait pas du Python, ici ;)).