C ++ හදුනාගැනීමක් තුළ යටි ඉරි ලකුණු භාවිතා කිරීම පිළිබඳ නීති මොනවාද?


937

සාමාජික විචල්‍යයන් දේශීය විචල්‍යයන් හෝ පරාමිතීන් වෙනුවට සාමාජික විචල්‍යයන් බව දැක්වීමට යම් ආකාරයක උපසර්ගයක් සහිත සාමාජික විචල්‍යයන් නම් කිරීම C ++ හි සාමාන්‍ය දෙයකි. ඔබ පැමිණියේ MFC පසුබිමක නම්, ඔබ බොහෝ විට භාවිතා කරනු m_fooඇත. මමත් myFooඉඳහිට දැක ඇත්තෙමි .

C # (හෝ සමහර විට .NET) මෙන්, යටි ඉරි ලකුණු භාවිතා කිරීම නිර්දේශ කරයි _foo. මෙය C ++ ප්‍රමිතියෙන් අවසර දී තිබේද?


3
ඒ ගැන මේ glibc අත්පොත පිටුව සොයා ගත හැක gnu.org/software/libc/manual/html_node/Reserved-Names.html සංස්කරණය කරන්න: ද බලන්න opengroup.org/onlinepubs/009695399/functions/xsh_chap02_02.html
CesarB

6
මෙම නීති රීති නොදැන සිටීම ඔබේ කේතය සම්පාදනය කිරීම හෝ ක්‍රියාත්මක නොවන බව අඟවන්නේ නැත, නමුත් බොහෝ විට ඔබේ කේතය විවිධ සම්පාදකයින්ට සහ අනුවාදයට ගෙන යා නොහැකි වනු ඇත, මන්ද එය නමක් නොමැති බවට සහතික විය නොහැකි බැවිනි. ගැටුම්. මෙය උපස්ථ කිරීම සඳහා සෑම තැනකම _ ලොකු අකුර නම් කිරීමේ සම්මුතියක් ලෙස භාවිතා කරන වැදගත් පද්ධතියක් නිශ්චිතව ක්‍රියාත්මක කිරීම ගැන මම දනිමි. මෙහි කිසිදු දෝෂයක් නොමැත. ඇත්ත වශයෙන්ම එය නරක පුරුද්දකි.
g24l

Answers:


858

නීති (C ++ 11 හි වෙනස් නොවූ):

  • ක්‍රියාත්මක කිරීම සඳහා භාවිතා කිරීම ඇතුළුව ඕනෑම විෂය පථයක වෙන් කර ඇත සාර්ව :
    • යටි ඉරි වලින් ආරම්භ වන හඳුනාගැනීම් වහාම ලොකු අකුරකින්
    • යාබද යටි ඉරි (හෝ "ද්විත්ව යටි ඉරි") අඩංගු හඳුනාගැනීම්
  • ගෝලීය නාම අවකාශයේ වෙන් කර ඇත:
    • හඳුනාගැනීම් යටි ඉරි වලින් ආරම්භ වේ
  • එසේම, stdනාම අවකාශයේ ඇති සියල්ල වෙන් කර ඇත. (අච්චු විශේෂීකරණය එකතු කිරීමට ඔබට අවසර ඇත.)

2003 සී ++ ප්‍රමිතියෙන්:

17.4.3.1.2 ගෝලීය නම් [lib.global.names]

සමහර නම් සහ ක්‍රියාකාරී අත්සන් සෑම විටම ක්‍රියාත්මක කිරීම සඳහා වෙන් කර ඇත:

  • ද්විත්ව අවධාරනය කරන සෑම නමක්ම (__ ) හෝ යටි ඉරි වලින් ආරම්භ වන සෑම නමක්ම ලොකු අකුරකින් (2.11) ඕනෑම භාවිතයක් සඳහා ක්‍රියාත්මක කිරීම සඳහා වෙන් කර ඇත.
  • යටි ඉරි වලින් ආරම්භ වන සෑම නමක්ම ගෝලීය නාම අවකාශයේ නමක් ලෙස භාවිතා කිරීම සඳහා ක්‍රියාත්මක කිරීම සඳහා වෙන් කර ඇත. 165 යි

165) එවැනි නම් නාම අවකාශයේ ද වෙන් කර ඇත ::std(17.4.3.1).

C ++ C ප්‍රමිතිය මත පදනම් වී ඇති නිසා (1.1 / 2, C ++ 03) සහ C99 යනු සම්මත යොමු කිරීමක් (1.2 / 1, C ++ 03) 1999 C ප්‍රමිතියෙන් ද මේවා අදාළ වේ:

7.1.3 වෙන්කර ඇති හඳුනාගැනීම්

සෑම ශීර්ෂ පා its යක්ම ඒ හා සම්බන්ධ උප කාණ්ඩයේ ලැයිස්තුගත කර ඇති සියලුම හඳුනාගැනීම් ප්‍රකාශයට පත් කරයි හෝ නිර්වචනය කරයි, තවද ඒ හා සම්බන්ධ අනාගත පුස්තකාල දිශාවන්හි ලැයිස්තුගත කර ඇති හඳුනාගැනීම් විකල්ප ලෙස ප්‍රකාශයට පත් කරයි හෝ අර්ථ දක්වයි.

  • යටි ඉරි වලින් ආරම්භ වන සියලුම හැඳුනුම්පත් සහ ලොකු අකුරකින් හෝ වෙනත් යටි ඉරි වලින් ඕනෑම භාවිතයක් සඳහා සෑම විටම වෙන් කර ඇත.
  • යටි ඉරි වලින් ආරම්භ වන සියලුම හඳුනාගැනීම් සාමාන්‍ය හා ටැග් නාම අවකාශයන්හි ගොනු විෂය පථය සහිත හඳුනාගැනීම් ලෙස භාවිතා කිරීම සඳහා සැමවිටම වෙන් කර ඇත.
  • පහත දැක්වෙන ඕනෑම උප වගන්තිවල (අනාගත පුස්තකාල උපදෙස් ඇතුළුව) සෑම සාර්ව නාමයක්ම ඒ හා සම්බන්ධ ඕනෑම ශීර්ෂයක් ඇතුළත් කර ඇත්නම් නිශ්චිතව දක්වා ඇති පරිදි වෙන් කර ඇත; වෙනත් ආකාරයකින් පැහැදිලිව ප්‍රකාශ නොකළහොත් (7.1.4 බලන්න).
  • පහත දැක්වෙන ඕනෑම උප වගන්තිවල (අනාගත පුස්තකාල උපදෙස් ඇතුළුව) බාහිර සම්බන්ධතා ඇති සියලුම හඳුනාගැනීම් බාහිර සම්බන්ධතා සහිත හඳුනාගැනීම් ලෙස භාවිතා කිරීම සඳහා සැමවිටම වෙන් කර ඇත. 154 යි
  • පහත දැක්වෙන ඕනෑම උප වගන්තිවල (අනාගත පුස්තකාල උපදෙස් ඇතුළුව) ලැයිස්තුගත කර ඇති ගොනු හඳුනාගැනීමේ යන්ත්‍රය සාර්ව නාමයක් ලෙස භාවිතා කිරීම සඳහා වෙන් කර ඇති අතර ඒ හා සම්බන්ධ ඕනෑම ශීර්ෂයක් ඇතුළත් කර ඇත්නම් එකම නාම අවකාශයේ ගොනු විෂය පථය සහිත හඳුනාගැනීමක් ලෙස වෙන් කර ඇත.

වෙනත් හඳුනාගැනීම් වෙන් කර නොමැත. වැඩසටහන වෙන් කර ඇති සන්දර්භයක් තුළ (7.1.4 ට අවසර දී ඇති ඒවා හැර) හඳුනාගැනීමක් ප්‍රකාශ කරන්නේ නම් හෝ අර්ථ දක්වන්නේ නම් හෝ වෙන් කළ හඳුනාගැනීමක් සාර්ව නාමයක් ලෙස අර්ථ දක්වන්නේ නම්, හැසිරීම නිර්වචනය නොකෙරේ.

#undefඉහත ලැයිස්තුගත කර ඇති පළමු කණ්ඩායමේ අනන්‍යකාරකයේ කිසියම් සාර්ව අර්ථ දැක්වීමක් වැඩසටහන විසින් ඉවත් කරන්නේ නම් , හැසිරීම නිර්වචනය කර නැත.

154) බාහිර සම්බන්ධක සමග වෙන් හඳුනා ලැයිස්තුව ඇතුළත් errno, math_errhandling, setjmp, සහ va_end.

වෙනත් සීමාවන් අදාළ විය හැකිය. උදාහරණයක් ලෙස, පොසික්ස් ප්‍රමිතිය සාමාන්‍ය කේතයෙන් පෙන්විය හැකි හඳුනාගැනීම් රාශියක් රඳවා තබා ගනී:

  • ප්‍රාග්ධනයකින් ආරම්භ වන නම් E ආරම්භ වන නම් ඉලක්කම් හෝ ලොකු අකුරක් අනුගමනය කරයි:
    • අතිරේක දෝෂ කේත නම් සඳහා භාවිතා කළ හැකිය.
  • එක්කෝ isහෝ ආරම්භ වන නම්toකුඩා අකුරකින් පසුව
    • අමතර අක්ෂර පරීක්ෂණ සහ පරිවර්තන කාර්යයන් සඳහා භාවිතා කළ හැකිය.
  • LC_ලොකු අකුරකින් පසුව ආරම්භ වන නම්
    • ස්ථානීය ලක්ෂණ නියම කරන අතිරේක මැක්‍රෝස් සඳහා භාවිතා කළ හැකිය.
  • පවත්නා සියලුම ගණිත කර්තව්‍යයන්ගේ නම් ප්‍රමාණවත් fහෝ lවෙන් කර ඇත
    • පිළිවෙලින් පාවෙන සහ දිගු ද්විත්ව තර්ක මත ක්‍රියාත්මක වන අනුරූප කාර්යයන් සඳහා.
  • SIGලොකු අකුරකින් පසුව ආරම්භ වන නම් වෙන් කර ඇත
    • අමතර සං signal ා නාම සඳහා.
  • SIG_ලොකු අකුරකින් පසුව ආරම්භ වන නම් වෙන් කර ඇත
    • අතිරේක සං signal ා ක්‍රියා සඳහා.
  • පටන් නම් str, memහෝ wcsඑය කුඩා අකුරු අනුගමනය වෙන්කර
    • අතිරේක නූල් සහ අරා කාර්යයන් සඳහා.
  • ඕනෑම කුඩා අකුරකින් ආරම්භ වන PRIහෝ SCNපසුව නම් හෝX වෙන් කර ඇත
    • අතිරේක ආකෘති පිරිවිතර මැක්‍රෝස් සඳහා
  • අවසන් වන _tනම් වෙන් කර ඇත
    • අතිරේක වර්ග නාම සඳහා.

ඔබගේ අරමුණු සඳහා මෙම නම් භාවිතා කිරීම දැන් ගැටලුවක් නොවිය හැකි නමුත්, එම ප්‍රමිතියේ අනාගත අනුවාදයන් සමඟ ගැටීමේ හැකියාව ඔවුන් මතු කරයි.


පුද්ගලිකව මම අවධාරනය සමඟ හඳුනාගැනීම් ආරම්භ නොකරමි. මගේ රීතියට නව එකතු කිරීමක්: ද්විත්ව අවධාරනය කොතැනකවත් භාවිතා නොකරන්න, මම අවධාරනය කරන්නේ කලාතුරකිනි.

මෙම ලිපිය පිළිබඳ පර්යේෂණ කිරීමෙන් පසු මම _t පොසික්ස් ප්‍රමිතියෙන් වෙන් කර ඇති බැවින් මගේ හඳුනාගැනීම් අවසන් නොකරමි .

අවසන් වන ඕනෑම හඳුනාගැනීමක් පිළිබඳ රීතිය _tමා පුදුමයට පත් කළේය. මම හිතන්නේ එය පැහැදිලි කිරීමක් සහ නිල පරිච්ඡේදයක් සහ පදයක් සොයන පොසික්ස් ප්‍රමිතියකි (තවමත් විශ්වාස නැත). මෙය GNU libtool අත්පොතෙන් , වෙන් කළ නම් ලැයිස්තුගත .

සීසර්බී විසින් පොසික්ස් 2004 වෙන්කර ඇති සංකේත සහ සටහන් සඳහා පහත සබැඳිය ලබා දී ඇති අතර 'වෙනත් බොහෝ වෙන් කළ උපසර්ග සහ උපසර්ග ... එහි සොයාගත හැකිය'. මෙම POSIX 2008 රක්ෂිත සංකේත මෙතන අර්ථ නිරූපනය කර ඇත. ඉහත සඳහන් ඒවාට වඩා සීමාවන් තරමක් වැඩි ය.


14
සී ++ ප්‍රමිතිය සී එක "ආනයනය" නොකරයි, එහෙම නේද? ඔවුන් යම් යම් ශීර්ෂයන් ආනයනය කරයි, නමුත් සමස්තයක් ලෙස භාෂාව හෝ මා දන්නා පරිදි නීති නම් කිරීම නොවේ. නමුත් ඔව්, මාත් පුදුමයට පත් කළා. නමුත් එය සී බැවින් එය අදාළ විය හැක්කේ ගෝලීය එන්එස් වලට පමණි. මා කියවන විට පන්ති ඇතුළත _t භාවිතා කිරීම ආරක්ෂිත විය යුතුය
jalf

27
C ++ ප්‍රමිතිය C ප්‍රමිතිය "ආනයනය" නොකරයි. එය සී ප්‍රමිතිය ගැන සඳහන් කරයි. සී ++ පුස්තකාල හැඳින්වීම පවසන්නේ "පුස්තකාලය සම්මත සී පුස්තකාලයේ පහසුකම් ද ලබා දෙයි" යන්නයි. එය සිදු කරන්නේ සුදුසු වෙනස්කම් සහිත සී ස්ටෑන්ඩර්ඩ් පුස්තකාලයේ ශීර්ෂයන් ඇතුළත් කිරීමෙන් මිස එය “ආනයනය කිරීමෙන්” නොවේ. සී ++ ප්‍රමිතියට වෙන් කර ඇති නම් විස්තර කරන නීති මාලාවක් ඇත. C හි වෙන් කර ඇති නමක් C ++ හි වෙන් කර ගත යුතු නම්, මෙය පැවසිය යුතු ස්ථානය එයයි. නමුත් C ++ ප්‍රමිතිය එසේ නොකියයි. එබැවින් C හි වෙන් කර ඇති දේවල් C ++ තුළ වෙන් කර ඇති බව මම විශ්වාස නොකරමි - නමුත් මම වැරදියි.
ජොහැන්නස් ෂෝබ් - litb

8
"_T" නිකුතුව ගැන මා සොයාගත්තේ මෙයයි: n1256 (C99 TC3) මෙසේ කියයි: "ටයිප්ඩෙෆ් නම් int හෝ uint වලින් ආරම්භ වී _t වලින් අවසන් වේ". මම හිතන්නේ එය තවමත් "foo_t" වැනි නම් භාවිතා කිරීමට ඉඩ දෙයි - නමුත් මම සිතන්නේ මේවා පසුව POSIX විසින් වෙන් කර ඇති බවයි.
ජොහැන්නස් ෂෝබ් - litb

60
පොසික්ස් විසින් 'සිට' + කුඩා අකුරකින් ආරම්භ වන විට 'ඉවසීම' වෙන් කර තිබේද? බොහෝ කේත මෙම රීතිය කඩ කරන බව මම ඔට්ටු අල්ලමි!
Sjoerd

24
Ok ලොකි අස්ටාරි, " සී ++ ප්‍රමිතිය සී ප්‍රමිතියට අනුව අර්ථ දක්වා ඇත. මූලික වශයෙන් එය පවසන්නේ සී ++ යනු මෙම වෙනස්කම් හා එකතු කිරීම් සමඟ සී බවයි. " විකාර! C ++ හි සඳහන් වන්නේ [standard.fundament] සහ පුස්තකාලයේ C ප්‍රමිතිය පමණි. ඔබ කියන දේ සත්‍ය නම්, C ++ එය පවසන්නේ කොතැනද _Boolසහ _ImaginaryC ++ හි නොපවතීද? සී ++ භාෂාව පැහැදිලිවම අර්ථ දක්වා ඇත්තේ සී වෙත "සංස්කරණයන්" අනුව නොවේ, එසේ නොමැතිනම් ප්‍රමිතිය වඩා කෙටි විය හැකිය!
ජොනතන් වේක්ලි

201

නම් ගැටීම වළක්වා ගැනීමේ නීති දෙකම C ++ ප්‍රමිතියේ ඇත (Stroustrup පොත බලන්න) සහ C ++ ගුරු (Sutter, ආදිය) විසින් සඳහන් කර ඇත.

පුද්ගලික පාලනය

මට නඩු සමඟ කටයුතු කිරීමට අවශ්‍ය නොවූ නිසාත්, සරල රීතියක් අවශ්‍ය වූ නිසාත්, මම පෞද්ගලික එකක් නිර්මාණය කර ඇත්තේ සරල හා නිවැරදි ය:

සංකේතයක් නම් කිරීමේදී, ඔබ සම්පාදක / මෙහෙයුම් පද්ධතිය / සම්මත පුස්තකාල සමඟ ගැටීමෙන් වළකින්න:

  • කිසි විටෙකත් අවධාරනයකින් සංකේතයක් ආරම්භ නොකරන්න
  • ඇතුළත අඛණ්ඩව අවධාරනය කරන සංකේත දෙකක් නම් නොකරන්න.

ඇත්ත වශයෙන්ම, ඔබේ කේතය අද්විතීය නාම අවකාශයක තැබීම ගැටීම වළක්වා ගැනීමටද උපකාරී වේ (නමුත් නපුරු මැක්‍රෝස් වලින් එය ආරක්ෂා නොවේ)

උදාහරණ කිහිපයක්

(මම මැක්‍රෝස් භාවිතා කරන්නේ ඒවා සී / සී ++ සංකේතවල කේත දූෂණය වන නිසාය, නමුත් එය විචල්‍ය නාමයේ සිට පන්තියේ නම දක්වා ඕනෑම දෙයක් විය හැකිය)

#define _WRONG
#define __WRONG_AGAIN
#define RIGHT_
#define WRONG__WRONG
#define RIGHT_RIGHT
#define RIGHT_x_RIGHT

C ++ 0x කෙටුම්පතෙන් උපුටා ගැනීමකි

සිට n3242.pdf ගොනුව (මම අවසන් සම්මත පෙළ සමාන වනු අපේක්ෂා):

17.6.3.3.2 ගෝලීය නම් [global.names]

සමහර නම් සහ ක්‍රියාකාරී අත්සන් සෑම විටම ක්‍රියාත්මක කිරීම සඳහා වෙන් කර ඇත:

- ද්විත්ව යටි ඉරි _ _ අඩංගු සෑම නමක්ම හෝ යටි ඉරි වලින් ආරම්භ වන අතර පසුව ලොකු අකුරකින් (2.12) ඕනෑම භාවිතයක් සඳහා ක්‍රියාත්මක කිරීම සඳහා වෙන් කර ඇත.

- යටි ඉරි වලින් ආරම්භ වන සෑම නමක්ම ගෝලීය නාම අවකාශයේ නමක් ලෙස භාවිතා කිරීම සඳහා ක්‍රියාත්මක කිරීම සඳහා වෙන් කර ඇත.

නමුත් තවත්:

17.6.3.3.5 පරිශීලක අර්ථ දක්වන ලද වචනාර්ථ උපසර්ග [usrlit.suffix]

අවධාරනයකින් ආරම්භ නොවන වචනාර්ථ උපසර්ග හඳුනාගැනීම් අනාගත ප්‍රමිතිකරණය සඳහා වෙන් කර ඇත.

ගෝලීය නාම අවකාශයේ අර්ථ දක්වා නොමැති නම්, එක් යටි ඉරි වලින් ආරම්භ වී කුඩා අකුරකින් පසුව නමක් හරි යැයි ඔබ නොසිතන්නේ නම් මෙම අවසාන වගන්තිය අවුල් සහගතය ...


9
@ මයිසම්: __WRONG_AGAIN__අඛණ්ඩව අවධාරනය කිරීම් දෙකක් (ආරම්භයේ දෙකක් සහ අවසානයේ දෙකක්) අඩංගු වේ, එබැවින් මෙය ප්‍රමිතියට අනුව වැරදිය.
paercebal

8
@ BЈовић: WRONG__WRONGඅඛණ්ඩව යටි ඉරි දෙකක් (මැද දෙකක්) අඩංගු වේ, එබැවින් මෙය ප්‍රමිතියට අනුව වැරදියි
paercebal

2
ඔබේ කේතය අද්විතීය නාම අවකාශයක තැබීම ගැටීම වළක්වා ගැනීමටද උපකාරී වේ : නමුත් මෙය තවමත් ප්‍රමාණවත් නොවේ, මන්දයත් හඳුනාගැනීමේ විෂය පථය නොසලකා යතුරු පදයක් සමඟ ගැටිය හැකි බැවිනි (උදා: __attribute__GCC සඳහා).
රුස්ලාන්

1
ඇයි අඛණ්ඩව යටි ඉරි දෙකක් සහිත ඕනෑම ගැටලුවක් පවතී මැද සම්මත අනුව? පරිශීලක-නිර්වචනය කළ වචනාර්ථ උපසර්ග 1234567Lහෝ වැනි වචනාර්ථමය අගයන්ට අදාළ වේ 4.0f; IIRC මෙය ohttp: //en.cppreference.com/w/cpp/language/user_literal
ජේසන් එස්

2
Why is there any problem of having two consecutive underscores in the middle according to the standard?ප්‍රමිතිය පවසන පරිදි ඒවා වෙන් කර ඇත. මෙය හොඳ හෝ නරක ශෛලිය පිළිබඳ උපදෙස් නොවේ . එය සම්මතයෙන් ගත් තීරණයක් . ඔවුන් මෙය තීරණය කළේ ඇයි? ප්‍රමිතිකරණයට පෙර පළමු සම්පාදකයින් අවිධිමත් ලෙස එවැනි සම්මුතීන් භාවිතා කර ඇතැයි මම සිතමි.
paercebal

40

MSDN වෙතින් :

හදුනාගැනීමේ ආරම්භයේ දී අනුක්‍රමික යටි ලකුණු දෙකක් (__) භාවිතා කිරීම, හෝ ලොකු අකුරකින් පසුව තනි ප්‍රමුඛ අවධාරණයක්, සියලු විෂය පථයන්හි C ++ ක්‍රියාත්මක කිරීම සඳහා වෙන් කර ඇත. වර්තමාන හෝ අනාගත වෙන් කර ඇති හඳුනාගැනීම් සමඟ ඇති විය හැකි ගැටුම් නිසා ලිපිගොනු විෂය පථය සහිත නම් සඳහා කුඩා අකුරක් හා කුඩා අකුරක් භාවිතා කිරීමෙන් ඔබ වැළකී සිටිය යුතුය.

මෙයින් අදහස් කරන්නේ ඔබට කුඩා අකුරක් අනුගමනය කරන තාක් කල් ඔබට සාමාජික අවිනිශ්චිත උපසර්ගයක් ලෙස තනි අවධාරණයක් භාවිතා කළ හැකි බවයි.

මෙය සී ++ ප්‍රමිතියේ 17.4.3.1.2 වගන්තියෙන් ගත් බව පෙනේ, නමුත් මට සම්පූර්ණ ප්‍රමිතිය සඳහා මුල් ප්‍රභවයක් මාර්ගගතව සොයාගත නොහැක.

මෙම ප්‍රශ්නය ද බලන්න .


2
"17.6.3.3.2 ගෝලීය නම්"
parcebal

8
සිත්ගන්නා කරුණ නම්, ප්‍රශ්නයට සෘජු, සංක්ෂිප්ත පිළිතුරක් ඇති එකම පිළිතුර මෙය බව පෙනේ.
හයිඩ්

10
@ හයිඩ්: ඇත්ත වශයෙන්ම, එය එසේ නොවේ, මන්ද එය ගෝලීය නාම අවකාශයේ ප්‍රමුඛ අවධාරණයක් සහිත කිසිදු හඳුනාගැනීමක් නොතිබීම රීතිය මඟ හැරීමයි. රොජර්ගේ පිළිතුර බලන්න . සී ++ ප්‍රමිතිය පිළිබඳ අධිකාරියක් ලෙස එම්එස් වීසී ලියකියවිලි උපුටා දැක්වීම් ගැන මම ඉතා විමසිල්ලෙන් සිටිමි.
sbi

bsbi මා සඳහන් කළේ මෙම පිළිතුරෙහි "ඔබට තනි යටි ඉරි ලකුණු සාමාජික විචල්‍ය උපසර්ගයක් ලෙස භාවිතා කළ හැකිය, එය කුඩා අකුරක් අනුගමනය කරන තාක් කල්" යනුවෙනි . පෙළ බිත්තියක.
හයිඩ්

5
පළමුවෙන්ම, ගෝලීය නාම අවකාශයට එකම රීතිය අදාළ නොවන බවට කිසිදු ඉඟියක් නොමැතිවීම මම තවමත් සලකමි. වඩාත් නරක දෙය නම්, යාබද අවධාරනය ආරම්භයේ දී පමණක් නොව, ඕනෑම තැනක හඳුනාගැනීමක් තහනම් කර තිබීමයි. එබැවින් මෙම පිළිතුර හුදෙක් සත්‍යයක් මඟ හැරීම නොවේ, නමුත් ඇත්ත වශයෙන්ම අවම වශයෙන් එක් ක්‍රියාකාරීව වැරදි ප්‍රකාශයක් කරයි. මා පැවසූ පරිදි, එම්එස්වීසී ලියකියවිලි වෙත යොමු කිරීම ප්‍රශ්නය වීසී ගැන පමණක් නොවන්නේ නම් මම නොකරමි.
sbi

25

ප්‍රශ්නයේ අනෙක් කොටස සම්බන්ධයෙන්, අවධාරනය අවසානයේ දී තැබීම සාමාන්‍ය දෙයකි අභ්‍යන්තර නාමයක් සමඟ ගැටීම නොකිරීමට විචල්‍ය නාමයේ .

පංති සහ නාම අවකාශයන් තුළ පවා මම මෙය කරන්නේ මට එක රීතියක් පමණක් මතක තබා ගත යුතු බැවිනි (“ගෝලීය විෂය පථයේ නම අවසානයේ සහ අනෙක් සෑම තැනකම නමේ ආරම්භය” හා සසඳන විට).


2

ඔව්, හදුනාගැනීමේ ඕනෑම තැනක අවධාරනය කළ හැකිය. නීති විශ්වාස කරන්නේ: පළමු අක්ෂරයේ ඇති ඕනෑම az, AZ, _ සහ පහත දැක්වෙන අක්ෂර සඳහා + 0-9.

සී කේතයේ යටි ඉරි උපසර්ග බහුලව දක්නට ලැබේ - තනි අවධාරනයක අර්ථය “පුද්ගලික” යන්නයි, ද්විත්ව යටි ඉරි සාමාන්‍යයෙන් සම්පාදකයාගේ භාවිතය සඳහා වෙන් කර ඇත.


3
ඒවා පුස්තකාලවල බහුලව දක්නට ලැබේ. පරිශීලක කේතයේ ඒවා පොදු නොවිය යුතුය.
මාටින් යෝර්ක්

45
ජනතාව කරන්න , සී ලිවීම් පුස්තකාල ඔබ දන්නවා.
ජෝන් මිලිකින්

7
"ඔව්, හදුනාගැනීමේ ඕනෑම තැනක අවධාරනය කළ හැකිය." ගෝලීය හඳුනාගැනීම් සඳහා මෙය වැරදිය. රොජර්ගේ පිළිතුර බලන්න .
sbi

@sbi සී සහ සී ++ ප්‍රමිතීන්ට අනුව, ඔව්, අර්ථාන්විතව, ප්‍රමුඛ අවධාරනය සහිත ගෝලීය හඳුනාගැනීම් වෙන් කර ඇත. ඒවා කෘතිමව වලංගු හඳුනාගැනීම් වන අතර, සම්පාදකයා විසින් ශ්‍රිතයක් නම් කිරීමෙන් ඔබව වළක්වන්නේ නැත _Foo, එසේ කිරීමෙන් ඔබ ප්‍රමිතියෙන් තොර ක්‍රියාත්මක කිරීමේ තොරතුරු මත විශ්වාසය තබා ඇති අතර එමඟින් භාෂාවේ / සම්මත පුස්තකාල ක්‍රියාත්මක කිරීමේ / මෙහෙයුම් පද්ධතිය.
BenW

En බෙන්ඩබ්: ටීටීබොම්ක්, සී ++ ප්‍රමිතිය සරලවම පවසන්නේ යටි ඉරි වලින් ආරම්භ වන ගෝලීය හඳුනාගැනීම් වලට සින්ටැක්ස් සහ අර්ථකථන අතර වෙනසක් නොමැතිව ඉඩ නොදෙන බවයි. (එසේම යටි ඉරි වලින් ආරම්භ වන ඕනෑම හැඳුනුම්පතක් සහ ලොකු අකුරක් සහ අඛණ්ඩව අවධාරනය දෙකක් සහිත හඳුනාගැනීම්.)
sbi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.