2017-02-23 3 views
-4

cstdarg peut être utilisé pour avoir un nombre variable d'arguments en C++.Est-il sécuritaire d'utiliser cstdarg?

Allons-y étape par étape. Une fois la fonction appelée, les arguments sont placés dans la pile dans l'ordre.

Si je donne un nombre incroyablement grand d'arguments stackoverflows et le plantage du PC.

Est-ce correct? Si c'est le cas, n'est-il pas dangereux pour quiconque d'utiliser cstdarg?

+1

Par conséquent, il est dangereux d'utiliser un pointeur car il ne pointe pas forcément vers un objet valide. –

+2

Qu'est-ce que cstdarg.h? Voulez-vous dire ''? –

+3

_ "Si je donne un nombre incroyablement grand d'arguments stackoverflows et les pannes de pc. Est-ce correct? Si c'est le cas, n'est-il pas dangereux pour quiconque d'utiliser cstdarg?" _ Ceci est un non sequitur complet. Comment diable êtes-vous arrivé à cette conclusion? Par exemple, si vous conduisez à 6999999 km/h, vous vous écraserez et les gens mourront; Est-ce que cela rend toutes les voitures "dangereuses pour quiconque"? Non .. –

Répondre

0

Chaque véritable compilateur C++ est contraint par des limitations physiques réelles et des lois de la nature. La norme C++ tient compte de cela en spécifiant des «limites de mise en œuvre» à l'annexe B et en exigeant des implémentations pour documenter leurs limites réelles. La norme recommande également une valeur minimale pour chacune de ces limites.

La limite que vous recherchez est probablement "Arguments dans un appel de fonction", dont la limite minimale recommandée est de 256 en C++ 14. Consultez la documentation de votre compilateur pour la limite réelle. Une fois que vous avez coché, il est prudent d'utiliser des arguments variables jusqu'à la limite de votre plate-forme personnelle, et il est raisonnable d'expédier du code portable qui reste dans les valeurs limites recommandées par la norme. (Les utilisateurs dont les compilateurs ne respectent pas le minimum recommandé seront probablement conscients de ce fait et surveilleront attentivement.)

+0

Merci pour votre réponse aimable. Kerrek SB –

+0

Cela n'implique pas nécessairement que passer 256 arguments est sûr. Généralement, les compilateurs n'imposent pas de limites fixes. les limites variables peuvent dépendre de la mémoire disponible. Vous pourriez être en mesure de passer 256 arguments dans un cas, mais dans un autre, il se peut qu'il n'y ait pas assez de mémoire disponible parce qu'il est consommé par d'autres choses, ou parce que les arguments sont grands. –

+0

@KeithThompson: C'est vrai; Dans un certain sens, vous ne savez pas en général si vous êtes autorisé à appeler une fonction à n'importe quel moment si vous n'avez pas le contexte complet, puisque vous pouvez être à la fin de la pile d'appels. –