ഉബുണ്ടു ഓൺലൈൻ, ഫെഡോറ ഓൺലൈൻ, വിൻഡോസ് ഓൺലൈൻ എമുലേറ്റർ അല്ലെങ്കിൽ MAC OS ഓൺലൈൻ എമുലേറ്റർ എന്നിങ്ങനെയുള്ള ഞങ്ങളുടെ ഒന്നിലധികം സൗജന്യ ഓൺലൈൻ വർക്ക്സ്റ്റേഷനുകളിലൊന്ന് ഉപയോഗിച്ച് OnWorks സൗജന്യ ഹോസ്റ്റിംഗ് ദാതാവിൽ പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്ന gpp കമാൻഡ് ആണിത്.
പട്ടിക:
NAME
GPP - ജനറിക് പ്രീപ്രോസസർ
സിനോപ്സിസ്
gpp [-{o|O} ഔട്ട്ഫിൽ] [-ഐ/ഉൾപ്പെടുത്തുക/പാത] [-ഡിപേര്=വൽ ...]
[-z|+z] [-x] [-m] [-C|-T|-H|-X|-P|-U ... [-M ...]]
[-n|+n] [+c p1 p2] [+s p1 p2 c]
[-സി p1] [--nostdinc] [--nocurinc]
[--curdirinclast] [--മുന്നറിയിപ്പ് നില n]
[--ഉൾപ്പെടെയുള്ള മാർക്കർ str] [--ഉൾപ്പെടുന്നു ഫയല്]
[infile]
gpp --സഹായം
gpp --പതിപ്പ്
വിവരണം
GPP എന്നത് വിശാലമായ ശ്രേണിക്ക് അനുയോജ്യമായ, ഇഷ്ടാനുസൃതമാക്കാവുന്ന വാക്യഘടനയുള്ള ഒരു പൊതു-ഉദ്ദേശ്യ പ്രീപ്രൊസസ്സർ ആണ്
പ്രീപ്രോസസിംഗ് ജോലികൾ. ഏത് പ്രോഗ്രാമിംഗ് ഭാഷയിൽ നിന്നുമുള്ള അതിന്റെ സ്വാതന്ത്ര്യം അതിനെ കൂടുതൽ വർദ്ധിപ്പിക്കുന്നു
cpp-നേക്കാൾ ബഹുമുഖമാണ്, അതേസമയം അതിന്റെ വാക്യഘടന m4-നേക്കാൾ ഭാരം കുറഞ്ഞതും വഴക്കമുള്ളതുമാണ്.
സിപിപി അനുയോജ്യമല്ലാത്തതും അല്ലാത്തതുമായ എല്ലാ സാധാരണ പ്രീപ്രോസസിംഗ് ജോലികളെയും ജിപിപി ലക്ഷ്യമിടുന്നു
വളരെ സങ്കീർണ്ണമായ സവിശേഷതകൾ ആവശ്യമാണ്. തുല്യ കാര്യക്ഷമതയോടെ പ്രോസസ്സ് ചെയ്യാൻ കഴിയുന്നതിന്
വിവിധ ഭാഷകളിലെ ടെക്സ്റ്റ് ഫയലുകൾ അല്ലെങ്കിൽ സോഴ്സ് കോഡ്, GPP ഉപയോഗിക്കുന്ന വാക്യഘടന പൂർണ്ണമാണ്
ഇഷ്ടാനുസൃതമാക്കാവുന്ന. അഭിപ്രായങ്ങളും സ്ട്രിംഗുകളും കൈകാര്യം ചെയ്യുന്നത് പ്രത്യേകിച്ചും വിപുലമായതാണ്.
തുടക്കത്തിൽ, വിളിക്കപ്പെടുന്ന ബിൽറ്റ്-ഇൻ മാക്രോകളുടെ ഏറ്റവും കുറഞ്ഞ സെറ്റ് മാത്രമേ GPP മനസ്സിലാക്കൂ മെറ്റാ-മാക്രോസ്.
എന്നതിന്റെ നിർവചനം ഈ മെറ്റാ-മാക്രോകൾ അനുവദിക്കുന്നു ഉപയോക്താവ് മാക്രോകൾ അതുപോലെ ചില അടിസ്ഥാന പ്രവർത്തനങ്ങൾ
സോപാധിക പരിശോധനകൾ, ഗണിതശാസ്ത്രം എന്നിവ ഉൾപ്പെടെ പ്രീപ്രോസസിംഗ് സിസ്റ്റത്തിന്റെ കാതൽ രൂപപ്പെടുത്തുന്നു
മൂല്യനിർണ്ണയം, വൈൽഡ്കാർഡ് പൊരുത്തപ്പെടുത്തൽ (ഗ്ലോബിംഗ്), സിന്റക്സ് സ്പെസിഫിക്കേഷൻ. എല്ലാ ഉപയോക്തൃ മാക്രോ
നിർവചനങ്ങൾ ആഗോളമാണ് -- അതായത്, വ്യക്തമായി നീക്കം ചെയ്യുന്നതുവരെ അവ സാധുവായി തുടരും; മെറ്റാ-മാക്രോസ്
പുനർ നിർവചിക്കാൻ കഴിയില്ല. ഓരോ ഉപയോക്തൃ മാക്രോ നിർവചനത്തിലും GPP ബന്ധപ്പെട്ടവയുടെ ട്രാക്ക് സൂക്ഷിക്കുന്നു
വാക്യഘടന സ്പെസിഫിക്കേഷൻ, അതുവഴി ഒരു മാക്രോയെ തുടർന്നുള്ളവ പരിഗണിക്കാതെ തന്നെ സുരക്ഷിതമായി ഉപയോഗിക്കാനാകും
ഓപ്പറേറ്റിംഗ് മോഡിൽ മാറ്റം.
മാക്രോകൾ കൂടാതെ, GPP അഭിപ്രായങ്ങളും സ്ട്രിംഗുകളും മനസ്സിലാക്കുന്നു, അവയുടെ വാക്യഘടനയ്ക്കും പെരുമാറ്റത്തിനും കഴിയും
ഏതെങ്കിലും പ്രത്യേക ഉദ്ദേശ്യത്തിന് അനുയോജ്യമായ രീതിയിൽ വ്യാപകമായി ഇച്ഛാനുസൃതമാക്കുക. ആന്തരികമായി അഭിപ്രായങ്ങളും സ്ട്രിംഗുകളും ആണ്
ഒരേ നിർമ്മാണം, അതിനാൽ അഭിപ്രായങ്ങൾക്ക് ബാധകമായ എല്ലാം സ്ട്രിംഗുകൾക്കും ബാധകമാണ്.
ഓപ്ഷനുകൾ
ഇനിപ്പറയുന്ന കമാൻഡ്-ലൈൻ സ്വിച്ചുകളും ഓപ്ഷനുകളും GPP തിരിച്ചറിയുന്നു. ശ്രദ്ധിക്കുക, -nostdinc,
-nocurinc, -curdirinclast, -warninglevel, and -includemarker ഓപ്ഷനുകൾ പതിപ്പ് 2.1-ൽ നിന്നും കൂടാതെ
നേരത്തെ ഒഴിവാക്കിയതിനാൽ ഉപയോഗിക്കാൻ പാടില്ല. പകരം "ലോംഗ് ഓപ്ഷൻ" വേരിയന്റുകൾ ഉപയോഗിക്കുക
(--nostdinc, തുടങ്ങിയവ.).
-h --സഹായിക്കൂ
ഒരു ചെറിയ സഹായ സന്ദേശം അച്ചടിക്കുക.
--പതിപ്പ്
പ്രിന്റ് പതിപ്പ് വിവരങ്ങൾ.
-o ഔട്ട്ഫിൽ
എല്ലാ ഔട്ട്പുട്ടും അയയ്ക്കേണ്ട ഒരു ഫയൽ വ്യക്തമാക്കുക (സ്ഥിരസ്ഥിതിയായി, എല്ലാം അയച്ചു
സ്റ്റാൻഡേർഡ് ഔട്ട്പുട്ടിലേക്ക്).
-O ഔട്ട്ഫിൽ
എല്ലാ ഔട്ട്പുട്ടും അയയ്ക്കേണ്ട ഒരു ഫയൽ വ്യക്തമാക്കുക; ഔട്ട്പുട്ട് ഒരേസമയം അയയ്ക്കുന്നു
stdout.
-I/ഉൾപ്പെടുത്തുക/പാത
എവിടെയാണ് ഒരു പാത വ്യക്തമാക്കുക # ഉൾപ്പെടുത്തുക meta-macro ഉൾപ്പെടുത്തിയ ഫയലുകൾക്കായി നോക്കും
നിലവിലെ ഡയറക്ടറിയിൽ ഇല്ല. സ്ഥിരസ്ഥിതിയാണ് / usr / ഉൾപ്പെടുത്തുക ഇല്ലെങ്കിൽ -ഐ
ഓപ്ഷൻ വ്യക്തമാക്കിയിട്ടുണ്ട്. ഒന്നിലധികം -I ഓപ്ഷനുകൾ പലതിലും കാണുന്നതിന് വ്യക്തമാക്കിയേക്കാം
ഡയറക്ടറികൾ.
-Dപേര്=വൽ
ഉപയോക്തൃ മാക്രോ നിർവചിക്കുക പേര് തുല്യമായി Val. ഇത് കർശനമായി ഉപയോഗിക്കുന്നതിന് തുല്യമാണ്
The # നിർവചിക്കുക മെറ്റാ-മാക്രോ, എന്നാൽ കമാൻഡിൽ നിന്ന് മാക്രോകൾ നിർവചിക്കുന്നത് സാധ്യമാക്കുന്നു-
ലൈൻ. എങ്കിൽ Val ആർഗ്യുമെന്റുകളിലേക്കോ മറ്റ് മാക്രോകളിലേക്കോ പരാമർശങ്ങൾ നടത്തുന്നു, അത് പൊരുത്തപ്പെടണം
കമാൻഡ് ലൈനിൽ വ്യക്തമാക്കിയ മോഡിന്റെ വാക്യഘടന. പതിപ്പ് 2.1 മുതൽ ആരംഭിക്കുന്നു,
കമാൻഡ് ലൈനിൽ മാക്രോ ആർഗ്യുമെന്റ് നാമകരണം അനുവദനീയമാണ്. വാക്യഘടന ഇപ്രകാരമാണ്:
-Dമാക്രോ(arg1,...)=നിര്വചനം. ആർഗ്യുമെന്റുകൾ സി-സ്റ്റൈൽ വാക്യഘടനയിൽ വ്യക്തമാക്കിയിരിക്കുന്നു,
വൈറ്റ്സ്പെയ്സ് ഇല്ലെങ്കിലും, നിർവചനം ഇപ്പോഴും വാക്യഘടനയ്ക്ക് അനുസൃതമായിരിക്കണം
കമാൻഡ് ലൈനിൽ വ്യക്തമാക്കിയ മോഡ്.
+z ടെക്സ്റ്റ് മോഡ് Unix മോഡിലേക്ക് സജ്ജമാക്കുക (LF ടെർമിനേറ്റർ). ഇൻപുട്ടിലെ ഏതെങ്കിലും CR പ്രതീകമാണ്
വ്യവസ്ഥാപിതമായി നിരസിച്ചു. Unix സിസ്റ്റങ്ങൾക്ക് കീഴിലുള്ള ഡിഫോൾട്ടാണിത്.
-z ടെക്സ്റ്റ് മോഡ് ഡോസ് മോഡിലേക്ക് സജ്ജമാക്കുക (CR-LF ടെർമിനേറ്റർ). ഈ മോഡിൽ എല്ലാ CR പ്രതീകങ്ങളും ഉണ്ട്
ഇൻപുട്ടിൽ നിന്ന് നീക്കം ചെയ്തു, എല്ലാ ഔട്ട്പുട്ട് LF പ്രതീകങ്ങളും CR-LF ആയി പരിവർത്തനം ചെയ്യപ്പെടുന്നു. ഈ
WIN_NT ഓപ്ഷൻ ഉപയോഗിച്ചാണ് GPP കംപൈൽ ചെയ്തതെങ്കിൽ സ്ഥിരസ്ഥിതിയാണ്.
-x യുടെ ഉപയോഗം പ്രവർത്തനക്ഷമമാക്കുക # എക്സി മെറ്റാ-മാക്രോ. മുതലുള്ള # എക്സി ഒരു ഔട്ട്പുട്ട് ഉൾപ്പെടുന്നു
അനിയന്ത്രിതമായ ഷെൽ കമാൻഡ് ലൈൻ, അത് ഒരു സുരക്ഷാ ഭീഷണിക്ക് കാരണമായേക്കാം, അങ്ങനെയാണ്
ഈ ഓപ്ഷൻ വ്യക്തമാക്കിയിട്ടില്ലെങ്കിൽ അപ്രാപ്തമാക്കി.
-m ഒരു പേരാണെങ്കിൽ cpp അനുയോജ്യത മോഡിലേക്ക് സ്വയമേവയുള്ള മോഡ് മാറുന്നത് പ്രവർത്തനക്ഷമമാക്കുക
ഉൾപ്പെടുത്തിയ ഫയൽ `.h' അല്ലെങ്കിൽ `.c' ൽ അവസാനിക്കുന്നു. ഇത് C തലക്കെട്ട് ഉൾപ്പെടുത്തുന്നത് സാധ്യമാക്കുന്നു
ചെറിയ മാറ്റങ്ങൾ മാത്രമുള്ള ഫയലുകൾ.
-n എപ്പോൾ ഇൻപുട്ടിൽ നിന്ന് പുതിയ ലൈൻ അല്ലെങ്കിൽ വൈറ്റ്സ്പേസ് പ്രതീകങ്ങൾ നീക്കംചെയ്യുന്നത് തടയുക
അവ ഒരു മാക്രോ കോളിന്റെ അല്ലെങ്കിൽ ഒരു കമന്റിന്റെ അവസാനമായി സംഭവിക്കുന്നു. സ്ഥിരസ്ഥിതിയായി, ഒരു പുതിയ ലൈൻ ആയിരിക്കുമ്പോൾ
അല്ലെങ്കിൽ വൈറ്റ്സ്പേസ് പ്രതീകം ഒരു മാക്രോയുടെ അവസാനം രൂപപ്പെടുത്തുന്നു അല്ലെങ്കിൽ അതിന്റെ ഭാഗമായി പാഴ്സ് ചെയ്ത ഒരു കമന്റ്
മാക്രോ കോളിന്റെയോ കമന്റിന്റെയോ ആയതിനാൽ ഔട്ട്പുട്ടിൽ നിന്ന് നീക്കംചെയ്തു. -n ഓപ്ഷൻ ഉപയോഗിക്കുക
ഇൻപുട്ട് സ്ട്രീമിലെ അവസാന പ്രതീകം വൈറ്റ്സ്പെയ്സോ ന്യൂലൈനോ ആണെങ്കിൽ അത് നിലനിർത്താൻ.
ഇത് cpp, Prolog മോഡുകളിൽ സജീവമാക്കിയിരിക്കുന്നു.
+n -n എന്നതിന്റെ വിപരീതം. cpp, Prolog എന്നിവ ഒഴികെയുള്ള എല്ലാ മോഡുകളിലും ഇത് സ്ഥിരസ്ഥിതിയാണ്. കുറിപ്പ്
+n സ്ഥാപിക്കണം എന്ന് ശേഷം എന്തെങ്കിലും ഫലമുണ്ടാക്കാൻ -സി അല്ലെങ്കിൽ -പി.
-U arg1 ... arg9
ഉപയോക്തൃ-നിർവചിച്ച മോഡ്. ഇനിപ്പറയുന്ന ഒമ്പത് കമാൻഡ്-ലൈൻ ആർഗ്യുമെന്റുകളാണ് എടുത്തിരിക്കുന്നത്
യഥാക്രമം മാക്രോ സ്റ്റാർട്ട് സീക്വൻസ്, ഇല്ലാത്ത കോളിനുള്ള മാക്രോ എൻഡ് സീക്വൻസ്
ആർഗ്യുമെന്റുകൾ, ആർഗ്യുമെന്റ് സ്റ്റാർട്ട് സീക്വൻസ്, ആർഗ്യുമെന്റ് സെപ്പറേറ്റർ, ആർഗ്യുമെന്റ് എൻഡ്
അനുക്രമം, ആർഗ്യുമെന്റ് ബാലൻസിംഗിനായി സ്റ്റാക്ക് ചെയ്യേണ്ട പ്രതീകങ്ങളുടെ ലിസ്റ്റ്, ലിസ്റ്റ്
അൺസ്റ്റാക്ക് ചെയ്യേണ്ട പ്രതീകങ്ങൾ, ഒരു ആർഗ്യുമെന്റിനെ പരാമർശിക്കാൻ ഉപയോഗിക്കേണ്ട സ്ട്രിംഗ്
നമ്പർ, അവസാനം ഉദ്ധരണി പ്രതീകം (ഒന്നും ഇല്ലെങ്കിൽ ഒരു ശൂന്യമായ സ്ട്രിംഗ് ആയിരിക്കണം
നൽകിയിട്ടുണ്ട്). ഈ ക്രമീകരണങ്ങൾ ഉപയോക്തൃ മാക്രോകൾക്കും മെറ്റാ-മാക്രോകൾക്കും ബാധകമാണ്
മെറ്റാ-മാക്രോകൾക്കുള്ള മറ്റ് ക്രമീകരണങ്ങൾ നിർവ്വചിക്കാൻ -M ഓപ്ഷൻ ഉപയോഗിക്കുന്നു. എന്ന വിഭാഗം കാണുക
കൂടുതൽ വിവരങ്ങൾക്ക് വാക്യഘടന സ്പെസിഫിക്കേഷൻ.
-M arg1 ... arg7
മെറ്റാ-മാക്രോകൾക്കുള്ള ഉപയോക്തൃ-നിർവചിച്ച മോഡ് സവിശേഷതകൾ. ഈ ഓപ്ഷൻ മാത്രമേ ഉപയോഗിക്കാൻ കഴിയൂ
കൂടെ -എം. ഇനിപ്പറയുന്ന ഏഴ് കമാൻഡ്-ലൈൻ ആർഗ്യുമെന്റുകളാണ് എടുത്തിരിക്കുന്നത്
യഥാക്രമം മാക്രോ സ്റ്റാർട്ട് സീക്വൻസ്, ഇല്ലാത്ത കോളിനുള്ള മാക്രോ എൻഡ് സീക്വൻസ്
ആർഗ്യുമെന്റുകൾ, ആർഗ്യുമെന്റ് സ്റ്റാർട്ട് സീക്വൻസ്, ആർഗ്യുമെന്റ് സെപ്പറേറ്റർ, ആർഗ്യുമെന്റ് എൻഡ്
ക്രമം, ആർഗ്യുമെന്റ് ബാലൻസിംഗിനായി സ്റ്റാക്ക് ചെയ്യേണ്ട പ്രതീകങ്ങളുടെ ലിസ്റ്റ്, ലിസ്റ്റ്
അൺസ്റ്റാക്ക് ചെയ്യാൻ പ്രതീകങ്ങൾ. കൂടുതൽ വിവരങ്ങൾക്ക് താഴെ കാണുക.
(സ്ഥിരസ്ഥിതി മോഡ്)
സ്ഥിരസ്ഥിതി മോഡ് ഒരു അവ്യക്തമായ cpp പോലെയുള്ള മോഡാണ്, എന്നാൽ ഇത് അഭിപ്രായങ്ങൾ കൈകാര്യം ചെയ്യുന്നില്ല, കൂടാതെ
സിപിപിയുമായി വിവിധ പൊരുത്തക്കേടുകൾ അവതരിപ്പിക്കുന്നു. സാധാരണ മെറ്റാ-മാക്രോകളും ഉപയോക്തൃ മാക്രോകളും
ഇതുപോലെ നോക്കുക:
#xy നിർവചിക്കുക
മാക്രോ(ആർഗ്,...)
ഈ മോഡ് ഇതിന് തുല്യമാണ്
-U "" "" "(" "," ")" "(" ")" "#" "\\"
-എം "#" "\n" " " " " "\n" "(" ")"
-C cpp അനുയോജ്യത മോഡ്. ജിപിപിയുടെ പെരുമാറ്റം ഏറ്റവും അടുത്തിരിക്കുന്ന മോഡാണിത്
സിപിപിയുടേത്. ഡിഫോൾട്ട് മോഡിൽ നിന്ന് വ്യത്യസ്തമായി, മെറ്റാ-മാക്രോ എക്സ്പാൻഷൻ സംഭവിക്കുന്നത്
വരികളുടെ തുടക്കം, സി കമന്റുകളും സ്ട്രിംഗുകളും മനസ്സിലാക്കുന്നു. ഈ മോഡ്
തുല്യമായ
-n -U "" "" "(" "," ")" "(" ")" "#" ""
-എം "\n#\w" "\n" " " " " "\n" "" ""
+c "/*" "*/" +c "//" "\n" +c "\\\n" ""
+s "\"" "\"" "\\" +s "'" "'" "\\"
-T TeX പോലെയുള്ള മോഡ്. ഈ മോഡിൽ, സാധാരണ മെറ്റാ-മാക്രോകളും ഉപയോക്തൃ മാക്രോകളും ഇതുപോലെ കാണപ്പെടുന്നു:
\define{x}{y}
\macro{arg}{...}
അഭിപ്രായങ്ങളൊന്നും മനസ്സിലാകുന്നില്ല. ഈ മോഡ് ഇതിന് തുല്യമാണ്
-U "\\" "" "{" "}{" "}" "{" "}" "#" "@"
-H HTML പോലുള്ള മോഡ്. ഈ മോഡിൽ, സാധാരണ മെറ്റാ-മാക്രോകളും ഉപയോക്തൃ മാക്രോകളും ഇതുപോലെ കാണപ്പെടുന്നു:
<#define x|y>
<#മാക്രോ ആർഗ്|...>
അഭിപ്രായങ്ങളൊന്നും മനസ്സിലാകുന്നില്ല. ഈ മോഡ് ഇതിന് തുല്യമാണ്
-U "<#" ">" "\B" "|" ">" "<" ">" "#" "\\"
-X XHTML പോലുള്ള മോഡ്. ഈ മോഡിൽ, സാധാരണ മെറ്റാ-മാക്രോകളും ഉപയോക്തൃ മാക്രോകളും ഇതുപോലെ കാണപ്പെടുന്നു:
<#നിർവ്വചിക്കുക x|y/>
<#മാക്രോ ആർഗ്|.../>
അഭിപ്രായങ്ങളൊന്നും മനസ്സിലാകുന്നില്ല. ഈ മോഡ് ഇതിന് തുല്യമാണ്
-U "<#" "/>" "\B" "|" "/>" "<" ">" "#" "\\"
-P പ്രോലോഗ്-അനുയോജ്യമായ cpp പോലുള്ള മോഡ്. ഈ മോഡ് cpp അനുയോജ്യത മോഡിൽ നിന്ന് വ്യത്യസ്തമാണ്
അഭിപ്രായങ്ങൾ കൈകാര്യം ചെയ്യുന്നതിലൂടെ, ഇതിന് തുല്യമാണ്
-n -U "" "" "(" "," ")" "(" ")" "#" ""
-എം "\n#\w" "\n" " " " " "\n" "" ""
+ccss "\!o/*" "*/" +ccss "%" "\n" +ccii "\\\n" ""
+s "\"" "\"" "" +s "\!#'" "'" ""
+c p1 p2
അഭിപ്രായങ്ങൾ വ്യക്തമാക്കുക. ഉദ്ധരിക്കാത്ത ഏതെങ്കിലും സംഭവം p1 എന്ന് വ്യാഖ്യാനിക്കും
ഒരു കമന്റിന്റെ തുടക്കം. ഇനിപ്പറയുന്ന ആദ്യ സംഭവം വരെയുള്ള എല്ലാ ഇൻപുട്ടും p2 ഉദ്ദേശിക്കുന്ന
ഉപേക്ഷിക്കപ്പെടും. വ്യത്യസ്ത തരങ്ങൾ വ്യക്തമാക്കുന്നതിന് ഈ ഓപ്ഷൻ ഒന്നിലധികം തവണ ഉപയോഗിച്ചേക്കാം
കമന്റ് ഡിലിമിറ്ററുകൾ. ഓപ്ഷണൽ പാരാമീറ്റർ മാറ്റാൻ വ്യക്തമാക്കാം
അഭിപ്രായത്തിന്റെ പെരുമാറ്റവും, ഉദാ, അതിനെ ഒരു സ്ട്രിംഗാക്കി മാറ്റുക അല്ലെങ്കിൽ താഴെ അവഗണിക്കുക
ചില സാഹചര്യങ്ങൾ, താഴെ കാണുക.
-c p1
അഭിപ്രായങ്ങളോ സ്ട്രിംഗുകളോ വ്യക്തമാക്കാതിരിക്കുക. അഭിപ്രായം/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ ആരുടെ തുടക്കം
ക്രമം p1 നീക്കം ചെയ്യപ്പെടുന്നു. ബിൽറ്റ്-ഇൻ കമന്റ് മാറ്റാൻ ഇത് ഉപയോഗപ്രദമാണ്
ഒരു സ്റ്റാൻഡേർഡ് മോഡിന്റെ സവിശേഷതകൾ -- ഉദാ, cpp അനുയോജ്യത മോഡ്.
+s p1 p2 c
സ്ട്രിംഗുകൾ വ്യക്തമാക്കുക. ഉദ്ധരിക്കാത്ത ഏതെങ്കിലും സംഭവം p1 എന്ന് വ്യാഖ്യാനിക്കും
ഒരു സ്ട്രിംഗിന്റെ തുടക്കം. ഇനിപ്പറയുന്ന ആദ്യ സംഭവം വരെയുള്ള എല്ലാ ഇൻപുട്ടും p2 ഉദ്ദേശിക്കുന്ന
ഒരു മൂല്യനിർണ്ണയവുമില്ലാതെ ഔട്ട്പുട്ട് ചെയ്യുക. ഡിലിമിറ്ററുകൾ തന്നെ ഔട്ട്പുട്ട് ആണ്. എങ്കിൽ c
ശൂന്യമല്ല, അതിന്റെ ആദ്യ പ്രതീകം a ആയി ഉപയോഗിക്കുന്നു സ്ട്രിംഗ് ഉദ്ധരണി പ്രതീകം -- അതായത്ഒരു
ഒരു സംഭവത്തിന് തൊട്ടുമുമ്പുള്ള സ്വഭാവം p2 അതിൽ നിന്ന് തടയുന്നു
സ്ട്രിംഗ് അവസാനിപ്പിക്കുന്നു. ഓപ്ഷണൽ പാരാമീറ്റർ മാറ്റാൻ വ്യക്തമാക്കാം
സ്ട്രിംഗിന്റെ പെരുമാറ്റവും, ഉദാ, അതിനെ ഒരു കമന്റാക്കി മാറ്റുക, മാക്രോ മൂല്യനിർണ്ണയം പ്രവർത്തനക്ഷമമാക്കുക
സ്ട്രിംഗിനുള്ളിൽ, അല്ലെങ്കിൽ സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ നിർണ്ണായകമായി അവഗണിക്കുക
സാഹചര്യങ്ങൾ. താഴെ നോക്കുക.
-s p1
അഭിപ്രായങ്ങളോ സ്ട്രിംഗുകളോ വ്യക്തമാക്കാതിരിക്കുക. -സിക്ക് സമാനമാണ്.
--ഉൾപ്പെടുന്നു ഫയല്
പ്രോസസ്സ് ഫയല് മുമ്പ് infile
--nostdinc
/usr/include എന്ന സ്റ്റാൻഡേർഡ് ഡയറക്ടറിയിൽ ഉൾപ്പെടുത്തിയ ഫയലുകൾക്കായി നോക്കരുത്.
--നൊകുറിങ്ക്
നിലവിലെ ഡയറക്ടറിയിൽ ഉൾപ്പെടുത്തിയ ഫയലുകൾക്കായി നോക്കരുത്.
--കുർദിരിൻക്ലാസ്റ്റ്
നിലവിലെ ഡയറക്ടറിയിൽ ഫയലുകൾ ഉൾപ്പെടുത്തുന്നത് നോക്കുക ശേഷം വ്യക്തമാക്കിയ ഡയറക്ടറികൾ
-I പകരം അവരുടെ മുമ്പിൽ.
--മുന്നറിയിപ്പ് നില n
മുന്നറിയിപ്പ് നില സജ്ജമാക്കുക n (0, 1 അല്ലെങ്കിൽ 2). ഡിഫോൾട്ട് 2 ആണ് (ഏറ്റവും വാചാലമായത്).
--ഉൾപ്പെടെ മാർക്കർ str
നിരീക്ഷിക്കുക # ഉൾപ്പെടുത്തുക ഔട്ട്പുട്ട് സ്ട്രീമിൽ ഒരു മാർക്കർ തിരുകിക്കൊണ്ട് നിർദ്ദേശങ്ങൾ. ദി
മാർക്കറിന്റെ ഫോർമാറ്റ് നിർണ്ണയിക്കുന്നത് str, ഇതിൽ മൂന്ന് സംഭവങ്ങൾ അടങ്ങിയിരിക്കണം
കഥാപാത്രം % (അല്ലെങ്കിൽ തത്തുല്യമായി ?). ആദ്യ സംഭവം ലൈൻ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നു
നമ്പർ, ഫയലിന്റെ പേരുള്ള രണ്ടാമത്തേത്, മൂന്നാമത്തേത് 1, 2 അല്ലെങ്കിൽ ശൂന്യമാണ്. ഇത് എപ്പോൾ
ഡിഫോൾട്ട്, cpp അല്ലെങ്കിൽ Prolog മോഡിൽ ഓപ്ഷൻ വ്യക്തമാക്കിയിട്ടുണ്ട്, ഉറപ്പാക്കാൻ GPP പരമാവധി ശ്രമിക്കുന്നു
ഇൻപുട്ടിൽ ശൂന്യമായി ചേർത്തുകൊണ്ട് ലൈൻ നമ്പറുകൾ ഔട്ട്പുട്ടിൽ സമാനമാണ്
നിർവചനങ്ങളുടെയോ അഭിപ്രായങ്ങളുടെയോ സ്ഥാനത്ത് വരികൾ.
infile GPP അതിന്റെ ഇൻപുട്ട് വായിക്കുന്ന ഒരു ഇൻപുട്ട് ഫയൽ വ്യക്തമാക്കുക. ഇൻപുട്ട് ഫയൽ ഇല്ലെങ്കിൽ
വ്യക്തമാക്കിയ, ഇൻപുട്ട് സാധാരണ ഇൻപുട്ടിൽ നിന്ന് വായിക്കുന്നു.
സിന്റാക്സ് SPECIFICATION
ഒരു മാക്രോ കോളിന്റെ വാക്യഘടന ഇപ്രകാരമാണ്: അത് അക്ഷരങ്ങളുടെ ക്രമത്തിൽ ആരംഭിക്കണം
പൊരുത്തപ്പെടുന്നു മാക്രോ തുടക്കം ക്രമം നിലവിലെ മോഡിൽ വ്യക്തമാക്കിയതുപോലെ, ഉടനടി പിന്തുടരുന്നു
മാക്രോയുടെ പേരിൽ, അത് സാധുതയുള്ളതായിരിക്കണം ഐഡന്റിഫയർ -- അതായത്, അക്ഷരങ്ങളുടെ ഒരു ശ്രേണി,
അക്കങ്ങൾ, അല്ലെങ്കിൽ അടിവരകൾ ("_"). മാക്രോ നെയിമിന് ശേഷം എ കുറിയ മാക്രോ അവസാനിക്കുന്നു
ക്രമം മാക്രോയ്ക്ക് ആർഗ്യുമെന്റുകൾ ഇല്ലെങ്കിൽ, അല്ലെങ്കിൽ ഒരു ആർഗ്യുമെന്റുകൾ ആരംഭിച്ച ഒരു ശ്രേണി
വാദം തുടക്കം ക്രമം. വിവിധ വാദങ്ങൾ പിന്നീട് ഒരു വേർതിരിക്കുന്നു വാദം
വിഭാജി, കൂടാതെ മാക്രോ അവസാനിക്കുന്നത് എ നീളമുള്ള മാക്രോ അവസാനിക്കുന്നു ക്രമം.
എല്ലാ സാഹചര്യങ്ങളിലും, നിലവിലെ സന്ദർഭത്തിന്റെ പാരാമീറ്ററുകൾ -- അതായത്, വാദങ്ങൾ കൈമാറി
ശരീരം വിലയിരുത്തപ്പെടുന്നു -- ഒരു ഉപയോഗിച്ച് സൂചിപ്പിക്കാൻ കഴിയും വാദം സൂചന ക്രമം
1 നും 9 നും ഇടയിലുള്ള ഒരു അക്കം പിന്തുടരുന്നു. പകരമായി, മാക്രോ പാരാമീറ്ററുകൾക്ക് പേരിടാം (കാണുക
താഴെ). കൂടാതെ, GPP വാക്യഘടനയും ഉള്ളടക്കത്തിന്റെ ഉള്ളടക്കവും തമ്മിലുള്ള ഇടപെടൽ ഒഴിവാക്കുന്നതിന്
ഇൻപുട്ട് ഫയൽ, എ ഉദ്ധരിക്കുക പ്രതീകം നല്കിയിട്ടുണ്ട്. തടയാൻ ഉദ്ധരണി പ്രതീകം ഉപയോഗിക്കാം
ഒരു മാക്രോ കോളിന്റെയോ കമന്റിന്റെയോ സ്ട്രിംഗിന്റെയോ പ്ലെയിൻ ടെക്സ്റ്റിന്റെ വ്യാഖ്യാനം. ഉദ്ധരണി
പ്രതീകം ഇനിപ്പറയുന്ന പ്രതീകത്തെ "സംരക്ഷിക്കുന്നു", മൂല്യനിർണ്ണയ സമയത്ത് എല്ലായ്പ്പോഴും നീക്കംചെയ്യപ്പെടും.
തുടർച്ചയായ രണ്ട് ഉദ്ധരണി പ്രതീകങ്ങൾ ഒരൊറ്റ ഉദ്ധരണി പ്രതീകമായി വിലയിരുത്തുന്നു.
അവസാനമായി, ശരിയായ ആർഗ്യുമെന്റ് ഡിലിമിറ്റേഷൻ സുഗമമാക്കുന്നതിന്, ചില പ്രതീകങ്ങൾ "സ്റ്റേക്ക്" ചെയ്യാവുന്നതാണ്.
ഒരു മാക്രോ ആർഗ്യുമെന്റിൽ അവ സംഭവിക്കുമ്പോൾ, ആർഗ്യുമെന്റ് സെപ്പറേറ്റർ അല്ലെങ്കിൽ മാക്രോ എൻഡ് സീക്വൻസ്
ആർഗ്യുമെന്റ് ബോഡി സന്തുലിതമല്ലെങ്കിൽ അവ പാഴ്സ് ചെയ്യപ്പെടുന്നില്ല. ഇത് മാക്രോ കോളുകൾ നെസ്റ്റിംഗ് ചെയ്യാൻ അനുവദിക്കുന്നു
ഉദ്ധരണികൾ ഉപയോഗിക്കാതെ. തെറ്റായ സമതുലിതമായ വാദം ആവശ്യമാണെങ്കിൽ, പ്രതീകങ്ങൾ ഉദ്ധരിക്കുക
സന്തുലിതമാക്കുന്നതിന്, അടുക്കിയിരിക്കുന്ന ചില പ്രതീകങ്ങൾക്ക് മുന്നിൽ ചേർക്കണം.
മുകളിൽ വിവരിച്ചിരിക്കുന്ന മാക്രോ കൺസ്ട്രക്ഷൻ സീക്വൻസുകൾ മെറ്റാ-മാക്രോകൾക്കും വേണ്ടിയും വ്യത്യസ്തമായിരിക്കും
ഉപയോക്തൃ മാക്രോകൾ: cpp മോഡിൽ ഇതാണ്, ഉദാഹരണത്തിന്. മെറ്റാ-മാക്രോകൾക്ക് കഴിയും എന്നതിനാൽ ശ്രദ്ധിക്കുക
രണ്ട് ആർഗ്യുമെന്റുകൾ വരെ മാത്രമേ ഉള്ളൂ, രണ്ടാമത്തെ ആർഗ്യുമെന്റിനുള്ള ഡീലിമിറ്റേഷൻ നിയമങ്ങൾ കുറച്ച് മാത്രമാണ്
ന്റെ രണ്ടാമത്തെ ആർഗ്യുമെന്റിൽ സ്ലോപ്പിയർ, ഉദ്ധരിക്കാത്ത ആർഗ്യുമെന്റ് സെപ്പറേറ്റർ സീക്വൻസുകൾ അനുവദനീയമാണ്
ഒരു മെറ്റാ-മാക്രോ.
സ്റ്റാൻഡേർഡ് ഓപ്പറേറ്റിംഗ് മോഡുകളിലൊന്ന് തിരഞ്ഞെടുത്തിട്ടില്ലെങ്കിൽ, മുകളിലുള്ള വാക്യഘടന ക്രമങ്ങൾ ആകാം
മെറ്റാ-യ്ക്കായി യഥാക്രമം -M, -U ഓപ്ഷനുകൾ ഉപയോഗിച്ച് കമാൻഡ്-ലൈനിൽ വ്യക്തമാക്കിയിരിക്കുന്നു.
മാക്രോകളും ഉപയോക്തൃ മാക്രോകളും അല്ലെങ്കിൽ ഒരു ഇൻപുട്ട് ഫയലിനുള്ളിൽ #മോഡ് മെറ്റാ ഒപ്പം #മോഡ് ഉപയോക്താവ് മെറ്റാ-
മാക്രോ കോളുകൾ. രണ്ട് സാഹചര്യങ്ങളിലും മോഡ് വിവരണത്തിൽ ഉപയോക്താവിനുള്ള ഒമ്പത് പാരാമീറ്ററുകൾ അടങ്ങിയിരിക്കുന്നു
മാക്രോ സ്പെസിഫിക്കേഷനുകൾ, അതായത് മാക്രോ സ്റ്റാർട്ട് സീക്വൻസ്, ഷോർട്ട് മാക്രോ എൻഡ് സീക്വൻസ്, ദി
ആർഗ്യുമെന്റ് സ്റ്റാർട്ട് സീക്വൻസ്, ആർഗ്യുമെന്റ് സെപ്പറേറ്റർ, ലോംഗ് മാക്രോ എൻഡ് സീക്വൻസ്, സ്ട്രിംഗ്
സ്റ്റാക്ക് ചെയ്യാനുള്ള പ്രതീകങ്ങൾ ലിസ്റ്റ് ചെയ്യുന്നു, അൺസ്റ്റാക്ക് ചെയ്യാനുള്ള സ്ട്രിംഗ് ലിസ്റ്റിംഗ് പ്രതീകങ്ങൾ, വാദം
റഫറൻസ് സീക്വൻസ്, ഒടുവിൽ ഉദ്ധരണി പ്രതീകം. ചുവടെ വിശദീകരിച്ചിരിക്കുന്നതുപോലെ, ഈ ക്രമങ്ങൾ
സി സ്ട്രിംഗുകളുടെ വാക്യഘടന ഉപയോഗിച്ച് നൽകണം; അവ ആൽഫാന്യൂമെറിക്കിൽ തുടങ്ങണം
പ്രതീകം, കൂടാതെ ആദ്യത്തെ അഞ്ച് സ്ട്രിംഗുകളിൽ പ്രത്യേക പൊരുത്തപ്പെടുന്ന ക്രമങ്ങൾ ഉപയോഗിക്കാം (കാണുക
താഴെ). ഉദ്ധരണി പ്രതീകവുമായി ബന്ധപ്പെട്ട ആർഗ്യുമെന്റ് ശൂന്യമായ സ്ട്രിംഗാണെങ്കിൽ, അത്
ആർഗ്യുമെന്റിന്റെ പ്രവർത്തനം പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു. മെറ്റാ-മാക്രോ സ്പെസിഫിക്കേഷനുകൾക്ക് ഏഴ് മാത്രമേയുള്ളൂ
പാരാമീറ്ററുകൾ, ആർഗ്യുമെന്റ് റഫറൻസ് സീക്വൻസും ഉദ്ധരണി പ്രതീകവും എന്നതുമായി പങ്കിടുന്നു
ഉപയോക്തൃ മാക്രോ വാക്യഘടന.
ഒരു കമന്റിന്റെ/സ്ട്രിംഗിന്റെ ഘടന ഇപ്രകാരമാണ്: ഇത് ഒരു ക്രമത്തിൽ തുടങ്ങണം
നൽകിയിരിക്കുന്നതുമായി പൊരുത്തപ്പെടുന്ന പ്രതീകങ്ങൾ അഭിപ്രായം/സ്ട്രിംഗ് തുടക്കം ക്രമം, എപ്പോഴും ആദ്യം അവസാനിക്കുന്നു
സംഭവിക്കുന്നത് അഭിപ്രായം/സ്ട്രിംഗ് അവസാനിക്കുന്നു ക്രമം, അതിന് മുമ്പുള്ള ഒറ്റസംഖ്യയുടെ സംഖ്യയില്ലെങ്കിൽ
സംഭവങ്ങൾ സ്ട്രിംഗ് ഉദ്ധരണി പ്രതീകം (അത്തരം ഒരു പ്രതീകം വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ). ഇൻ
ഉള്ളിൽ മാക്രോ മൂല്യനിർണ്ണയം പ്രാപ്തമാക്കുന്നതിന് ചില സന്ദർഭങ്ങൾ കമന്റ്/സ്ട്രിംഗുകൾ വ്യക്തമാക്കാം
അഭിപ്രായം/സ്ട്രിംഗ്; അങ്ങനെയെങ്കിൽ, മാക്രോകൾക്കായി ഒരു ഉദ്ധരണി പ്രതീകം നിർവചിച്ചിട്ടുണ്ടെങ്കിൽ അത് ആകാം
മാക്രോ എന്ന വ്യത്യാസത്തിൽ കമന്റ്/സ്ട്രിംഗ് അവസാനിക്കുന്നത് തടയാനും ഉപയോഗിക്കുന്നു
ഉദ്ധരണി പ്രതീകം എല്ലായ്പ്പോഴും ഔട്ട്പുട്ടിൽ നിന്ന് നീക്കംചെയ്യപ്പെടും, അതേസമയം സ്ട്രിംഗ്-ക്വട്ടേഷൻ പ്രതീകം എല്ലായ്പ്പോഴും ആയിരിക്കും
ഔട്ട്പുട്ട്. ചില സാഹചര്യങ്ങളിൽ ഒരു കമന്റ്/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ ആകാം എന്നതും ശ്രദ്ധിക്കുക
അപ്രാപ്തമാക്കി, ഈ സാഹചര്യത്തിൽ കമന്റ്/സ്ട്രിംഗ് സ്റ്റാർട്ട് സീക്വൻസ് അവഗണിക്കപ്പെടും. ഒടുവിൽ, അത്
a എന്നത് വ്യക്തമാക്കാൻ സാധിക്കും സ്ട്രിംഗ് മുന്നറിയിപ്പ് പ്രതീകം ഒരു കമന്റ്/സ്ട്രിംഗിനുള്ളിൽ ആരുടെ സാന്നിധ്യം
ജിപിപി ഒരു മുന്നറിയിപ്പ് പുറപ്പെടുവിക്കാൻ ഇടയാക്കും (സിപിപിയിൽ അവസാനിക്കാത്ത സ്ട്രിംഗുകൾ കണ്ടെത്തുന്നതിന് ഇത് ഉപയോഗപ്രദമാണ്
മോഡ്). ഇൻപുട്ട് ഫയലുകളിൽ അവസാനിപ്പിക്കാത്ത കമന്റുകൾ/സ്ട്രിംഗുകൾ അടങ്ങിയിരിക്കാൻ അനുവാദമില്ല എന്നത് ശ്രദ്ധിക്കുക.
ഇൻപുട്ട് ഫയലിനുള്ളിൽ നിന്ന് ഒരു കമന്റ്/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ ഡിക്ലയർ ചെയ്യാം #മോഡ്
അഭിപ്രായം മെറ്റാ-മാക്രോ കോൾ (അല്ലെങ്കിൽ തത്തുല്യമായി #മോഡ് സ്ട്രിംഗ്), ഈ സാഹചര്യത്തിൽ C യുടെ എണ്ണം
കമന്റ്/സ്ട്രിംഗ് വിവരിക്കുന്നതിനുള്ള ആർഗ്യുമെന്റുകളായി നൽകേണ്ട സ്ട്രിംഗുകൾ ഇടയിൽ എവിടെയും ആകാം
രണ്ട്, നാല്: ആദ്യത്തെ രണ്ട് ആർഗ്യുമെന്റുകൾ (നിർബന്ധം) ആരംഭ ക്രമവും അവസാനവുമാണ്
ക്രമം, കൂടാതെ പ്രത്യേക പൊരുത്തപ്പെടുന്ന ക്രമങ്ങൾ ഉപയോഗിക്കാനും കഴിയും (ചുവടെ കാണുക). അവർക്കില്ലായിരിക്കാം
ആൽഫാന്യൂമെറിക് പ്രതീകങ്ങളിൽ നിന്ന് ആരംഭിക്കുക. ഉണ്ടെങ്കിൽ മൂന്നാമത്തെ വാദത്തിന്റെ ആദ്യ പ്രതീകം
ഒന്ന്, സ്ട്രിംഗ്-ക്വോട്ട് പ്രതീകമായി ഉപയോഗിക്കുന്നു (അപ്രാപ്തമാക്കാൻ ഒരു ശൂന്യമായ സ്ട്രിംഗ് ഉപയോഗിക്കുക
പ്രവർത്തനക്ഷമത), നാലാമത്തെ ആർഗ്യുമെന്റിന്റെ ആദ്യ പ്രതീകം ഉണ്ടെങ്കിൽ, അത് ഉപയോഗിക്കുന്നു
സ്ട്രിംഗ് മുന്നറിയിപ്പ് കഥാപാത്രമായി. കമാൻഡ് ലൈനിൽ നിന്നും ഒരു സ്പെസിഫിക്കേഷൻ നൽകാം,
ഈ സാഹചര്യത്തിൽ +c ഓപ്ഷൻ ഉപയോഗിക്കുകയാണെങ്കിൽ രണ്ട് ആർഗ്യുമെന്റുകളും +s ഉപയോഗിക്കുകയാണെങ്കിൽ മൂന്ന് ആർഗ്യുമെന്റുകളും ഉണ്ടായിരിക്കണം
ഓപ്ഷൻ.
ഒരു കമന്റിന്റെ/സ്ട്രിംഗിന്റെ സ്വഭാവം സൂചിപ്പിക്കുന്നത് മൂന്ന് പ്രതീകങ്ങളുള്ള മോഡിഫയർ സ്ട്രിംഗാണ്, അത്
+c/+s കമാൻഡ്-ലൈൻ ഓപ്ഷനുകളിലേക്കോ അല്ലെങ്കിൽ എന്നതിലേക്കോ ഒരു ഓപ്ഷണൽ ആർഗ്യുമെന്റായി കൈമാറാം
#മോഡ് അഭിപ്രായം/#മോഡ് സ്ട്രിംഗ് മെറ്റാ-മാക്രോസ്. മോഡിഫയർ സ്ട്രിംഗ് ഒന്നും വ്യക്തമാക്കിയിട്ടില്ലെങ്കിൽ, ഡിഫോൾട്ട്
മൂല്യം അഭിപ്രായങ്ങൾക്ക് "ccc" ഉം സ്ട്രിംഗുകൾക്ക് "sss" ഉം ആണ്. ആദ്യത്തെ പ്രതീകം എന്നതിനോട് യോജിക്കുന്നു
മെറ്റാ-മാക്രോ കോളുകൾക്കുള്ളിലെ പെരുമാറ്റം (ഉപയോക്തൃ-മാക്രോ നിർവചനങ്ങൾ ഉൾപ്പെടെ, ഇവ ഉള്ളിൽ വരുന്നു
a # നിർവചിക്കുക മെറ്റാ-മാക്രോ കോൾ), രണ്ടാമത്തെ പ്രതീകം ഉപയോക്താവിനുള്ളിലെ പെരുമാറ്റവുമായി പൊരുത്തപ്പെടുന്നു-
മാക്രോ പാരാമീറ്ററുകൾ, കൂടാതെ മൂന്നാമത്തെ പ്രതീകം ഏതെങ്കിലും മാക്രോയുടെ പുറത്തുള്ള പെരുമാറ്റവുമായി പൊരുത്തപ്പെടുന്നു
വിളി. ഈ പ്രതീകങ്ങളിൽ ഓരോന്നിനും ഇനിപ്പറയുന്ന മൂല്യങ്ങൾ എടുക്കാം:
i അഭിപ്രായം/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ പ്രവർത്തനരഹിതമാക്കുക.
c അഭിപ്രായം (മൂല്യനിർണ്ണയമോ ഔട്ട്പുട്ടോ അല്ല).
s സ്ട്രിംഗ് (സ്ട്രിംഗും അതിന്റെ ഡിലിമിറ്റർ സീക്വൻസുകളും ഔട്ട്പുട്ട് പോലെയാണ്).
q ഉദ്ധരിച്ച സ്ട്രിംഗ് (ഡിലിമിറ്റർ സീക്വൻസുകളില്ലാതെ സ്ട്രിംഗ് ഔട്ട്പുട്ട് പോലെയാണ്).
C വിലയിരുത്തിയ അഭിപ്രായം (മാക്രോകൾ വിലയിരുത്തപ്പെടുന്നു, പക്ഷേ ഔട്ട്പുട്ട് നിരസിക്കപ്പെട്ടു).
S മൂല്യനിർണ്ണയ സ്ട്രിംഗ് (മാക്രോകൾ വിലയിരുത്തപ്പെടുന്നു, ഡിലിമിറ്ററുകൾ ഔട്ട്പുട്ടാണ്).
Q മൂല്യനിർണ്ണയം ഉദ്ധരിച്ച സ്ട്രിംഗ് (മാക്രോകൾ വിലയിരുത്തപ്പെടുന്നു, ഡിലിമിറ്ററുകൾ ഔട്ട്പുട്ട് അല്ല).
പ്രധാന കുറിപ്പ്: മറ്റൊന്നിനുള്ളിൽ ഒരു കമന്റ്/സ്ട്രിംഗ് സ്റ്റാർട്ട് സീക്വൻസിൻറെ ഏതെങ്കിലും സംഭവം
മാക്രോ മൂല്യനിർണ്ണയം പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിലും അഭിപ്രായം/സ്ട്രിംഗ് എപ്പോഴും അവഗണിക്കപ്പെടും. മറ്റൊരു വാക്കിൽ,
അഭിപ്രായങ്ങൾ/സ്ട്രിംഗുകൾ നെസ്റ്റ് ചെയ്യാൻ കഴിയില്ല. പ്രത്യേകിച്ചും, `ക്യു' മോഡിഫയർ ഒരു സൗകര്യപ്രദമായ മാർഗമാണ്
എല്ലാ അഭിപ്രായങ്ങളും സ്ട്രിംഗ് സ്പെസിഫിക്കേഷനുകളും താൽക്കാലികമായി പ്രവർത്തനരഹിതമാക്കുന്നതിനുള്ള ഒരു വാക്യഘടനയെ നിർവചിക്കുന്നു.
സിന്റാക്സ് സ്പെസിഫിക്കേഷൻ സ്ട്രിംഗുകൾ എല്ലായ്പ്പോഴും C സ്ട്രിംഗുകളായി നൽകണം
a യുടെ വാദങ്ങളായി നൽകിയിരിക്കുന്നു #മോഡ് meta-macro കോൾ അല്ലെങ്കിൽ ഒരു Unix ഷെല്ലിന്റെ കമാൻഡ് ലൈനിൽ. എങ്കിൽ
കമാൻഡ്-ലൈൻ ആർഗ്യുമെന്റുകൾ ഒരു സ്റ്റാൻഡേർഡ് യുണിക്സ് ഷെല്ലിനെ അപേക്ഷിച്ച് മറ്റൊരു രീതിയിലൂടെയാണ് നൽകുന്നത്
ഷെൽ സ്വഭാവം അനുകരിക്കണം -- അതായത്, ചുറ്റുമുള്ള "" ഉദ്ധരണികൾ നീക്കം ചെയ്യണം, എല്ലാം
`\\' സംഭവങ്ങൾ ഒരൊറ്റ ബാക്ക്സ്ലാഷ് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കേണ്ടതാണ്, അതുപോലെ തന്നെ `\"'
പകരം `"'. `\n' പോലുള്ള സീക്വൻസുകൾ GPP തിരിച്ചറിഞ്ഞു, അവ അതേപടി വിടണം.
പ്രതീക ഗണത്തിന്റെ ചില ഉപഗണങ്ങളുമായി പൊരുത്തപ്പെടുന്ന പ്രത്യേക സീക്വൻസുകൾ ഉപയോഗിക്കാം. അവരുടേതാണ്
ഫോം `\x', എവിടെ x ഇവയിലൊന്നാണ്:
b ഒന്നോ അതിലധികമോ സ്പെയ്സുകളുടെയോ ടാബ് പ്രതീകങ്ങളുടെയോ ഏതെങ്കിലും ശ്രേണിയുമായി പൊരുത്തപ്പെടുന്നു (`\b' ഇതിന് സമാനമാണ്
`').
w പൂജ്യത്തിന്റെയോ അതിലധികമോ സ്പെയ്സുകളുടെയോ ടാബ് പ്രതീകങ്ങളുടെയോ ഏതെങ്കിലും ശ്രേണിയുമായി പൊരുത്തപ്പെടുന്നു.
B ഒന്നോ അതിലധികമോ സ്പെയ്സുകൾ, ടാബുകൾ അല്ലെങ്കിൽ ന്യൂലൈൻ പ്രതീകങ്ങൾ എന്നിവയുടെ ഏതെങ്കിലും ശ്രേണിയുമായി പൊരുത്തപ്പെടുന്നു.
W പൂജ്യമോ അതിലധികമോ സ്പെയ്സുകൾ, ടാബുകൾ അല്ലെങ്കിൽ ന്യൂലൈൻ പ്രതീകങ്ങൾ എന്നിവയുടെ ഏതെങ്കിലും ശ്രേണിയുമായി പൊരുത്തപ്പെടുന്നു.
a ഒരു അക്ഷരമാല (`a' മുതൽ `z', `A' മുതൽ `Z' വരെ).
A ഒരു അക്ഷരമാല അല്ലെങ്കിൽ ഒരു സ്പേസ്, ടാബ് അല്ലെങ്കിൽ ന്യൂലൈൻ.
# ഒരു അക്കം (`0' മുതൽ `9' വരെ).
i ഒരു ഐഡന്റിഫയർ പ്രതീകം. പൊരുത്തപ്പെടുന്ന പ്രതീകങ്ങളുടെ ഗണം ഉപയോഗിച്ച് ഇഷ്ടാനുസൃതമാക്കാവുന്നതാണ്
#മോഡ് പ്രതീകം id കമാൻഡ്. സ്ഥിരസ്ഥിതി ക്രമീകരണം ആൽഫാന്യൂമെറിക് പ്രതീകങ്ങളുമായി പൊരുത്തപ്പെടുന്നു
അടിവരയിടുന്നു (`a' to `z', `A' to `Z', `0' to `9' and `_').
t ഒരു ടാബ് പ്രതീകം.
n ഒരു പുതിയ വരി കഥാപാത്രം.
o ഒരു ഓപ്പറേറ്റർ കഥാപാത്രം. പൊരുത്തപ്പെടുന്ന പ്രതീകങ്ങളുടെ ഗണം ഉപയോഗിച്ച് ഇഷ്ടാനുസൃതമാക്കാവുന്നതാണ്
#മോഡ് പ്രതീകം op കമാൻഡ്. സ്ഥിരസ്ഥിതി ക്രമീകരണം എല്ലാ പ്രതീകങ്ങളുമായും പൊരുത്തപ്പെടുന്നു
"+-*/\^<>=`~:.?@#&!%|", `!', `%', `|' എന്നീ പ്രോലോഗ് മോഡിൽ ഒഴികെ അല്ല
പൊരുത്തപ്പെട്ടു.
O ഒരു ഓപ്പറേറ്റർ പ്രതീകം അല്ലെങ്കിൽ ഒരു പരാന്തീസിസ് പ്രതീകം. അധികമായി പൊരുത്തപ്പെടുന്ന സെറ്റ്
`\o' മായി താരതമ്യപ്പെടുത്തുമ്പോൾ പ്രതീകങ്ങൾ ഉപയോഗിച്ച് ഇഷ്ടാനുസൃതമാക്കാവുന്നതാണ് #മോഡ് പ്രതീകം തുല്യരായി
കമാൻഡ്. "()[]{}" എന്നതിലെ പ്രതീകങ്ങൾ പരാൻതീസിസുകളായി ഉണ്ടായിരിക്കുന്നതാണ് സ്ഥിരസ്ഥിതി ക്രമീകരണം.
കൂടാതെ, `\w', `\W' എന്നിവ ഒഴികെയുള്ള ഈ പൊരുത്തപ്പെടുന്ന എല്ലാ ഉപസെറ്റുകളും ഒരു ചേർത്തുകൊണ്ട് നിരാകരിക്കാനാകും.
`!' -- അതായത്, എഴുതി `\!x'\' എന്നതിനുപകരംx'.
ഒരു പ്രധാന സവിശേഷത ശ്രദ്ധിക്കുക തുടക്കം സീക്വൻസുകളാണ്: എ യുടെ ആദ്യ പ്രതീകം വരുമ്പോൾ
മാക്രോ അല്ലെങ്കിൽ കമന്റ്/സ്ട്രിംഗ് സ്റ്റാർട്ട് സീക്വൻസ് എന്നത് '' അല്ലെങ്കിൽ മുകളിലുള്ള പ്രത്യേക സീക്വൻസുകളിൽ ഒന്ന് ആണ്
സീക്വൻസിന്റെ തന്നെ ഭാഗമായി എടുത്തിട്ടില്ല, പകരം ഒരു സന്ദർഭ പരിശോധനയായി ഉപയോഗിക്കുന്നു: എന്നതിനായി
ഉദാഹരണം '\n' ൽ ആരംഭിക്കുന്ന ഒരു ആരംഭ ശ്രേണി ഒരു വരിയുടെ തുടക്കത്തിൽ മാത്രം പൊരുത്തപ്പെടുന്നു, പക്ഷേ
പൊരുത്തപ്പെടുന്ന ന്യൂലൈൻ പ്രതീകം ക്രമത്തിന്റെ ഭാഗമായി കണക്കാക്കില്ല. അതുപോലെ ഒരു തുടക്കം
ചില വൈറ്റ്സ്പെയ്സ് ഉണ്ടെങ്കിൽ മാത്രമേ ' ' യിൽ തുടങ്ങുന്ന ക്രമം പൊരുത്തപ്പെടൂ, പക്ഷേ പൊരുത്തപ്പെടുത്തൽ
വൈറ്റ്സ്പേസ് ആരംഭ ശ്രേണിയുടെ ഭാഗമായി കണക്കാക്കുന്നില്ല, അതിനാൽ ഇത് അയയ്ക്കുന്നു
ഔട്ട്പുട്ട്. ഒരു ഫയലിന്റെ തുടക്കത്തിൽ തന്നെ ഒരു സന്ദർഭ പരിശോധന നടത്തുകയാണെങ്കിൽ (അല്ലെങ്കിൽ പൊതുവേ
മൂല്യനിർണ്ണയം ചെയ്യേണ്ട ഏതൊരു ബോഡിയുടെയും), ഫലം ഒരു പുതിയ ലൈൻ പ്രതീകവുമായി പൊരുത്തപ്പെടുന്നതിന് തുല്യമാണ്
(ഇത് ഒരു സിപിപി-മോഡ് ഫയലിന് ഒരു മെറ്റാ-മാക്രോ കോൾ ഉപയോഗിച്ച് ആരംഭിക്കുന്നത് സാധ്യമാക്കുന്നു).
പതിപ്പ് 2.1 ൽ രണ്ട് പ്രത്യേക വാക്യഘടന നിയമങ്ങൾ ചേർത്തു. ആദ്യം, ആർഗ്യുമെന്റ് റഫറൻസുകൾ (#n) ഇല്ല
മാക്രോ കോളുകൾക്കും നിർവചനങ്ങൾക്കും പുറത്തായിരിക്കുമ്പോൾ കൂടുതൽ കാലം വിലയിരുത്തപ്പെടും. എന്നിരുന്നാലും, അവർ
ഒരു കോളിനുള്ളിൽ (ഉദ്ധരണി പ്രതീകങ്ങളാൽ പരിരക്ഷിച്ചിട്ടില്ലെങ്കിൽ) ഇനി ദൃശ്യമാകാൻ അനുവദിക്കില്ല
നിർവചിക്കപ്പെട്ട ഉപയോക്തൃ മാക്രോ; നിശ്ശബ്ദമായി അവ നീക്കം ചെയ്യുക എന്നതാണ് നിലവിലെ പെരുമാറ്റം (പിന്നിലേക്ക് അനുയോജ്യം).
അത് സംഭവിക്കുകയാണെങ്കിൽ ഇൻപുട്ടിൽ നിന്ന്.
രണ്ടാമതായി, എൻഡ് സീക്വൻസ് (മാക്രോകൾക്കോ കമന്റുകൾക്കോ) ഒരൊറ്റ ന്യൂലൈൻ അടങ്ങിയതാണെങ്കിൽ
സ്വഭാവം, ഡീലിമിറ്റേഷൻ നിയമങ്ങൾ അന്തിമമായ ഒരു സന്ദർഭത്തിൽ മൂല്യനിർണ്ണയത്തിലേക്ക് നയിക്കുകയാണെങ്കിൽ
ന്യൂലൈൻ പ്രതീകം ഇല്ല, GPP സൃഷ്ടിക്കുന്നതിനുപകരം കാണാതായ ന്യൂലൈൻ നിശബ്ദമായി അവഗണിക്കുന്നു
ഒരു തെറ്റ്. മെറ്റാ-മാക്രോ കോളുകൾ ഇപ്പോൾ ലളിതമായ രീതിയിൽ നെസ്റ്റ് ചെയ്യാൻ കഴിയും എന്നതാണ് പ്രധാന അനന്തരഫലം
സ്റ്റാൻഡേർഡ്, cpp, Prolog മോഡുകളിൽ.
മൂല്യനിർണ്ണയം നിയമങ്ങൾ
ഇൻപുട്ട് തുടർച്ചയായി വായിക്കുകയും നിലവിലെ മോഡിന്റെ നിയമങ്ങൾക്കനുസരിച്ച് വ്യാഖ്യാനിക്കുകയും ചെയ്യുന്നു. എല്ലാം
ഇൻപുട്ട് ടെക്സ്റ്റ് ആദ്യം നിർദിഷ്ട കമന്റ്/സ്ട്രിംഗ് സ്റ്റാർട്ട് സീക്വൻസുകളുമായി പൊരുത്തപ്പെടുന്നു
നിലവിലെ മോഡ് ('i' മോഡിഫയർ പ്രവർത്തനരഹിതമാക്കിയവ ഒഴികെ), ശരീരം അല്ലാത്ത പക്ഷം
മാക്രോ മൂല്യനിർണ്ണയം പ്രാപ്തമാക്കുന്ന മോഡിഫയർ ഒരു കമന്റിന്റെ/സ്ട്രിംഗിന്റെ ഉള്ളടക്കമാണ് വിലയിരുത്തുന്നത്.
ഏറ്റവും സമീപകാലത്ത് നിർവ്വചിച്ച കമന്റ്/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷനുകൾ ആദ്യം പരിശോധിക്കും. പ്രധാനപ്പെട്ടത്
ശ്രദ്ധിക്കുക: ഒരു മാക്രോയുടെ പേരിനും അതിന്റെ ആർഗ്യുമെന്റുകൾക്കുമിടയിൽ അഭിപ്രായങ്ങൾ ദൃശ്യമാകണമെന്നില്ല (അങ്ങനെ ചെയ്യുന്നത്
നിർവചിക്കപ്പെടാത്ത പെരുമാറ്റത്തിൽ കലാശിക്കുന്നു).
ഒരു കമന്റ്/സ്ട്രിംഗ് അല്ലാത്ത എന്തും സാധ്യമായ മെറ്റാ-മാക്രോ കോളുമായി പൊരുത്തപ്പെടുന്നു,
അതും പരാജയപ്പെടുകയാണെങ്കിൽ, സാധ്യമായ ഉപയോക്തൃ-മാക്രോ കോളിനെതിരെ. ശേഷിക്കുന്ന എല്ലാ ടെക്സ്റ്റും വിധേയമാകുന്നു
പ്രസക്തമായ ആർഗ്യുമെന്റ് ടെക്സ്റ്റ് ഉപയോഗിച്ച് ആർഗ്യുമെന്റ് റഫറൻസ് സീക്വൻസുകളുടെ പകരക്കാരൻ (ശൂന്യമല്ലെങ്കിൽ
മൂല്യനിർണ്ണയം ചെയ്യപ്പെടുന്ന ബോഡി ഒരു ഉപയോക്തൃ മാക്രോയുടെ നിർവചനമാണ്) ഉദ്ധരണി നീക്കം ചെയ്യുന്നു
ഒന്നുണ്ടെങ്കിൽ സ്വഭാവം.
ഏതെങ്കിലും മൂല്യനിർണ്ണയത്തിന് മുമ്പ് മെറ്റാ-മാക്രോ ആർഗ്യുമെന്റുകൾ മെറ്റാ-മാക്രോയിലേക്ക് കൈമാറുന്നത് ശ്രദ്ധിക്കുക
(മെറ്റാ-മാക്രോ അവയെ വിലയിരുത്താൻ തിരഞ്ഞെടുത്തേക്കാം, താഴെയുള്ള മെറ്റാ-മാക്രോ വിവരണങ്ങൾ കാണുക).
കാര്യത്തിൽ #മോഡ് meta-macro, GPP താൽക്കാലികമായി ഒരു അഭിപ്രായം/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ ചേർക്കുന്നു
സി സ്ട്രിംഗുകളുടെ ("...") തിരിച്ചറിയൽ പ്രവർത്തനക്ഷമമാക്കുന്നതിനും അവയ്ക്കുള്ളിൽ ഏതെങ്കിലും മൂല്യനിർണ്ണയം തടയുന്നതിനും, അതിനാൽ ഇല്ല
സി സ്ട്രിംഗ് ആർഗ്യുമെന്റുകളിൽ ഇടുന്ന പ്രതീകങ്ങളുടെ ഇടപെടൽ #മോഡ് കൂടെ
നിലവിലെ വാക്യഘടനയെ ഭയപ്പെടണം.
മറുവശത്ത്, ഒരു ഉപയോക്തൃ മാക്രോയിലേക്കുള്ള ആർഗ്യുമെന്റുകൾ വ്യവസ്ഥാപിതമായി വിലയിരുത്തപ്പെടുന്നു, തുടർന്ന്
മാക്രോ ഡെഫനിഷൻ ബോഡിയിലേക്ക് സന്ദർഭ പാരാമീറ്ററുകളായി കൈമാറി, അത് വിലയിരുത്തപ്പെടുന്നു
പരിസ്ഥിതി. മാക്രോ നിർവചനം ശൂന്യമാകുമ്പോൾ മാത്രമാണ് അപവാദം, ഈ സാഹചര്യത്തിൽ അത്
വാദങ്ങൾ വിലയിരുത്തപ്പെടുന്നില്ല. GPP താൽകാലികമായി മോഡിലേക്ക് മാറുന്നത് ശ്രദ്ധിക്കുക
മാക്രോ നിർവചിച്ചിരിക്കുന്നത് അതിനെ വിലയിരുത്തുന്നതിന് വേണ്ടിയാണ്, അതിനാൽ അത് മാറ്റുന്നത് തികച്ചും സുരക്ഷിതമാണ്
ഒരു മാക്രോ നിർവചിച്ചിരിക്കുന്ന സമയത്തിനും അത് വിളിക്കപ്പെടുന്ന സമയത്തിനും ഇടയിലുള്ള ഓപ്പറേറ്റിംഗ് മോഡ്.
നേരെമറിച്ച്, ഒരു ഉപയോക്താവ് മാക്രോ അതിന് പകരം നിലവിലെ മോഡിൽ പ്രവർത്തിക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ
അത് നിർവചിക്കാൻ ഉപയോഗിച്ചു, അത് a ഉപയോഗിച്ച് ആരംഭിക്കേണ്ടതുണ്ട് #മോഡ് വീണ്ടെടുക്കുക വിളിച്ച് എ എന്നതിൽ അവസാനിപ്പിക്കുക #മോഡ്
സംരക്ഷിക്കുക വിളി.
പേരിട്ട ആർഗ്യുമെന്റുകൾ ഉപയോഗിച്ച് ഒരു ഉപയോക്തൃ മാക്രോ നിർവചിക്കാം (കാണുക # നിർവചിക്കുക വിവരണം താഴെ). അതിൽ
കേസ്, മാക്രോ നിർവചനം വിലയിരുത്തുമ്പോൾ, പേരുള്ള ഓരോ പരാമീറ്ററും a കാരണമാകുന്നു
താൽക്കാലിക വെർച്വൽ ഉപയോക്തൃ-മാക്രോ നിർവചനം സൃഷ്ടിക്കും; അത്തരമൊരു മാക്രോയെ മാത്രമേ വിളിക്കാവൂ
ആർഗ്യുമെന്റുകളില്ലാതെ, അനുബന്ധ ആർഗ്യുമെന്റിന്റെ വാചകം തിരികെ നൽകുന്നു.
ശ്രദ്ധിക്കുക, കാരണം മാക്രോകൾ എപ്പോഴാണെന്നതിനേക്കാൾ അവ വിളിക്കപ്പെടുമ്പോൾ വിലയിരുത്തപ്പെടുന്നു
നിർവചിച്ചിരിക്കുന്നത്, ഒരു ആവർത്തന മാക്രോ എന്ന് വിളിക്കാനുള്ള ഏതൊരു ശ്രമവും നിർവചിക്കപ്പെടാത്ത സ്വഭാവത്തിന് കാരണമാകുന്നു
മാക്രോ ഉപയോഗിക്കുമ്പോൾ വളരെ നിർദ്ദിഷ്ട കേസ് # undef പരിമിതമായ നിരവധി ലൂപ്പുകൾക്ക് ശേഷം സ്വയം മായ്ക്കാൻ
ആവർത്തനങ്ങൾ.
അവസാനമായി, നിർവചനത്തിൽ ഉൾപ്പെടാത്ത ഒരു ഉപയോക്തൃ മാക്രോ വരുമ്പോൾ ഒരു പ്രത്യേക കേസ് സംഭവിക്കുന്നു
ആർഗ്യുമെന്റുകൾ (പേരുള്ള ആർഗ്യുമെന്റുകളോ ആർഗ്യുമെന്റ് റഫറൻസ് സീക്വൻസുകളോ അല്ല) a ൽ വിളിക്കുന്നത്
ഷോർട്ട് യൂസർ-മാക്രോ എൻഡ് സീക്വൻസ് ശൂന്യമായ മോഡ് (ഉദാ, cpp അല്ലെങ്കിൽ TeX മോഡ്). അതിൽ
ഇത് ഒരു ആണെന്ന് അനുമാനിക്കപ്പെടുന്നു അപരാഭിധാനം മാക്രോ: അതിന്റെ ആർഗ്യുമെന്റുകൾ കറണ്ടിൽ ആദ്യം വിലയിരുത്തപ്പെടുന്നു
മോഡ് പതിവുപോലെ, പക്ഷേ മാക്രോ നിർവചനത്തിലേക്ക് പാരാമീറ്ററുകളായി കൈമാറുന്നതിനുപകരം (ഏത്
അവ ഉപേക്ഷിക്കപ്പെടാൻ ഇടയാക്കും) അവ യഥാർത്ഥത്തിൽ മാക്രോ നിർവചനത്തിലേക്ക് കൂട്ടിച്ചേർക്കുന്നു,
മാക്രോ നിർവചിച്ചിരിക്കുന്ന മോഡിന്റെ വാക്യഘടന നിയമങ്ങളും തത്ഫലമായുണ്ടാകുന്ന വാചകവും ഉപയോഗിക്കുന്നു
വീണ്ടും വിലയിരുത്തപ്പെടുന്നു. അതിനാൽ, ഒരു മാക്രോ അപരനാമത്തിന്റെ കാര്യത്തിൽ, ശ്രദ്ധിക്കേണ്ടത് പ്രധാനമാണ്.
വ്യത്യസ്തമായ രണ്ട് മോഡുകളിൽ ആർഗ്യുമെന്റുകൾ യഥാർത്ഥത്തിൽ രണ്ടുതവണ വിലയിരുത്തപ്പെടുന്നു.
മെറ്റാ-മാക്രോസ്
ഈ മാക്രോകൾ എപ്പോഴും മുൻകൂട്ടി നിർവചിക്കപ്പെട്ടവയാണ്. അവരുടെ യഥാർത്ഥ കോളിംഗ് സീക്വൻസ് കറന്റിനെ ആശ്രയിച്ചിരിക്കുന്നു
മോഡ്; ഇവിടെ നമ്മൾ cpp പോലുള്ള നൊട്ടേഷൻ ഉപയോഗിക്കുന്നു.
# നിർവചിക്കുക x y
ഇത് ഉപയോക്തൃ മാക്രോയെ നിർവചിക്കുന്നു x as y. y ഏതെങ്കിലും സാധുവായ GPP ഇൻപുട്ട് ആകാം, കൂടാതെ
ഉദാഹരണം മറ്റ് മാക്രോകൾ. x ഒരു ഐഡന്റിഫയർ ആയിരിക്കണം (അതായത്, ഒരു ക്രമം
ആൽഫാന്യൂമെറിക് പ്രതീകങ്ങളും '_'), പേരുള്ള ആർഗ്യുമെന്റുകൾ വ്യക്തമാക്കിയിട്ടില്ലെങ്കിൽ. എങ്കിൽ x is
ഇതിനകം നിർവചിക്കപ്പെട്ടിട്ടുണ്ട്, മുമ്പത്തെ നിർവചനം തിരുത്തിയെഴുതിയിരിക്കുന്നു. രണ്ടാമത്തെ വാദം ഇല്ലെങ്കിൽ
നൽകി, x ഒന്നും ഔട്ട്പുട്ട് ചെയ്യാത്ത ഒരു മാക്രോ ആയി നിർവചിക്കപ്പെടും. ഒന്നുമില്ല x വേണ്ടാ y ആകുന്നു
വിലയിരുത്തി; മാക്രോ നിർവചനം വിളിക്കപ്പെടുമ്പോൾ മാത്രമേ വിലയിരുത്തപ്പെടുകയുള്ളൂ, എപ്പോഴല്ല
പ്രഖ്യാപിച്ചു.
ഒരു മാക്രോ നിർവചനത്തിൽ ആർഗ്യുമെന്റുകൾക്ക് പേരിടാനും കഴിയും: അങ്ങനെയെങ്കിൽ, the
വാദം x എല്ലാ ഐഡന്റിഫയറുകളും ഉള്ള ഒരു ഉപയോക്തൃ-മാക്രോ കോൾ ആയിരിക്കണം. ഇവ
മാക്രോ നിർവചനത്തിനുള്ളിൽ ഉപയോക്തൃ-മാക്രോകളായി ഐഡന്റിഫയറുകൾ ലഭ്യമാകും; ഇവ
വെർച്വൽ മാക്രോകളെ ആർഗ്യുമെന്റുകളില്ലാതെ വിളിക്കുകയും അനുബന്ധമായി വിലയിരുത്തുകയും വേണം
മാക്രോ പാരാമീറ്റർ.
#ദുരന്തം x y
ഇത് സമാനമായ രീതിയിൽ പ്രവർത്തിക്കുന്നു # നിർവചിക്കുക, എന്നാൽ രണ്ടാമത്തെ വാദം y വിലയിരുത്തപ്പെടുന്നു
ഉടനെ. ഉപയോക്തൃ മാക്രോ നിർവചനങ്ങൾ ഓരോ തവണയും വിലയിരുത്തപ്പെടുന്നതിനാൽ
വിളിച്ചു, ഇതിനർത്ഥം മാക്രോ എന്നാണ് y വിധേയമാക്കും രണ്ട് തുടർച്ചയായ വിലയിരുത്തലുകൾ. ദി
പ്രയോജനം #ദുരന്തം എന്തെങ്കിലും മൂല്യനിർണ്ണയം നടത്താനുള്ള ഒരേയൊരു മാർഗ്ഗമായതിനാൽ ഇത് വളരെ പ്രധാനമാണ്
ഒന്നിലധികം തവണ, ഇത് ഒരു മെറ്റാ-യുടെ ആർഗ്യുമെന്റുകളുടെ മൂല്യനിർണ്ണയം നിർബന്ധിതമാക്കാൻ ആവശ്യമായി വന്നേക്കാം.
സാധാരണയായി ഒരു മൂല്യനിർണ്ണയവും നടത്താത്ത മാക്രോ. എന്നിരുന്നാലും എല്ലാ വാദങ്ങളും മുതൽ
നിർവചിക്കുന്ന സമയത്ത് വിലയിരുത്തപ്പെടുന്ന റഫറൻസുകൾ ശരീരത്തിന്റെ വാദങ്ങളായി മനസ്സിലാക്കപ്പെടുന്നു
മാക്രോയെ നിർവചിക്കുന്നത് മാക്രോയുടെ തന്നെ വാദങ്ങളല്ല,
ഉടനടി വിലയിരുത്തുന്നത് തടയാൻ സാധാരണയായി ഒരാൾ ഉദ്ധരണി പ്രതീകം ഉപയോഗിക്കേണ്ടതുണ്ട്
വാദം പരാമർശങ്ങൾ.
# undef x
ഉപയോക്തൃ മാക്രോയുടെ നിലവിലുള്ള ഏതെങ്കിലും നിർവചനം ഇത് നീക്കം ചെയ്യുന്നു x.
#ifdef x
ഇത് ഒരു സോപാധിക ബ്ലോക്ക് ആരംഭിക്കുന്നു. എങ്കിൽ മാത്രമേ തുടർന്നുള്ളതെല്ലാം വിലയിരുത്തപ്പെടുകയുള്ളൂ
ഐഡന്റിഫയർ x നിർവചിച്ചിരിക്കുന്നത്, ഒന്നുകിൽ a വരെ # കൂടാതെ അല്ലെങ്കിൽ #അവസാനം പ്രസ്താവന എത്തി.
എന്നിരുന്നാലും, കമന്റ് ചെയ്ത വാചകം ഇപ്പോഴും നന്നായി സ്കാൻ ചെയ്തിരിക്കുന്നു, അതിനാൽ അതിന്റെ വാക്യഘടന
സാധുതയുള്ളതായിരിക്കണം. ഉള്ളത് പ്രത്യേകിച്ചും നിയമപരമാണ് # കൂടാതെ or #അവസാനം പ്രസ്താവന
സോപാധിക ബ്ലോക്ക് അവസാനിക്കുന്നത് ഉപയോക്തൃ-മാക്രോ വിപുലീകരണത്തിന്റെ ഫലമായി മാത്രമേ ദൃശ്യമാകൂ
ഇൻപുട്ടിൽ വ്യക്തമായി അല്ല.
#ifndef x
ഇത് ഒരു സോപാധിക ബ്ലോക്ക് ആരംഭിക്കുന്നു. എങ്കിൽ മാത്രമേ തുടർന്നുള്ളതെല്ലാം വിലയിരുത്തപ്പെടുകയുള്ളൂ
ഐഡന്റിഫയർ x നിർവചിച്ചിട്ടില്ല.
#ifeq x y
ഇത് ഒരു സോപാധിക ബ്ലോക്ക് ആരംഭിക്കുന്നു. എങ്കിൽ മാത്രമേ തുടർന്നുള്ളതെല്ലാം വിലയിരുത്തപ്പെടുകയുള്ളൂ
യുടെ വിലയിരുത്തലുകളുടെ ഫലങ്ങൾ x ഒപ്പം y പ്രതീക സ്ട്രിംഗുകൾക്ക് സമാനമാണ്. ഏതെങ്കിലും
താരതമ്യത്തിനായി മുൻനിരയിലുള്ളതോ പിന്നിലുള്ളതോ ആയ വൈറ്റ്സ്പെയ്സ് അവഗണിക്കപ്പെട്ടിരിക്കുന്നു. cpp മോഡിൽ എന്നത് ശ്രദ്ധിക്കുക
ഉദ്ധരിക്കാത്ത ഏതെങ്കിലും വൈറ്റ്സ്പേസ് പ്രതീകം ആദ്യ വാദത്തിന്റെ അവസാനമായി മനസ്സിലാക്കുന്നു,
അതിനാൽ ശ്രദ്ധിക്കേണ്ടത് ആവശ്യമാണ്.
#ifneq x y
ഇത് ഒരു സോപാധിക ബ്ലോക്ക് ആരംഭിക്കുന്നു. എങ്കിൽ മാത്രമേ തുടർന്നുള്ളതെല്ലാം വിലയിരുത്തപ്പെടുകയുള്ളൂ
യുടെ വിലയിരുത്തലുകളുടെ ഫലങ്ങൾ x ഒപ്പം y സമാനമല്ല (നേതൃത്വം വരെ അല്ലെങ്കിൽ
പിന്നിലുള്ള വൈറ്റ്സ്പെയ്സ്).
# കൂടാതെ ഇത് നിലവിലെ സോപാധിക ബ്ലോക്കിന്റെ ലോജിക്കൽ മൂല്യം മാറ്റുന്നു. തുടർന്നുള്ള കാര്യം
മുമ്പത്തെ ഇൻപുട്ട് കമന്റ് ചെയ്തിട്ടുണ്ടെങ്കിൽ മാത്രമേ വിലയിരുത്തൂ.
#അവസാനം ഇത് a ആരംഭിച്ച ഒരു സോപാധിക ബ്ലോക്ക് അവസാനിക്കുന്നു #എങ്കിൽ... മെറ്റാ-മാക്രോ.
# ഉൾപ്പെടുത്തുക ഫയല്
ഇത് GPP-ന് നിർദ്ദിഷ്ട ഫയൽ തുറന്ന് അതിന്റെ ഉള്ളടക്കങ്ങൾ വിലയിരുത്തുന്നതിന് കാരണമാകുന്നു
നിലവിലെ ഔട്ട്പുട്ടിൽ ഫലമായുണ്ടാകുന്ന വാചകം. എല്ലാ നിർവ്വചിച്ച ഉപയോക്തൃ മാക്രോകളും ഇപ്പോഴും ലഭ്യമാണ്
ഉൾപ്പെടുത്തിയ ഫയലിൽ, കൂടാതെ ഉൾപ്പെടുത്തിയ ഫയലിൽ നിർവചിച്ചിരിക്കുന്ന എല്ലാ മാക്രോകളും പരസ്പരവിരുദ്ധമായി ചെയ്യും
തുടർന്നുള്ള എല്ലാത്തിലും ലഭ്യമാകും. ഉൾപ്പെടുത്തിയ ഫയലാണ് ആദ്യം തിരയുന്നത്
നിലവിലെ ഡയറക്ടറി, തുടർന്ന്, കണ്ടെത്തിയില്ലെങ്കിൽ, വ്യക്തമാക്കിയ ഡയറക്ടറികളിലൊന്നിൽ
കൊണ്ട് -I കമാൻഡ്-ലൈൻ ഓപ്ഷൻ (അല്ലെങ്കിൽ / usr / ഉൾപ്പെടുത്തുക ഡയറക്ടറി വ്യക്തമാക്കിയിട്ടില്ലെങ്കിൽ).
അനുയോജ്യത കാരണങ്ങളാൽ, ഫയലിന്റെ പേര് ഇടയിൽ ഇടാൻ കഴിയുമെന്നത് ശ്രദ്ധിക്കുക
"" അല്ലെങ്കിൽ <>.
വിവിധ ഡയറക്ടറികൾ തിരയുന്ന ക്രമം ഫയലുകൾ ഉൾപ്പെടുന്നതാണ്
ബാധിച്ചത് -nostdinc, -നോകുറിങ്ക് ഒപ്പം - curdirinclast കമാൻഡ്-ലൈൻ ഓപ്ഷനുകൾ.
ഒരു ഫയൽ ഉൾപ്പെടുത്തിയാൽ, നിലവിലെ ഓപ്പറേറ്റിംഗ് മോഡിന്റെ ഒരു പകർപ്പ് GPP ഉടനടി സംരക്ഷിക്കുന്നു
മോഡ് സ്റ്റാക്കിലേക്ക്, ഉൾപ്പെടുത്തിയതിന്റെ അവസാനം ഓപ്പറേറ്റിംഗ് മോഡ് പുനഃസ്ഥാപിക്കുന്നു
ഫയൽ. ഉൾപ്പെടുത്തിയ ഫയൽ, എയിൽ തുടങ്ങി ഈ സ്വഭാവത്തെ അസാധുവാക്കാം #മോഡ് വീണ്ടെടുക്കുക
വിളിക്കുകയും a എന്നതിൽ അവസാനിക്കുകയും ചെയ്യുന്നു #മോഡ് തള്ളുക വിളി. കൂടാതെ, എപ്പോൾ -m കമാൻഡ് ലൈൻ
ഓപ്ഷൻ വ്യക്തമാക്കിയിരിക്കുന്നു, GPP സ്വയമേവ cpp അനുയോജ്യത മോഡിലേക്ക് മാറും
'.c' അല്ലെങ്കിൽ '.h' എന്നതിൽ അവസാനിക്കുന്ന ഒരു ഫയൽ ഉൾപ്പെടുത്തുമ്പോൾ.
# എക്സി കമാൻഡ്
ഇത് GPP നിർദ്ദിഷ്ട കമാൻഡ് ലൈൻ പ്രവർത്തിപ്പിക്കുന്നതിനും അതിന്റെ സ്റ്റാൻഡേർഡ് ഉൾപ്പെടുത്തുന്നതിനും കാരണമാകുന്നു
നിലവിലെ ഔട്ട്പുട്ടിൽ ഔട്ട്പുട്ട്. സുരക്ഷാ കാരണങ്ങളാൽ, ഇത് മെറ്റാ-മാക്രോ ആണെന്നത് ശ്രദ്ധിക്കുക
അല്ലാതെ അപ്രാപ്തമാക്കി -x കമാൻഡ് ലൈൻ ഫ്ലാഗ് വ്യക്തമാക്കി. ഉപയോഗിക്കുകയാണെങ്കിൽ # എക്സി അല്ല
അനുവദനീയമാണ്, ഒരു മുന്നറിയിപ്പ് സന്ദേശം അച്ചടിക്കുകയും ഔട്ട്പുട്ട് ശൂന്യമാക്കുകയും ചെയ്യുന്നു. എന്നത് ശ്രദ്ധിക്കുക
നിർദ്ദിഷ്ട കമാൻഡ് ലൈൻ എക്സിക്യൂട്ട് ചെയ്യുന്നതിനുമുമ്പ് വിലയിരുത്തപ്പെടുന്നു, അങ്ങനെ ഇത് ഉപയോഗിക്കാൻ അനുവദിക്കുന്നു
കമാൻഡ് ലൈനിലെ മാക്രോകൾ. എന്നിരുന്നാലും, കമാൻഡിന്റെ ഔട്ട്പുട്ട് പദാനുപദമായി ഉൾപ്പെടുത്തിയിട്ടുണ്ട്
കൂടാതെ വിലയിരുത്തിയിട്ടില്ല. നിങ്ങൾക്ക് ഔട്ട്പുട്ട് മൂല്യനിർണ്ണയം വേണമെങ്കിൽ, നിങ്ങൾ ഉപയോഗിക്കണം #ദുരന്തം
(മുകളിൽ കാണുക) ഇരട്ട മൂല്യനിർണ്ണയത്തിന് കാരണമാകുന്നു.
#ഇവൽ exr
ദി #ഇവൽ മെറ്റാ-മാക്രോ വിലയിരുത്താൻ ശ്രമിക്കുന്നു exr ആദ്യം മാക്രോകൾ വികസിപ്പിക്കുന്നതിലൂടെ (സാധാരണ
GPP മൂല്യനിർണ്ണയം) തുടർന്ന് ഗണിത മൂല്യനിർണ്ണയം കൂടാതെ/അല്ലെങ്കിൽ വൈൽഡ്കാർഡ് നടത്തുന്നതിലൂടെ
പൊരുത്തപ്പെടുന്നു. ഗണിത പദപ്രയോഗങ്ങൾക്കുള്ള വാക്യഘടനയും ഓപ്പറേറ്റർ മുൻഗണനയുമാണ്
സിയിലെ പോലെ തന്നെ; <<, >>, ?:, കൂടാതെ അസൈൻമെന്റും മാത്രമാണ് കാണാതായ ഓപ്പറേറ്റർമാർ
ഓപ്പറേറ്റർമാർ.
POSIX-ൽ വൈൽഡ്കാർഡ് മാച്ചിംഗ് ('globbing') POSIX-ൽ മാത്രമേ ലഭ്യമാകൂ
നടപ്പിലാക്കലുകൾ കൂടാതെ =~ ഓപ്പറേറ്റർ ഉപയോഗിച്ച് അഭ്യർത്ഥിക്കാവുന്നതാണ്. ചുരുക്കത്തിൽ, ഒരു '?' മത്സരങ്ങൾ
ഏതെങ്കിലും ഒരു പ്രതീകം, ഒരു '*' ഏതെങ്കിലും സ്ട്രിംഗുമായി പൊരുത്തപ്പെടുന്നു (ശൂന്യമായ സ്ട്രിംഗ് ഉൾപ്പെടെ), കൂടാതെ
ബ്രാക്കറ്റിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന ഏതെങ്കിലും പ്രതീകങ്ങളുമായി '[...]' പൊരുത്തപ്പെടുന്നു. ഒരു '[...]' ക്ലാസ് ആണ്
ബ്രാക്കറ്റിലെ ആദ്യ പ്രതീകം '!' ആകുമ്പോൾ പൂരകമാകുന്നു. എയിലെ കഥാപാത്രങ്ങൾ
'[...]' ക്ലാസ്സിനെ '-' പ്രതീകം ഉപയോഗിച്ച് ഒരു ശ്രേണിയായും വ്യക്തമാക്കാം -- ഉദാ,
'[FN]' എന്നത് '[FGHIJKLMN]' എന്നതിന് തുല്യമാണ്.
ഫലത്തിന് ഒരു സംഖ്യാ മൂല്യം നൽകാൻ കഴിയുന്നില്ലെങ്കിൽ, തിരികെ നൽകിയ വാചകം ലളിതമാണ്
ഗണിത മൂല്യനിർണ്ണയമില്ലാതെ മാക്രോ വികാസത്തിന്റെ ഫലം. ഒരേയൊരു
ഈ നിയമത്തിന്റെ ഒഴിവാക്കലുകൾ താരതമ്യ ഓപ്പറേറ്റർമാർ ==, !=, <, >, <=, ഒപ്പം >=
വശങ്ങളിലൊന്ന് ഒരു സംഖ്യയുമായി മൂല്യനിർണ്ണയം നടത്തുന്നില്ലെങ്കിൽ, സ്ട്രിംഗ് താരതമ്യം നടത്തുക
പകരം (ട്രെയിലിംഗും ലീഡിംഗ് സ്പേസുകളും അവഗണിക്കുന്നു). കൂടാതെ, ദി നീളം(...)
ഗണിത ഓപ്പറേറ്റർ അതിന്റെ മൂല്യനിർണ്ണയ ആർഗ്യുമെന്റിന്റെ പ്രതീകങ്ങളിലെ ദൈർഘ്യം നൽകുന്നു.
ഗണിത പദപ്രയോഗങ്ങൾക്കുള്ളിൽ, the നിർവചിച്ച (...) പ്രത്യേക ഉപയോക്തൃ മാക്രോയും ആണ്
ലഭ്യം: ഇതിന് ഒരു ആർഗ്യുമെന്റ് മാത്രമേ എടുക്കൂ, അത് മൂല്യനിർണ്ണയം ചെയ്യപ്പെടാത്തതാണ്, എങ്കിൽ അത് 1 നൽകുന്നു
എന്നത് ഒരു ഉപയോക്തൃ മാക്രോയുടെ പേരും അല്ലാത്തപക്ഷം 0 ഉം ആണ്.
#എങ്കിൽ exr
ഈ മെറ്റാ-മാക്രോ ഗണിത/ഗ്ലോബിംഗ് മൂല്യനിർണ്ണയക്കാരനെ അതേ രീതിയിൽ അഭ്യർത്ഥിക്കുന്നു
#ഇവൽ കൂടാതെ മൂല്യനിർണ്ണയ ഫലം "0" എന്ന സ്ട്രിംഗുമായി താരതമ്യം ചെയ്ത് a ആരംഭിക്കുന്നതിന്
സോപാധിക ബ്ലോക്ക്. യുടെ ലോജിക്കൽ മൂല്യം എന്നത് പ്രത്യേകം ശ്രദ്ധിക്കുക exr എപ്പോഴും സത്യമാണ്
ഒരു സംഖ്യയിലേക്ക് അതിനെ വിലയിരുത്താൻ കഴിയാത്തപ്പോൾ.
#എലിഫ് exr
ഈ മെറ്റാ-മാക്രോ നെസ്റ്റഡ് ഒഴിവാക്കാൻ ഉപയോഗിക്കാം #എങ്കിൽ അവസ്ഥ. #എങ്കിൽ ... #എലിഫ് ...
#അവസാനം എന്നതിന് തുല്യമാണ് #എങ്കിൽ ... # കൂടാതെ #എങ്കിൽ ... #അവസാനം #അവസാനം.
#മോഡ് കീവേഡ് ...
ഈ മെറ്റാ-മാക്രോ GPP-യുടെ ഓപ്പറേറ്റിംഗ് മോഡ് നിയന്ത്രിക്കുന്നു. ഒരു ലിസ്റ്റിനായി താഴെ കാണുക #മോഡ്
കമാൻഡുകൾ.
#ലൈൻ ഈ മെറ്റാ-മാക്രോ നിലവിലെ ഇൻപുട്ട് ഫയലിന്റെ ലൈൻ നമ്പറിലേക്ക് വിലയിരുത്തുന്നു.
#ഫയൽ ഈ മെറ്റാ-മാക്രോ നിലവിലെ ഇൻപുട്ട് ഫയലിന്റെ ഫയൽ നാമം ദൃശ്യമാകുന്നത് പോലെ വിലയിരുത്തുന്നു
കമാൻഡ് ലൈനിൽ അല്ലെങ്കിൽ ആർഗ്യുമെന്റിൽ # ഉൾപ്പെടുത്തുക. GPP അതിന്റെ ഇൻപുട്ട് വായിക്കുന്നുണ്ടെങ്കിൽ
stdin-ൽ നിന്ന്, പിന്നെ #ഫയൽ 'stdin' ആയി വിലയിരുത്തുന്നു.
# തീയതി fmt
ഫോർമാറ്റ് ചെയ്തിരിക്കുന്ന നിലവിലെ തീയതിയും സമയവും ഈ മെറ്റാ-മാക്രോ വിലയിരുത്തുന്നു
നിർദ്ദിഷ്ട ഫോർമാറ്റ് സ്ട്രിംഗ് fmt. വിഭാഗം കാണുക DATE ഒപ്പം TIME, പരിവർത്തനം സ്പെസിഫയറുകൾ
താഴെ.
#പിശക് msg
ഈ മെറ്റാ-മാക്രോ നിലവിലെ ഫയലിന്റെ പേരും ലൈൻ നമ്പറും ഉപയോഗിച്ച് ഒരു പിശക് സന്ദേശത്തിന് കാരണമാകുന്നു,
വാചകത്തിനൊപ്പം msg, സ്റ്റാൻഡേർഡ് പിശക് ഉപകരണത്തിലേക്ക് പ്രിന്റ് ചെയ്യണം. തുടർന്നുള്ള
തുടർന്ന് പ്രോസസ്സിംഗ് നിർത്തലാക്കുന്നു.
#മുന്നറിയിപ്പ് msg
ഈ മെറ്റാ-മാക്രോ നിലവിലെ ഫയലിന്റെ പേരും ലൈൻ നമ്പറും ഉള്ള ഒരു മുന്നറിയിപ്പ് സന്ദേശത്തിന് കാരണമാകുന്നു,
വാചകത്തിനൊപ്പം msg, സ്റ്റാൻഡേർഡ് പിശക് ഉപകരണത്തിലേക്ക് പ്രിന്റ് ചെയ്യണം. തുടർന്നുള്ള
തുടർന്ന് പ്രോസസ്സിംഗ് പുനരാരംഭിക്കുന്നു.
ജിപിപിയുടെ വഴക്കത്തിന്റെ താക്കോൽ ഇതാണ് #മോഡ് മെറ്റാ-മാക്രോ. അതിന്റെ ആദ്യത്തെ വാദം എപ്പോഴും അതിലൊന്നാണ്
ലഭ്യമായ കീവേഡുകളുടെ ഒരു ലിസ്റ്റ് (ചുവടെ കാണുക); അതിന്റെ രണ്ടാമത്തെ വാദം എപ്പോഴും ഒരു ക്രമമാണ്
വൈറ്റ്സ്പെയ്സ് കൊണ്ട് വേർതിരിച്ച വാക്കുകൾ. അവയിൽ ആദ്യത്തേത് കൂടാതെ, ഈ ഓരോ വാക്കുകളും
എല്ലായ്പ്പോഴും ഒരു ഡിലിമിറ്റർ അല്ലെങ്കിൽ വാക്യഘടന സ്പെസിഫയർ ആണ്, കൂടാതെ ഡിലിമിറ്റഡ് ആയ ഒരു C സ്ട്രിംഗ് ആയി നൽകണം
ഇരട്ട ഉദ്ധരണികൾ വഴി (" "). എന്ന വിഭാഗത്തിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന വിവിധ പ്രത്യേക മാച്ചിംഗ് സീക്വൻസുകൾ
വാക്യഘടന സ്പെസിഫിക്കേഷൻ ലഭ്യമാണ്. ഏതെങ്കിലും #മോഡ് "..." എന്ന മോഡിൽ കമാൻഡ് പാഴ്സ് ചെയ്യുന്നു
ഒരു സി-സ്റ്റൈൽ സ്ട്രിംഗ് ആണെന്ന് മനസ്സിലാക്കുന്നു, അതിനാൽ ഇവയ്ക്കുള്ളിൽ ഏത് പ്രതീകവും ഉൾപ്പെടുത്തുന്നത് സുരക്ഷിതമാണ്
ചരടുകൾ. യുടെ ആദ്യ വാദം എന്നതും ശ്രദ്ധിക്കുക #മോഡ് (കീവേഡ്) ഒരിക്കലും വിലയിരുത്തപ്പെടുന്നില്ല,
രണ്ടാമത്തെ ആർഗ്യുമെന്റ് വിലയിരുത്തുമ്പോൾ (സി സ്ട്രിംഗുകളുടെ ഉള്ളടക്കം ഒഴികെ),
അതിനാൽ ഒരു മാക്രോ മൂല്യനിർണ്ണയത്തിന്റെ ഫലമായി വാക്യഘടന സ്പെസിഫിക്കേഷൻ ലഭിക്കും.
ലഭ്യമാണ് #മോഡ് കമാൻഡുകൾ ഇവയാണ്:
#മോഡ് സംരക്ഷിക്കുക / #മോഡ് തള്ളുക
നിലവിലെ മോഡ് സ്പെസിഫിക്കേഷൻ മോഡ് സ്റ്റാക്കിലേക്ക് പുഷ് ചെയ്യുക.
#മോഡ് വീണ്ടെടുക്കുക / #മോഡ് പോപ്പ്
മോഡ് സ്റ്റാക്കിൽ നിന്നുള്ള പോപ്പ് മോഡ് സ്പെസിഫിക്കേഷൻ.
#മോഡ് സാധാരണ പേര്
സ്റ്റാൻഡേർഡ് മോഡുകളിൽ ഒന്ന് തിരഞ്ഞെടുക്കുക. ഒരേയൊരു വാദം ഇനിപ്പറയുന്നതായിരിക്കണം: ഡിഫോൾട്ട്
(സ്ഥിരസ്ഥിതി മോഡ്); cpp, C (cpp മോഡ്); ടെക്സ്, ടെക്സ് (ടെക്സ് മോഡ്); html, HTML (html മോഡ്);
xhtml, XHTML (xhtml മോഡ്); പ്രോലോഗ്, പ്രോലോഗ് (പ്രോലോഗ് മോഡ്). മോഡിന്റെ പേര് ആയിരിക്കണം
ഒരു സി സ്ട്രിംഗ് ആയിട്ടല്ല, നേരിട്ട് നൽകിയിരിക്കുന്നു.
#മോഡ് ഉപയോക്താവ് "s1" ... "s9"
ഉപയോക്തൃ മാക്രോ വാക്യഘടന വ്യക്തമാക്കുക. 9 ആർഗ്യുമെന്റുകൾ, അവയെല്ലാം C സ്ട്രിംഗുകൾ, മോഡ് ആണ്
ഉപയോക്തൃ മാക്രോകൾക്കുള്ള സ്പെസിഫിക്കേഷൻ (-U കമാൻഡ്-ലൈൻ ഓപ്ഷനും ഓൺ എന്ന വിഭാഗവും കാണുക
വാക്യഘടന സ്പെസിഫിക്കേഷൻ). മെറ്റാ-മാക്രോ സ്പെസിഫിക്കേഷനെ ബാധിക്കില്ല.
#മോഡ് മെറ്റാ {ഉപയോക്താവ് | "s1" ... "s7"}
മെറ്റാ-മാക്രോ വാക്യഘടന വ്യക്തമാക്കുക. ഒന്നുകിൽ ഒരേയൊരു വാദം ഉപയോക്താവ് (ഒരു സ്ട്രിംഗ് ആയിട്ടല്ല), കൂടാതെ
ഉപയോക്തൃ-മാക്രോ മോഡ് സവിശേഷതകൾ മെറ്റാ-മാക്രോ മോഡിലേക്ക് പകർത്തുന്നു
സ്പെസിഫിക്കേഷനുകൾ, അല്ലെങ്കിൽ ഏഴ് സ്ട്രിംഗ് ആർഗ്യുമെന്റുകൾ ഉണ്ടായിരിക്കണം, അവയുടെ പ്രാധാന്യമാണ്
-M കമാൻഡ്-ലൈൻ ഓപ്ഷൻ പോലെ തന്നെ (വാക്യഘടനയുടെ സ്പെസിഫിക്കേഷനിലെ വിഭാഗം കാണുക).
#മോഡ് ഉദ്ധരിക്കുക ["c"]
ആർഗ്യുമെന്റ് ഇല്ലാതെ അല്ലെങ്കിൽ ആർഗ്യുമെന്റ് ആയി "", ഉദ്ധരണി പ്രതീക സ്പെസിഫിക്കേഷൻ നീക്കം ചെയ്യുന്നു
ഉദ്ധരണി പ്രവർത്തനം പ്രവർത്തനരഹിതമാക്കുന്നു. ഒരു സ്ട്രിംഗ് ആർഗ്യുമെന്റിനൊപ്പം, ആദ്യ പ്രതീകം
സ്ട്രിംഗിന്റെ പുതിയ ഉദ്ധരണി പ്രതീകമായി കണക്കാക്കുന്നു. ഉദ്ധരണി പ്രതീകം ആകാം
ആൽഫാന്യൂമെറിക് അല്ലെങ്കിൽ '_' അല്ലെങ്കിൽ പ്രത്യേക പൊരുത്തപ്പെടുന്ന ക്രമങ്ങളിൽ ഒന്നാകാൻ കഴിയില്ല.
#മോഡ് അഭിപ്രായം [xxx] "ആരംഭിക്കുക" "അവസാനിക്കുന്നു" ["c" ["c"]]
ഒരു കമന്റ് സ്പെസിഫിക്കേഷൻ ചേർക്കുക. ഓപ്ഷണലായി മൂന്ന് അടങ്ങുന്ന ആദ്യ വാദം
ഒരു അഭിപ്രായം/സ്ട്രിംഗ് മോഡിഫയർ വ്യക്തമാക്കാൻ " " എന്നതിൽ ഉൾപ്പെടുത്തിയിട്ടില്ലാത്ത പ്രതീകങ്ങൾ ഉപയോഗിക്കാം
(വാക്യഘടന സ്പെസിഫിക്കേഷനിലെ വിഭാഗം കാണുക). ഡിഫോൾട്ട് മോഡിഫയർ ആണ് CCC. ആദ്യത്തേത്
രണ്ട് സ്ട്രിംഗ് ആർഗ്യുമെന്റുകൾ യഥാക്രമം കമന്റ് സ്റ്റാർട്ട്, എൻഡ് സീക്വൻസുകളായി ഉപയോഗിക്കുന്നു. ദി
മൂന്നാമത്തെ സ്ട്രിംഗ് ആർഗ്യുമെന്റ് ഓപ്ഷണൽ ആണ് കൂടാതെ ഒരു സ്ട്രിംഗ് ഉദ്ധരണി വ്യക്തമാക്കാൻ ഇത് ഉപയോഗിക്കാം
സ്വഭാവം. (ഇത് "" ആണെങ്കിൽ, പ്രവർത്തനം പ്രവർത്തനരഹിതമാണ്.) നാലാമത്തെ സ്ട്രിംഗ്
ആർഗ്യുമെന്റ് ഓപ്ഷണൽ ആണ് കൂടാതെ ഒരു സ്ട്രിംഗ് ഡിലിമിറ്റേഷൻ മുന്നറിയിപ്പ് വ്യക്തമാക്കാൻ ഇത് ഉപയോഗിക്കാം
സ്വഭാവം. (ഇത് "" ആണെങ്കിൽ, പ്രവർത്തനം പ്രവർത്തനരഹിതമാണ്.)
#മോഡ് സ്ട്രിംഗ് [xxx] "ആരംഭിക്കുക" "അവസാനിക്കുന്നു" ["c" ["c"]]
ഒരു സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ ചേർക്കുക. സമാനമാണ് #മോഡ് അഭിപ്രായം അല്ലാതെ സ്ഥിരസ്ഥിതി
മോഡിഫയർ ആണ് എസ്എസ്എസ്.
#മോഡ് അഭിപ്രായങ്ങളൊന്നും ഇല്ല / #മോഡ് മൂക്കുത്തി ["ആരംഭിക്കുക"]
ഒരു വാദവുമില്ലാതെ, എല്ലാ കമന്റ്/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷനുകളും നീക്കം ചെയ്യുക. ഒരു ചരട് കൊണ്ട്
ആർഗ്യുമെന്റ്, ആരംഭ സീക്വൻസ് ആയ കമന്റ്/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷൻ ഇല്ലാതാക്കുക
വാദം.
#മോഡ് സംരക്ഷിക്കുക { on | ഓഫ് | 1 | 0 }
എന്നതിന് തുല്യമാണ് -n കമാൻഡ്-ലൈൻ സ്വിച്ച്. എങ്കിൽ വാദം on or 1, ഏതെങ്കിലും പുതിയ ലൈൻ
അല്ലെങ്കിൽ മാക്രോ കോൾ അവസാനിപ്പിക്കുന്ന വൈറ്റ്സ്പേസ് പ്രതീകം അല്ലെങ്കിൽ ഒരു കമന്റ്/സ്ട്രിംഗ് ശേഷിക്കുന്നു
കൂടുതൽ പ്രോസസ്സിംഗിനായി ഇൻപുട്ട് സ്ട്രീം. എങ്കിൽ വാദം ഓഫ് or 0 ഈ സവിശേഷതയാണ്
അപ്രാപ്തമാക്കി.
#മോഡ് പ്രതീകം { id | op | തുല്യരായി } "സ്ട്രിംഗ്"
\o, \O, \i സ്പെഷ്യൽ എന്നിവയുമായി പൊരുത്തപ്പെടുന്നതിന് ഉപയോഗിക്കേണ്ട പ്രതീക സെറ്റുകൾ വ്യക്തമാക്കുക
ക്രമങ്ങൾ. ആദ്യത്തെ വാദം ഇതിൽ ഒന്നായിരിക്കണം id (സെറ്റ് പൊരുത്തപ്പെടുന്നത് \i) op (ദി
സെറ്റ് പൊരുത്തപ്പെടുന്നത് \o) അല്ലെങ്കിൽ തുല്യരായി (പൊരുത്തപ്പെട്ട സെറ്റ് കൂടാതെ \O യോജിച്ചു
\o). "സ്ട്രിംഗ്" സെറ്റിൽ ഇടേണ്ട എല്ലാ പ്രതീകങ്ങളും ലിസ്റ്റുചെയ്യുന്ന ഒരു സി സ്ട്രിംഗ് ആണ്. അത് ഒരുപക്ഷെ
\a, \A, \b, \B, \# (മറ്റുള്ളത്) പ്രത്യേക പൊരുത്തമുള്ള സീക്വൻസുകൾ മാത്രം ഉൾക്കൊള്ളുന്നു
സീക്വൻസുകളും നെഗറ്റഡ് സീക്വൻസുകളും അനുവദനീയമല്ല). ഒരു '-' കണ്ടെത്തുമ്പോൾ
രണ്ട് നോൺ-സ്പെഷ്യൽ പ്രതീകങ്ങൾക്കിടയിൽ ഇത് എല്ലാ പ്രതീകങ്ങളും ചേർക്കുന്നു (ഉദാ: "AZ"
എല്ലാ വലിയക്ഷരങ്ങളുമായും യോജിക്കുന്നു). പൊരുത്തപ്പെടുന്ന സെറ്റിൽ '-' ഉണ്ടായിരിക്കാൻ, ഒന്നുകിൽ
ഇത് ആദ്യ അല്ലെങ്കിൽ അവസാന സ്ഥാനത്ത് വയ്ക്കുക അല്ലെങ്കിൽ ഒരു \x ക്രമത്തിന് അടുത്ത് വയ്ക്കുക.
DATE ഒപ്പം TIME, പരിവർത്തനം സ്പെസിഫയറുകൾ
ഫോർമാറ്റ് സ്ട്രിംഗിൽ സ്ഥാപിച്ചിരിക്കുന്ന സാധാരണ പ്രതീകങ്ങൾ പരിവർത്തനം ചെയ്യാതെ പകർത്തുന്നു.
കൺവേർഷൻ സ്പെസിഫയറുകൾ ഒരു `%' പ്രതീകം ഉപയോഗിച്ച് അവതരിപ്പിക്കുന്നു, അവ ഇനിപ്പറയുന്ന രീതിയിൽ മാറ്റിസ്ഥാപിക്കുന്നു:
%a നിലവിലെ പ്രദേശം അനുസരിച്ച് ചുരുക്കിയ പ്രവൃത്തിദിന നാമം.
%A നിലവിലെ പ്രദേശം അനുസരിച്ച് പ്രവൃത്തിദിവസത്തെ മുഴുവൻ പേര്.
%b നിലവിലെ പ്രാദേശിക ഭാഷ അനുസരിച്ച് ചുരുക്കിയ മാസത്തിന്റെ പേര്.
%B നിലവിലെ പ്രദേശം അനുസരിച്ച് മാസത്തിന്റെ മുഴുവൻ പേര്.
%c നിലവിലെ ലൊക്കേലിനായി തിരഞ്ഞെടുത്ത തീയതിയും സമയ പ്രാതിനിധ്യവും.
%d മാസത്തിലെ ദിവസം ഒരു ദശാംശ സംഖ്യയായി (പരിധി 01 മുതൽ 31 വരെ).
%F %Y-%m-%d ന് തുല്യമാണ് (ISO 8601 തീയതി ഫോർമാറ്റ്).
%H 24 മണിക്കൂർ ക്ലോക്ക് (പരിധി 00 മുതൽ 23 വരെ) ഉപയോഗിക്കുന്ന ഒരു ദശാംശ സംഖ്യയായി മണിക്കൂർ.
%I 12 മണിക്കൂർ ക്ലോക്ക് (പരിധി 01 മുതൽ 12 വരെ) ഉപയോഗിക്കുന്ന ഒരു ദശാംശ സംഖ്യയായി മണിക്കൂർ.
%j ഒരു ദശാംശ സംഖ്യയായി വർഷത്തിലെ ദിവസം (പരിധി 001 മുതൽ 366 വരെ).
%m മാസം ഒരു ദശാംശ സംഖ്യയായി (പരിധി 01 മുതൽ 12 വരെ).
%M ഒരു ദശാംശ സംഖ്യയായി മിനിറ്റ് (പരിധി 00 മുതൽ 59 വരെ).
%p തന്നിരിക്കുന്ന സമയ മൂല്യം അനുസരിച്ച് `AM' അല്ലെങ്കിൽ `PM' അല്ലെങ്കിൽ അതിനനുസരിച്ചുള്ള മൂല്യം
നിലവിലെ ലൊക്കേലിനുള്ള സ്ട്രിംഗുകൾ. ഉച്ചയെ 'pm' എന്നും അർദ്ധരാത്രി 'am' എന്നും കണക്കാക്കുന്നു.
%R 24 മണിക്കൂർ നൊട്ടേഷനിലെ സമയം (%H:%M).
%S രണ്ടാമത്തേത് ഒരു ദശാംശ സംഖ്യയായി (പരിധി 00 മുതൽ 61 വരെ).
%U ഒരു ദശാംശ സംഖ്യയായി നിലവിലെ വർഷത്തിലെ ആഴ്ച സംഖ്യ, 00 മുതൽ 53 വരെ,
ആഴ്ച 01 ന്റെ ആദ്യ ദിവസമായി ആദ്യ ഞായറാഴ്ച മുതൽ ആരംഭിക്കുന്നു.
%w ആഴ്ചയിലെ ദിവസം ദശാംശമായി, പരിധി 0 മുതൽ 6 വരെ, ഞായറാഴ്ച 0 ആണ്.
%W ഒരു ദശാംശ സംഖ്യയായി നിലവിലെ വർഷത്തിലെ ആഴ്ച സംഖ്യ, 00 മുതൽ 53 വരെ,
ആഴ്ച 01 ന്റെ ആദ്യ ദിവസമായി ആദ്യ തിങ്കളാഴ്ച മുതൽ ആരംഭിക്കുന്നു.
%x സമയമില്ലാതെ നിലവിലെ ലൊക്കേലിനായി തിരഞ്ഞെടുത്ത തീയതി പ്രാതിനിധ്യം.
%X തീയതി ഇല്ലാതെ നിലവിലെ ലൊക്കേലിനായി തിരഞ്ഞെടുത്ത സമയ പ്രാതിനിധ്യം.
%y നൂറ്റാണ്ടില്ലാത്ത ദശാംശ സംഖ്യയായി വർഷം (പരിധി 00 മുതൽ 99 വരെ).
%Y നൂറ്റാണ്ട് ഉൾപ്പെടെ ഒരു ദശാംശ സംഖ്യയായി വർഷം.
%Z സമയ മേഖല അല്ലെങ്കിൽ പേര് അല്ലെങ്കിൽ ചുരുക്കെഴുത്ത്.
%% അക്ഷരാർത്ഥത്തിൽ `%' പ്രതീകം.
ജിപിപി കംപൈൽ ചെയ്യാൻ ഉപയോഗിക്കുന്ന സി കമ്പൈലറും ലൈബ്രറിയും അനുസരിച്ച്, കൂടുതൽ പരിവർത്തനം ഉണ്ടായേക്കാം
സ്പെസിഫയറുകൾ ലഭ്യമാണ്. ഇതിനായി നിങ്ങളുടെ കംപൈലറുടെ ഡോക്യുമെന്റേഷൻ പരിശോധിക്കുക strftime() പ്രവർത്തനം.
എന്നിരുന്നാലും, മുകളിൽ ലിസ്റ്റുചെയ്തിട്ടില്ലാത്ത ഏതെങ്കിലും പരിവർത്തന സ്പെസിഫയറുകൾ ഉടനീളം പോർട്ടബിൾ ആയിരിക്കണമെന്നില്ല
GPP-യുടെ ഇൻസ്റ്റാളേഷനുകൾ.
ഉദാഹരണങ്ങൾ
സ്റ്റാൻഡേർഡ് അല്ലെങ്കിൽ സിപിപി മോഡിൽ ഒരു അടിസ്ഥാന സ്വയം-വിശദീകരണ ഉദാഹരണം ഇതാ:
#define FOO ഇതാണ്
#BAR ഒരു സന്ദേശം നിർവചിക്കുക.
#1 #2 കോൺകാറ്റ് നിർവ്വചിക്കുക
concat(FOO,BAR)
#ifeq (concat(foo,bar)) (foo bar)
ഇത് ഔട്ട്പുട്ട് ആണ്.
# കൂടാതെ
ഇത് ഔട്ട്പുട്ട് അല്ല.
#അവസാനം
ആർഗ്യുമെന്റ് നാമകരണം ഉപയോഗിച്ച്, ദി കോൺകാറ്റ് മാക്രോയെ മറ്റൊരു രീതിയിൽ നിർവചിക്കാം
# concat(x,y) xy നിർവചിക്കുക
TeX മോഡിലും ആർഗ്യുമെന്റ് നെയിമിംഗ് ഉപയോഗിക്കുമ്പോഴും ഇതേ ഉദാഹരണം ഇതായിരിക്കും:
\define{FOO}{ഇതാണ്}
\define{BAR}{ഒരു സന്ദേശം.}
\define{\concat{x}{y}}{\x \y}
\concat{\FOO}{\BAR}
\ifeq{\concat{foo}{bar}}{foo bar}
ഇത് ഔട്ട്പുട്ട് ആണ്.
\else
ഇത് ഔട്ട്പുട്ട് അല്ല.
\endif
HTML മോഡിലും ആർഗ്യുമെന്റ് പേരിടാതെയും ഒരാൾക്ക് സമാനമായി ലഭിക്കുന്നു:
<# FOO നിർവചിക്കുക|ഇതാണ്>
<#define BAR|ഒരു സന്ദേശം.>
<# കോൺകാറ്റ് നിർവചിക്കുക|#1 #2>
<#concat <#FOO>|<#BAR>>
<#ifeq <#concat foo|bar>|foo bar>
ഇത് ഔട്ട്പുട്ട് ആണ്.
<#കൂടുതൽ>
ഇത് ഔട്ട്പുട്ട് അല്ല.
<#endif>
ഇനിപ്പറയുന്ന ഉദാഹരണം (സ്റ്റാൻഡേർഡ് മോഡിൽ) ഉദ്ധരണി പ്രതീകത്തിന്റെ ഉപയോഗം വ്യക്തമാക്കുന്നു:
#define FOO ഇതാണ് \
ഒരു മൾട്ടിലൈൻ നിർവചനം.
#define BLAH(x) എന്റെ വാദം x ആണ്
BLAH(urf)
\BLAH(urf)
മൾട്ടിലൈൻ നിർവചനം cpp, Prolog മോഡുകളിലും സാധുതയുള്ളതാണെന്ന് ശ്രദ്ധിക്കുക
ഉദ്ധരണി പ്രതീകത്തിന്റെ അഭാവം, കാരണം '\' എന്നതിന് ശേഷം ഒരു പുതിയ വരി തുടർന്ന് a ആയി വ്യാഖ്യാനിക്കപ്പെടുന്നു
കമന്റ് ചെയ്തു കളഞ്ഞു.
cpp മോഡിൽ, C സ്ട്രിംഗുകളും അഭിപ്രായങ്ങളും ചിത്രീകരിച്ചിരിക്കുന്നതുപോലെ മനസ്സിലാക്കുന്നു
ഇനിപ്പറയുന്ന ഉദാഹരണം:
#നിർവ്വചിക്കുക BLAH foo
ബ്ലാ "ബ്ലാ" /* ബ്ലാ */
'ഇത്\'സ /*സ്ട്രിംഗ്*/ !'
പ്രോലോഗ് മോഡും cpp മോഡും തമ്മിലുള്ള പ്രധാന വ്യത്യാസം സ്ട്രിംഗുകൾ കൈകാര്യം ചെയ്യുന്നതാണ്
അഭിപ്രായങ്ങൾ: പ്രോലോഗിൽ, ഒരു '...' സ്ട്രിംഗ് ഒരു അക്കത്തിന് ശേഷം ഉടൻ ആരംഭിക്കാനിടയില്ല, കൂടാതെ ഒരു /*...*/
ഒരു ഓപ്പറേറ്റർ പ്രതീകത്തിന് ശേഷം ഉടൻ അഭിപ്രായം ആരംഭിക്കണമെന്നില്ല. കൂടാതെ, അഭിപ്രായങ്ങൾ
ഒരു #കമാൻഡിൽ സംഭവിക്കുന്നില്ലെങ്കിൽ ഔട്ട്പുട്ടിൽ നിന്ന് നീക്കം ചെയ്യില്ല.
cpp മോഡും ഡിഫോൾട്ട് മോഡും തമ്മിലുള്ള വ്യത്യാസങ്ങൾ കൂടുതൽ ആഴത്തിലുള്ളതാണ്: ഡിഫോൾട്ട് മോഡിൽ #കമാൻഡുകൾ
എവിടെയും ആരംഭിക്കാം, cpp മോഡിൽ അവ ഒരു വരിയുടെ തുടക്കത്തിലായിരിക്കണം; സ്ഥിരസ്ഥിതി
മോഡിന് കമന്റുകളെയും സ്ട്രിംഗുകളെയും കുറിച്ച് അറിവില്ല, എന്നാൽ cpp എന്ന സമയത്ത് ഒരു ഉദ്ധരണി പ്രതീകം ('\') ഉണ്ട്
മോഡിന് വിപുലമായ കമന്റ്/സ്ട്രിംഗ് സ്പെസിഫിക്കേഷനുകൾ ഉണ്ടെങ്കിലും ഉദ്ധരണി പ്രതീകമില്ല. മാത്രമല്ല, ദി
മെറ്റാ-മാക്രോകളിലേക്കുള്ള ആർഗ്യുമെന്റുകൾ ഡിഫോൾട്ട് മോഡിൽ ശരിയായി പരാൻതീസൈസ് ചെയ്യേണ്ടതുണ്ട്, എന്നാൽ അതല്ല.
cpp മോഡിലാണ് പരിശോധന നടത്തുന്നത്.
ഇത് cpp മോഡിൽ ഉള്ളതിനേക്കാൾ ഡിഫോൾട്ട് മോഡിൽ മെറ്റാ-മാക്രോ കോളുകൾ നെസ്റ്റ് ചെയ്യുന്നത് എളുപ്പമാക്കുന്നു. വേണ്ടി
ഉദാഹരണത്തിന്, ഇനിപ്പറയുന്ന HTML മോഡ് ഇൻപുട്ട് പരിഗണിക്കുക, ഇത് ലഭ്യത പരിശോധിക്കുന്നു
# എക്സി കമാൻഡ്:
<#ifeq <#exec echo blah>|blah
> #exec അനുവദിച്ചു <#else> #exec അനുവദനീയമല്ല <#endif>
തത്തുല്യമായ cpp മോഡ് ഒന്നുമില്ല, ഡിഫോൾട്ട് മോഡിൽ ഇത് എളുപ്പത്തിൽ വിവർത്തനം ചെയ്യാവുന്നതാണ്
#ifeq (#exec echo blah
) (ബ്ലാ
)
\#എക്സിക് അനുവദിച്ചു
# കൂടാതെ
\#exec അനുവദനീയമല്ല
#അവസാനം
cpp മോഡിൽ മെറ്റാ-മാക്രോ കോളുകൾ നെസ്റ്റ് ചെയ്യുന്നതിന് മോഡ് പരിഷ്ക്കരിക്കേണ്ടത് ആവശ്യമാണ്
വിവരണം, ഒന്നുകിൽ മെറ്റാ-മാക്രോ കോൾ സിന്റാക്സ് മാറ്റുന്നതിലൂടെ, അല്ലെങ്കിൽ കൂടുതൽ ഭംഗിയായി നിർവചിക്കുന്നതിലൂടെ
ഒരു നിശബ്ദ സ്ട്രിംഗും അതിന്റെ തുടക്കത്തിലെ സന്ദർഭം മൂല്യനിർണ്ണയം ചെയ്യുന്ന വസ്തുതയും ഉപയോഗിക്കുന്നു
സ്ട്രിംഗ് ഒരു പുതിയ ലൈൻ പ്രതീകമാണ്:
#മോഡ് സ്ട്രിംഗ് QQQ "$" "$"
#ifeq $#exec echo blah
$ $ബ്ലാ
$
\#എക്സിക് അനുവദിച്ചു
# കൂടാതെ
\#exec അനുവദനീയമല്ല
#അവസാനം
എന്നിരുന്നാലും, കമന്റുകൾ/സ്ട്രിംഗുകൾ നെസ്റ്റ് ചെയ്യാൻ കഴിയില്ല ("..." ഉള്ളിൽ $...$ പോകും
കണ്ടെത്താനായിട്ടില്ല), അതിനാൽ അത്തരമൊരു നിശബ്ദതയ്ക്കുള്ളിൽ എന്താണ് ഉൾപ്പെടുത്തേണ്ടതെന്ന് ഒരാൾ ശ്രദ്ധിക്കേണ്ടതുണ്ട്
വിലയിരുത്തിയ സ്ട്രിംഗ്. ഈ ഉദാഹരണത്തിൽ, പതിപ്പ് 2.1-ൽ അവതരിപ്പിച്ച അയഞ്ഞ മെറ്റാ-മാക്രോ നെസ്റ്റിംഗ്
ഇനിപ്പറയുന്ന ലളിതമായ പതിപ്പ് ഉപയോഗിക്കുന്നത് സാധ്യമാക്കുന്നു:
#ifeq blah #exec echo -n blah
\#എക്സിക് അനുവദിച്ചു
# കൂടാതെ
\#exec അനുവദനീയമല്ല
#അവസാനം
ആർഗ്യുമെന്റുകളില്ലാത്ത മാക്രോകൾ യഥാർത്ഥത്തിൽ അപരനാമങ്ങളാണെന്ന് മനസ്സിലാക്കുന്നത് ഓർക്കുക
ഇനിപ്പറയുന്ന ഉദാഹരണം (സ്ഥിരസ്ഥിതി അല്ലെങ്കിൽ cpp മോഡ്) ചിത്രീകരിച്ചിരിക്കുന്നതുപോലെ, ആർഗ്യുമെന്റുകൾ ഉപയോഗിച്ച് വിളിക്കുന്നു:
#DUP(x) xx നിർവചിക്കുക
#FOO നിർവചിക്കുക, ഞാൻ പറഞ്ഞു: DUP
FOO(ബ്ലാ)
യുടെ പ്രയോജനം #ദുരന്തം HTML മോഡിൽ ഇനിപ്പറയുന്ന ഉദാഹരണത്തിലൂടെ meta-macro കാണിക്കുന്നു:
<#define APPLY|<#defeval TEMP|<\##1 \#1>><#TEMP #2>>
<#define <#foo x>|<#x>, <#x>>
<#APPLY foo|BLAH>
അതിനുള്ള കാരണം #ദുരന്തം എല്ലാം ഒറ്റ പാസിൽ വിലയിരുത്തപ്പെടുന്നതിനാൽ, അത് ആവശ്യമാണ്.
ആവശ്യമുള്ള മാക്രോ കോളിന് കാരണമാകുന്ന ഇൻപുട്ട് ആദ്യം ജനറേറ്റ് ചെയ്യേണ്ടതുണ്ട്
രണ്ടാം തവണ മൂല്യനിർണ്ണയം നടത്തുന്നതിന് മുമ്പ് അപേക്ഷിക്കുന്നതിന് പാസാക്കിയ ആർഗ്യുമെന്റുകളുടെ മൂല്യനിർണ്ണയം.
ഈ ഉദാഹരണം ഡിഫോൾട്ട് മോഡിൽ വിവർത്തനം ചെയ്യുന്നതിന്, ഒരാൾ ക്രമത്തിൽ പരാൻതീസൈസിംഗ് അവലംബിക്കേണ്ടതുണ്ട്
APPLY എന്നതിന്റെ നിർവചനത്തിനുള്ളിൽ #defeval കോൾ നെസ്റ്റ് ചെയ്യാൻ, എന്നാൽ അത് കൂടാതെ തന്നെ ചെയ്യേണ്ടതുണ്ട്
പരാൻതീസിസുകൾ ഔട്ട്പുട്ട് ചെയ്യുന്നു. ഏറ്റവും എളുപ്പമുള്ള പരിഹാരം
# ബാലൻസ് (x) x നിർവചിക്കുക
#define APPLY(f,v) ബാലൻസ്(#defeval TEMP f
TEMP(v))
#foo(x) x, x എന്നിവ നിർവചിക്കുക
പ്രയോഗിക്കുക(\foo,BLAH)
മുകളിൽ വിശദീകരിച്ചതുപോലെ, cpp മോഡിലെ ഏറ്റവും ലളിതമായ പതിപ്പ് നിശബ്ദ മൂല്യനിർണ്ണയം നിർവചിക്കുന്നതിനെ ആശ്രയിച്ചിരിക്കുന്നു
BALANCE മാക്രോയുടെ പങ്ക് വഹിക്കാനുള്ള സ്ട്രിംഗ്.
ഇനിപ്പറയുന്ന ഉദാഹരണം (സ്ഥിരസ്ഥിതി അല്ലെങ്കിൽ cpp മോഡ്) ഗണിത മൂല്യനിർണ്ണയം കാണിക്കുന്നു:
# x 4 നിർവ്വചിക്കുക
ഉത്തരം:
#eval x*x + 2*(16-x) + 1998%x
#നിർവചിച്ചിട്ടുണ്ടെങ്കിൽ(x)&&!(3*x+5>17)
ഇത് ഔട്ട്പുട്ട് ആയിരിക്കണം.
#അവസാനം
പൂർത്തിയാക്കാൻ, മോഡ് സ്വിച്ചിംഗ് ഉൾപ്പെടുന്ന ചില ഉദാഹരണങ്ങൾ ഇതാ. ഇനിപ്പറയുന്ന ഉദാഹരണം
സ്വയം വിശദീകരണം (സ്ഥിര മോഡിൽ ആരംഭിക്കുന്നു):
#മോഡ് പുഷ്
#define f(x) xx
#മോഡ് സ്റ്റാൻഡേർഡ് ടെക്സ്
\f{blah}
\mode{string}{"$" "$"}
\mode{comment}/*" "*/"}
$\f{urf}$ /* blah */
\define{FOO}{bar/* കൂടാതെ മറ്റു ചിലത് */}
\mode{pop}
f($FOO$)
ഉപയോക്തൃ-നിർവചിച്ച മോഡ് ഉപയോഗപ്രദമാകുന്ന ഒരു മികച്ച ഉദാഹരണം ഈ ഡോക്യുമെന്റിന്റെ GPP ഉറവിടമാണ്
(GPP-യുടെ സോഴ്സ് കോഡ് വിതരണത്തോടൊപ്പം ലഭ്യമാണ്).
C സ്ട്രിംഗുകളിലെ മാക്രോകളുടെ മൂല്യനിർണ്ണയം തിരഞ്ഞെടുത്ത് നിർബന്ധിതമാക്കുന്നതാണ് രസകരമായ മറ്റൊരു ആപ്ലിക്കേഷൻ
cpp മോഡിൽ ആയിരിക്കുമ്പോൾ. ഉദാഹരണത്തിന്, ഇനിപ്പറയുന്ന ഇൻപുട്ട് പരിഗണിക്കുക:
#define blah(x) "അവൻ പറഞ്ഞു: x"
ബ്ലാ(ഫൂ)
വ്യക്തമായും ഒരാൾക്ക് പരാമീറ്റർ വേണം x സ്ട്രിംഗിനുള്ളിൽ വികസിപ്പിക്കാൻ. ഇതുണ്ട്
ഈ പ്രശ്നത്തിന് നിരവധി വഴികൾ:
#മോഡ് പുഷ്
#മോഡ് നോസ്റ്റിംഗ് "\""
#define blah(x) "അവൻ പറഞ്ഞു: x"
#പോപ്പ് മോഡ്
#മോഡ് ഉദ്ധരണി "`"
#define blah(x) `"അവൻ പറഞ്ഞു: x`"
#മോഡ് സ്ട്രിംഗ് QQQ "$$" "$$"
#define blah(x) $$"അദ്ദേഹം പറഞ്ഞു: x"$$
ആദ്യ രീതി വളരെ സ്വാഭാവികമാണ്, പക്ഷേ നീളം കൂടിയതും അസൗകര്യവും ഉണ്ട്
സ്ട്രിംഗ് സെമാന്റിക്സിനെ ന്യൂട്രലൈസ് ചെയ്യുന്നു, അതിനാൽ മൂല്യനിർണ്ണയം ചെയ്യാത്ത 'x' ഉദാഹരണം
സ്ട്രിംഗ്, അല്ലെങ്കിൽ '/*' എന്നതിന്റെ ഒരു സംഭവം, കൂടുതൽ അവലംബിക്കാതെ അസാധ്യമാണ്
വളച്ചൊടിക്കൽ.
ഒരു ഉദ്ധരണിയുടെ പ്രാദേശിക സാന്നിധ്യം കാരണം രണ്ടാമത്തെ രീതി അൽപ്പം കൂടുതൽ കാര്യക്ഷമമാണ്
മൂല്യനിർണ്ണയം ചെയ്യപ്പെടുന്നതും അല്ലാത്തതും നിയന്ത്രിക്കുന്നത് സ്വഭാവം എളുപ്പമാക്കുന്നു, എന്നാൽ ഉള്ളത്
ഒരു ന്യായമായ ഉദ്ധരണി പ്രതീകം കണ്ടെത്തുന്നത് ചിലപ്പോൾ അസാധ്യമാണ് എന്നതാണ് പോരായ്മ
ഒന്നുകിൽ സോഴ്സ് ഫയലിൽ കാര്യമായ മാറ്റം വരുത്തുകയോ അല്ലെങ്കിൽ a-യുടെ ഉള്ളിൽ അടയ്ക്കുകയോ ചെയ്യണം #മോഡ് പുഷ്/പോപ്പ്
നിർമ്മിക്കുക. ഉദാഹരണത്തിന്, സ്ട്രിംഗിൽ '/*' ന്റെ ഏതെങ്കിലും സംഭവങ്ങൾ ഉദ്ധരിക്കേണ്ടതായി വരും.
അവസാന രീതിയുടെ പശ്ചാത്തലത്തിൽ മൂല്യനിർണ്ണയ സ്ട്രിംഗുകളുടെ കാര്യക്ഷമത പ്രകടമാക്കുന്നു
തിരഞ്ഞെടുത്ത മൂല്യനിർണ്ണയം: അഭിപ്രായങ്ങൾ/സ്ട്രിംഗുകൾ നെസ്റ്റ് ചെയ്യാൻ കഴിയാത്തതിനാൽ, '"' അല്ലെങ്കിൽ
'$$' എന്നതിനുള്ളിലെ '/*', ഒരു സ്ട്രിംഗിനുള്ളിൽ പ്രതീക്ഷിക്കുന്നത് പോലെ, പ്ലെയിൻ ടെക്സ്റ്റായി ഔട്ട്പുട്ട് ലഭിക്കുന്നു, മാത്രമല്ല
മാക്രോ മൂല്യനിർണ്ണയം പ്രവർത്തനക്ഷമമാക്കി. എ തിരഞ്ഞെടുക്കുന്നതിൽ കൂടുതൽ സ്വാതന്ത്ര്യമുണ്ടെന്നതും ശ്രദ്ധിക്കുക
ഒരു ഉദ്ധരണി പ്രതീകം തിരഞ്ഞെടുക്കുന്നതിനേക്കാൾ സ്ട്രിംഗ് ഡിലിമിറ്റർ.
പതിപ്പ് 2.1 മുതൽ, മെറ്റാ-മാക്രോ കോളുകൾ ഡിഫോൾട്ടിൽ കൂടുതൽ കാര്യക്ഷമമായി നെസ്റ്റ് ചെയ്യാനാകും, cpp
പ്രോലോഗ് മോഡുകളും. ഇത് ഒരു മെറ്റാ-മാക്രോയുടെ ഉപയോക്തൃ പതിപ്പ് ഉണ്ടാക്കുന്നത് എളുപ്പമാക്കുന്നു, അല്ലെങ്കിൽ
ഒരു കൗണ്ടർ വർദ്ധിപ്പിക്കുക:
#മൈവൽ #eval #1 നിർവ്വചിക്കുക
# x 1 നിർവ്വചിക്കുക
#defeval x #eval x+1
അഡ്വാൻസ്ഡ് ഉദാഹരണങ്ങൾ
GPP ഉപയോഗിച്ചുള്ള നൂതന നിർമ്മാണങ്ങളുടെ ചില ഉദാഹരണങ്ങൾ ഇതാ. അവർ വളരെ അസ്വാസ്ഥ്യമുള്ളവരായിരിക്കും
ജിപിപിയുടെ പരിമിതികളുടെ തെളിവായി കണക്കാക്കുകയും വേണം.
ആദ്യ ഉദാഹരണം ഒരു ആവർത്തന മാക്രോ ആണ്. പ്രധാന പ്രശ്നം എന്നതാണ് (ജിപിപി വിലയിരുത്തുന്നത് മുതൽ
എല്ലാം) ഒരു ആവർത്തന മാക്രോ ആവർത്തന രീതിയെക്കുറിച്ച് വളരെ ശ്രദ്ധാലുവായിരിക്കണം
നിർവചിക്കാത്ത പെരുമാറ്റം ഒഴിവാക്കുന്നതിനായി അവസാനിപ്പിച്ചു (മിക്കപ്പോഴും ജിപിപി കേവലം തകരാറിലാകും).
പ്രത്യേകിച്ചും, എയെ ആശ്രയിക്കുന്നു #എങ്കിൽ/#മറ്റൊരു/#endif ആവർത്തനത്തെ അവസാനിപ്പിക്കുന്നതിനുള്ള നിർമ്മാണം സാധ്യമല്ല
കൂടാതെ അനന്തമായ ലൂപ്പിന് കാരണമാകുന്നു, കാരണം GPP ഉപയോക്തൃ മാക്രോ കോളുകൾ സ്കാൻ ചെയ്യുന്നു
സോപാധിക ബ്ലോക്കിന്റെ മൂല്യനിർണ്ണയം ചെയ്യാത്ത ശാഖ. മുന്നോട്ട് പോകാനുള്ള ഒരു സുരക്ഷിത മാർഗം ഉദാഹരണമാണ്
ഇനിപ്പറയുന്നത് (ഞങ്ങൾ TeX മോഡിൽ ഉദാഹരണം നൽകുന്നു):
\define{countdown}
\if{#1}
#1...
\define{loop}{\countdown}
\else
ചെയ്തുകഴിഞ്ഞു.
\define{loop}{}
\endif
\loop{\eval{#1-1}}
}
\countdown{10}
മറ്റൊരു ഉദാഹരണം, cpp മോഡിൽ:
#മോഡ് സ്ട്രിംഗ് QQQ "$" "$"
#ത്രികോണം നിർവ്വചിക്കുക(x,y) y \
$#നീളം(y) ആണെങ്കിൽ
$#ഇറ്റർ $ $#endif നിർവചിക്കുക
$ഇറ്റർ(x,*y)
ത്രികോണം(20)
ഇനിപ്പറയുന്നത് ഫങ്ഷണൽ നടപ്പിലാക്കുന്നതിനുള്ള (നിർഭാഗ്യവശാൽ വളരെ ദുർബലമായ) ശ്രമമാണ്
GPP-യിലെ അമൂർത്തീകരണം (സാധാരണ മോഡിൽ). ഈ ഉദാഹരണം മനസിലാക്കുക, എന്തുകൊണ്ട് ഇത് നിർമ്മിക്കാൻ കഴിയില്ല
കൂടുതൽ ലളിതമാണ് ജിജ്ഞാസയുള്ള വായനക്കാരന് അവശേഷിക്കുന്ന ഒരു വ്യായാമം.
#മോഡ് സ്ട്രിംഗ് "`" "`" "\\"
#നിർവചിക്കുക ASIS(x) x
#SILENT(x) ASIS() നിർവ്വചിക്കുക
EVAL(x,f,v) നിശ്ശബ്ദത(
#മോഡ് സ്ട്രിംഗ് QQQ "`" "`" "\\"
#defeval TEMP0 x
#defval TEMP1 (
\#നിർവചിക്കുക \TEMP2(TEMP0) f
)
TEMP1
)TEMP2(v)
#നിർവചിക്കുക LAMBDA(x,f,v) SILENT(
#ifneq (v) ()
TEMP3(a,b,c) EVAL(a,b,c) നിർവ്വചിക്കുക
# കൂടാതെ
#നിർവ്വചിക്കുക TEMP3(a,b,c) \LAMBDA(a,b)
#അവസാനം
)TEMP3(x,f,v)
#നിർവചിക്കുക EVALAMBDA(x,y) SILENT(
#defeval TEMP4 x
#defval TEMP5 y
)
#define APPLY(f,v) SILENT(
#defeval TEMP6 ASIS(\EVA)f
TEMP6
)ഇവൽ(TEMP4,TEMP5,v)
ഇത് ഇനിപ്പറയുന്ന ഫലങ്ങൾ നൽകുന്നു:
LAMBDA(z,z+z)
=> LAMBDA(z,z+z)
LAMBDA(z,z+z,2)
=> 2+2
#നിർവ്വചിക്കുക f LAMBDA(y,y*y)
f
=> LAMBDA(y,y*y)
പ്രയോഗിക്കുക(f,blah)
=> ബ്ലാ*ബ്ലാ
പ്രയോഗിക്കുക(ലംബ്ഡ(ടി,ടി),(ടി))
=> (tt) (tt)
LAMBDA(x,APPLY(f,(x+x)),urf)
=> (urf+urf)*(urf+urf)
പ്രയോഗിക്കുക(അപേക്ഷിക്കുക(LAMBDA(x,LAMBDA(y,x*y)),foo),ബാർ)
=> ഫൂ*ബാർ
#define test LAMBDA(y,`#ifeq y urf
y ഉർഫ്#മറ്റാണ്
y urf#endif അല്ല
`)
പ്രയോഗിക്കുക (ടെസ്റ്റ്, urf)
=> urf എന്നത് urf ആണ്
പ്രയോഗിക്കുക (ടെസ്റ്റ്, ഫൂ)
=> foo ഉർഫ് അല്ല
onworks.net സേവനങ്ങൾ ഉപയോഗിച്ച് gpp ഓൺലൈനായി ഉപയോഗിക്കുക