පැරණි දින තුළ (පෙර-ANSI), වැනි predefining සංකේත unix
හා vax
ඒ සඳහා සකස් කරනු ලබන දේ පද්ධතිය බැදීමකට හඳුනාගැනීමට කේතය ඉඩ ක්රමයක් විය. එකල නිල භාෂා ප්රමිතියක් නොතිබුණි (කේ ඇන්ඩ් ආර් හි පළමු සංස්කරණයේ පිටුපස ඇති විමර්ශන ද්රව්යයෙන් ඔබ්බට), සහ ඕනෑම සංකීර්ණතාවයක සී කේතය සාමාන්යයෙන් #ifdef
පද්ධති අතර වෙනස්කම් සඳහා ඉඩ සැලසෙන සංකීර්ණ ප්රභවයක් විය . මෙම සාර්ව අර්ථ දැක්වීම් සාමාන්යයෙන් සකසා ඇත්තේ සම්පාදකයා විසින්ම මිස පුස්තකාල ශීර්ෂ ගොනුවක අර්ථ දක්වා නැත. ක්රියාවට නැංවීම සඳහා හඳුනාගැනීම් භාවිතා කළ හැකි සහ ක්රමලේඛකයින් සඳහා වෙන් කර ඇති සැබෑ නීති රීති නොතිබූ හෙයින්, සම්පාදක ලේඛකයින්ට සරල නම් භාවිතා කිරීමට නිදහස unix
ඇති අතර, ක්රමලේඛකයින් එම නම් ඔවුන්ගේ අරමුණු සඳහා භාවිතා කිරීමෙන් වැළකී සිටිනු ඇතැයි උපකල්පනය කළහ.
1989 ANSI C ප්රමිතිය මඟින් ක්රියාවට නැංවීම සඳහා නීත්යානුකූලව පූර්ව නිශ්චය කළ හැකි සංකේත සීමා කරන නීති හඳුන්වා දෙන ලදී. සම්පාදකයා විසින් කලින් නිර්වචනය කරන ලද සාර්වයකට නමක් තිබිය හැක්කේ යටි ඉරි දෙකකින් හෝ යටි ඉරි සහිත ලොකු අකුරකින් වන අතර එමඟින් ක්රමලේඛකයන්ට එම රටාවට නොගැලපෙන සහ සම්මත පුස්තකාලයේ භාවිතා නොකරන හඳුනාගැනීම් භාවිතා කිරීමට නිදහස ඇත.
එහි ප්රති As ලයක් වශයෙන්, පූර්ව නිශ්චය කරන unix
හෝ linux
අනුකූල නොවන ඕනෑම සම්පාදකයෙකු , එය වැනි දෙයක් භාවිතා කරන පරිපූර්ණ නීති කේතයක් සම්පාදනය කිරීමට අපොහොසත් වනු ඇත int linux = 5;
.
එය සිදු වන විට, gcc පෙරනිමියෙන් අනුකූල නොවේ - නමුත් එය නිවැරදි විධාන රේඛා විකල්ප සමඟ අනුකූල වීමට (සාධාරණව) කළ හැකිය:
gcc -std=c90 -pedantic ... # or -std=c89 or -ansi
gcc -std=c99 -pedantic
gcc -std=c11 -pedantic
බලන්න මේ gcc අත්පොත වැඩි විස්තර සඳහා.
අනාගත නිකුතුවලදී gcc විසින් මෙම නිර්වචන ක්රමානුකූලව ඉවත් කරනු ඇත, එබැවින් ඔබ ඒවා මත රඳා පවතින කේත ලිවිය යුතු නොවේ. ඔබේ වැඩසටහනට එය ලිනක්ස් ඉලක්කයක් සඳහා සම්පාදනය කෙරේද යන්න දැන ගැනීමට අවශ්ය නම් __linux__
එය නිර්වචනය කර ඇත්දැයි පරීක්ෂා කළ හැකිය (ඔබ gcc හෝ එයට අනුකූල වන සම්පාදකයක් භාවිතා කරයි යැයි උපකල්පනය කරන්න). වැඩි විස්තර සඳහා GNU C පෙර සැකසුම් අත්පොත බලන්න .
බොහෝ දුරට අදාල නොවන: ඩේවිඩ් කෝර්න් (ඔව්, කෝර්න් ෂෙල් හි කතුවරයා) විසින් 1987 ජාත්යන්තර අපැහැදිලි සී කේත තරඟයේ "හොඳම වන් ලයිනර්" ජයග්රාහකයා පූර්ව නිශ්චිත සාර්වයෙන් ප්රයෝජන ගත්තේය unix
:
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
එය මුද්රණය කරයි "unix"
, නමුත් සාර්ව නාමයේ අක්ෂර වින්යාසය සමඟ කිසිම සම්බන්ධයක් නැති හේතු නිසා.