MacOS एक्स 10.6.6 पर मैनुअल पृष्ठ पर एक नज़र ले रहा है, यह दो काम करता है, atof()
और atof_l()
दस्तावेजों, और मुझे लगता है कि यही कारण है कि समारोह थ्रेड-सुरक्षित नहीं समझा जाता है के रूप में एक संकेत देता है पर शक:
SYNOPSIS
#include <stdlib.h>
double atof(const char *str);
#include <xlocale.h>
double atof_l(const char *str, locale_t loc);
वर्णन
atof()
फ़ंक्शन स्ट्रिंग के प्रारंभिक भाग को स्ट्रेट से दोहरा प्रतिनिधित्व करने के लिए इंगित करता है।
strtod(str, (char **)NULL);
दशमलव बिंदु चरित्र कार्यक्रम किसी भी स्थान (श्रेणी LC_NUMERIC) में परिभाषित किया गया है:
यह बराबर है।
जबकि atof()
फ़ंक्शन वर्तमान लोकेल का उपयोग करता है, atof_l()
फ़ंक्शन सीधे लोकेल को पारित किया जा सकता है। अधिक जानकारी के लिए xlocale (3) देखें।
कार्यान्वयन नोट्स
atof()
समारोह थ्रेड-सुरक्षित है और यह भी नहीं async-रद्द-सुरक्षित नहीं है।
atof()
फ़ंक्शन को strtod()
द्वारा बहिष्कृत कर दिया गया है और इसे नए कोड में उपयोग नहीं किया जाना चाहिए।
त्रुटियों
समारोह atof()
एक त्रुटि पर errno
का मूल्य को प्रभावित जरूरत नहीं है।
मेरे संदेह है कि अगर वर्तमान स्थान एक और धागा द्वारा बदल दिया गया है, जबकि atof()
समारोह निष्पादित हो रहा है, परिणाम की गारंटी नहीं है है। अन्यथा, चेतावनी के लिए कोई कारण नहीं लगता है।
मैं चारों ओर डार्विन सी पुस्तकालय स्रोत कोड की एक निश्चित स्थान के लिए poked है, लेकिन एक नहीं मिली है। आप atoi()
के लिए FreeBSD स्रोत कोड में जाते हैं, यह स्पष्ट है समारोह कार्यान्वयन मामूली बात है कि:
int
atoi(str)
const char *str;
{
return (int)strtol(str, (char **)NULL, 10);
}
(हाँ, यहाँ तक कि एक नमूने के परिभाषा का उपयोग नहीं है!)
strtol()
के लिए आदमी पेज नहीं है थ्रेड सुरक्षा या async- रद्द सुरक्षा के बारे में weasel शब्द है। हालांकि, strtol()
के लिए स्रोत कोड का शीघ्रता से अवलोकन से पता चलता है कि यह isspace()
है, जो वातावरण से प्रभावित होता है का उपयोग करता है:
आईएसओ/आईईसी 9899: 1999, धारा 7.11.1.1 setlocale समारोह
7.4 में एकमात्र कार्य जिसका व्यवहार वर्तमान लोकेल से प्रभावित नहीं है, वह isdigit और isxdigit हैं।
(कहाँ §7.4 <ctype.h>
के लिए है।)
अब, जबकि मुझे यकीन है कि इस कोड को क्या डार्विन (MacOS एक्स) में है के समान है नहीं कर रहा हूँ, यह समान होने की संभावना है। मुझे लगता है कि मैन पेजों में इरेटा के लिए कमरा हो सकता है - यह इतना स्पष्ट नहीं है कि जिस पृष्ठ को सुधार की आवश्यकता है वह atoi()
या strtol()
के लिए एक है।, के बाद से आदमी strtol strtol()
के साथ एक धागे की सुरक्षा की समस्या का कोई जिक्र नहीं है
long
strtol(const char * __restrict nptr, char ** __restrict endptr, int base)
{
return strtol_l(nptr, endptr, base, __current_locale());
}
आप हो सकता है:
दिलचस्प सवाल ... – ChristopheD
अधिकांश एटोई कार्यान्वयन केवल स्ट्रेटोल रैपर हैं जो ऐसा लगता है। – Anycorn
मैंने इस प्रश्न का शीर्षक बदल दिया है ताकि यह कम से कम एक वैध प्रश्न हो। –