#Clude <filename> සහ # ඇතුළත් “ගොනු නාමය” අතර වෙනස කුමක්ද?


2372

C සහ C ++ ක්‍රමලේඛන භාෂාවල, includeපහත දැක්වෙන පරිදි කෝණ වරහන් භාවිතා කිරීම සහ ප්‍රකාශයක උපුටා දැක්වීම් භාවිතා කිරීම අතර වෙනස කුමක්ද?

  1. #include <filename>
  2. #include "filename"



විෂුවල් ස්ටුඩියෝ හි හැසිරීම සඳහා කරුණාකර පරීක්ෂා කරන්න: docs.microsoft.com/en-us/cpp/preprocessor/…
smwikipedia

Answers:


1416

ප්‍රායෝගිකව, වෙනස ඇත්තේ ඇතුළත් කර ඇති ගොනුව සඳහා පෙර සැකසුම්කරු සොයන ස්ථානයේ ය.

සඳහා #include <filename>ක්රියාත්මක කිරීමේ රඳා ආකාරයට preprocessor සෙවීම්, සාමාන්යයෙන්, සොයන්න බහලුම් සම්පාදකවරයා / IDE විසින්-නම් පෙර. මෙම ක්‍රමය සාමාන්‍යයෙන් සම්මත පුස්තකාල ශීර්ෂ ගොනු ඇතුළත් කිරීමට භාවිතා කරයි.

සඳහා #include "filename"එම බහලුම තුල එම preprocessor සෙවුම් පළමු, පසුව එම නියෝගය අඩංගු ගොනුව ලෙස භාවිතා සෙවුම් මාර්ගය පහත#include <filename> ආකෘති පත්රය. ක්‍රමලේඛකයා විසින් නිර්වචනය කරන ලද ශීර්ෂ ගොනු ඇතුළත් කිරීම සඳහා මෙම ක්‍රමය සාමාන්‍යයෙන් භාවිතා වේ.

සෙවුම් මාර්ග පිළිබඳ GCC ප්‍රලේඛනයෙන් වඩාත් සම්පූර්ණ විස්තරයක් ලබා ගත හැකිය .


135
ප්රකාශය: "එකම ඩිරෙක්ටරියේ පෙර සැකසුම් සෙවීම් ..." ප්රායෝගිකව සත්ය විය හැකි නමුත් සම්මතයේ සඳහන් වන්නේ නම් කරන ලද මූලාශ්න ගොනුව "ක්රියාත්මක කිරීම-අර්ථ දක්වා ඇති ආකාරයට සෙවීම" බවයි. PiCookie වෙතින් පිළිතුර බලන්න.
රිචඩ් කෝර්ඩන්

60
ඔබේ පිළිතුර “සත්‍ය” බව පෙනෙන්නට තිබුණද, සම්මුතිය අනුව ක්‍රියාත්මක කිරීම් කීයක් මෙයද යන්න නිසා, ඔබ අයිබ්ගේ සහ පිකූකිගේ පිළිතුරු දෙස සමීපව බැලිය යුතුය. ඔවුන් දෙදෙනාම පෙන්වා දෙන්නේ (සී ප්‍රමිතියේ වචනවල පිටුබලය ඇතිව) සැබෑ වෙනස “මූලාශ්‍ර ගොනුවක්” ඇතුළත් කිරීමට එදිරිව “ශීර්ෂයක්” ඇතුළත් කිරීම (සහ නැත, මෙය ".h" එදිරිව "යන්න නොවේ. c "). මෙම සන්දර්භය තුළ ඇති “ප්‍රභව ගොනුව” “.h” ගොනුවක් විය හැකිය (සාමාන්‍යයෙන් එය සෑම විටම පාහේ විය යුතුය). ශීර්ෂයක් අනිවාර්යයෙන්ම ගොනුවක් විය යුතු නොවේ (සම්පාදකයෙකුට උදා: ගොනුවක නොව සංඛ්‍යාත්මකව කේතනය කර ඇති ශීර්ෂයක් ඇතුළත් විය හැකිය).
ඩෑන් මෝල්ඩින්

5
"... ගොනුව ඇතුළත් කිරීම සඳහා ගොනුව සම්පාදනය කරන ලද එකම නාමාවලියෙහි පෙර සැකසුම් සෙවීම." මෙම ප්‍රකාශය සම්පූර්ණයෙන්ම නිවැරදි නොවේ. මම මෙම ප්‍රශ්නය ගැන උනන්දු වූයේ සත්‍ය පිළිතුර කුමක්දැයි මට කුතුහලයක් ඇති බැවිනි, නමුත් මෙය සත්‍ය නොවන බව මම දනිමි, මන්ද අවම වශයෙන් gcc සමඟ ඔබ -I සමඟ අතිරේක ඇතුළත් කිරීමේ මාර්ගයක් සඳහන් කළ විට එය #Iinclude ”ගොනු නාමයෙන් දක්වා ඇති ගොනු සොයනු ඇත. h "
ගේබ්‍රියෙල් සදර්න්

9
පිළිතුරට අකමැති අය, කරුණාකර, එක් ප්‍රායෝගික උදාහරණයක් දෙන්න, එය වැරදියි.
0kcats

1
'එකම' පුස්තකාලයේ ශීර්ෂ ඇතුළත් කරන විට මම මෑතකදී මෙම වාක්‍ය ඛණ්ඩ මිශ්‍ර කර නැවත අර්ථ දැක්වීමේ දෝෂ සමඟ අවසන් වූ බව සහතිකයි. මා නිවැරදිව තේරුම් ගන්නේ නම් #include <...>, පද්ධතියේ ස්ථාපනය කර ඇති පැකේජය #include "..."භාවිතා කර අසල ඇති නිධිය භාවිතා කර ඇත. මට ඒවා පසුපසට වන්නට ඇත. කෙසේ හෝ ඇසුරුම් කළ ශීර්ෂයේ ඇතුළත් කර ඇති ගාස්තුව යටි ඉරි සහිත උපසර්ගයක් ඇත. (එය පැකේජ සඳහා සම්මුතියක් විය හැකිය. එසේ නැතහොත් ඒවා දෙක මිශ්‍ර කිරීම හිතාමතාම වළක්වා ගත හැකි ක්‍රමයක් විය හැකිය. අනුවාද සුදුසුකම් මට වඩාත් අර්ථවත් වනු ඇත.)
ජෝන් පී

716

දැන ගැනීමට ඇති එකම ක්‍රමය ඔබේ ක්‍රියාත්මක කිරීමේ ලියකියවිලි කියවීමයි.

දී C ප්රමිති , 6.10.2 කොටස, 2 සිට 4 දක්වා රාජ්ය ඡේද:

  • පෝරමයේ පූර්ව සැකසුම් නියෝගයක්

    #include <h-char-sequence> new-line

    සහ පරිසීමක අතර නිශ්චිත අනුක්‍රමය මගින් අද්විතීය ලෙස හදුනාගත් ශීර්ෂයක් සඳහා ක්‍රියාත්මක-නිර්වචනය කළ ස්ථාන අනුක්‍රමයක් සොයන අතර , එම නියෝගය ශීර්ෂයේ සමස්ත අන්තර්ගතයෙන් ප්‍රතිස්ථාපනය කිරීමට හේතු වේ . ස්ථාන නියම කර ඇති ආකාරය හෝ ශීර්ෂය හඳුනාගෙන ඇති ආකාරය ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇත.<>

  • පෝරමයේ පූර්ව සැකසුම් නියෝගයක්

    #include "q-char-sequence" new-line

    පරිමිතීන් අතර නිශ්චිත අනුක්‍රමය මගින් හඳුනාගෙන ඇති ප්‍රභව ගොනුවේ සමස්ත අන්තර්ගතයන් මගින් එම නියෝගය ප්‍රතිස්ථාපනය කිරීමට හේතු වේ ". නම් කරන ලද ප්‍රභව ගොනුව ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇති ආකාරයට සොයනු ලැබේ. මෙම සෙවුමට සහය නොදක්වන්නේ නම්, හෝ සෙවීම අසමත් වුවහොත්, විධානය එය කියවූ ආකාරයටම නැවත සකස් කරනු ලැබේ

    #include <h-char-sequence> new-line

    මුල් විධානයෙන් සමාන අනුක්‍රමික අනුපිළිවෙලක් සහිතව ( >අක්ෂර ඇතුළුව ).

  • පෝරමයේ පූර්ව සැකසුම් නියෝගයක්

    #include pp-tokens new-line

    (එය පෙර ආකාර දෙකෙන් එකකට නොගැලපේ) අවසර ඇත. විධානයෙන් පසු පෙර සැකසුම් ටෝකන includeසාමාන්‍ය පා in යේ මෙන් සකසනු ලැබේ. . A <සහ >පෙර සැකසුම් ටෝකන යුගලයක් හෝ "අක්ෂර යුගලයක් අතර පෙර සැකසුම් ටෝකන අනුක්‍රමයක් තනි ශීර්ෂ නාමයකට ඒකාබද්ධ කරන ක්‍රමය පෙර සැකසුම් ටෝකනය ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇත.

අර්ථ දැක්වීම්:

  • h-char: නව රේඛා අක්‍ෂරය හැර ප්‍රභව අක්‍ෂර කට්ටලයේ ඕනෑම සාමාජිකයෙක් සහ >

  • q-char: නව රේඛා අක්‍ෂරය හැර ප්‍රභව අක්‍ෂර කට්ටලයේ ඕනෑම සාමාජිකයෙක් සහ "



27
@piCookie <filename> සහ "ගොනු නාමය" යන දෙකම ක්‍රියාත්මක කිරීම-නිර්වචනය කළ ස්ථාන සෙවීම. ඉතින් වෙනස කුමක්ද?
onmyway133

15
Te ස්ටෙෆාන්, මම උපුටා දක්වන්නේ INCLUDE_PATH ගැන කිසිවක් නොකියන ප්‍රමිතියයි. ඔබේ ක්‍රියාත්මක කිරීම එසේ කළ හැකි අතර මගේ එසේ නොවිය හැකිය. මුල් ප්‍රශ්නය සාමාන්‍යයෙන් C වන අතර විශේෂයෙන් gcc (INCLUDE_PATH භාවිතා කරයි යැයි මම නොසිතමි) හෝ මයික්‍රොසොෆ්ට් සී (මා සිතන පරිදි) හෝ වෙනත් කිසිවක් නොවේ, එබැවින් එයට සාමාන්‍යයෙන් පිළිතුරු දිය නොහැකි නමුත් ඒ වෙනුවට එක් එක් ක්‍රියාත්මක කිරීමේ ලියකියවිලි යොමු කළ යුතුය.
piCookie

12
මෙම සියලු තත්වයන් මෙන්ම, කොන්ක්‍රීට් උදාහරණ (විශේෂයෙන් පොදු අවස්ථා) බෙහෙවින් ප්‍රයෝජනවත් වන අතර ඒ හා සමානව අගය කරනු ලැබේ. අනවශ්‍ය ලෙස නිරවුල් ජනක පිළිතුරු වලට එතරම් ප්‍රායෝගික භාවිතයක් නොමැත.
vargonian

134
"සී ප්‍රමිතිය
වාචික විය

287

<සහ> අතර අක්ෂර අනුක්‍රමය අද්විතීය ලෙස යොමු කරන්නේ ශීර්ෂ පා to යක් වන අතර එය අනිවාර්යයෙන්ම ගොනුවක් නොවේ. අක්‍ෂර අනුක්‍රමය ඔවුන්ගේ අභිමතය පරිදි භාවිතා කිරීමට ක්‍රියාත්මක කිරීම බොහෝ සෙයින් නොමිලේ. (කෙසේ වෙතත්, බොහෝ විට එය ගොනු නාමයක් ලෙස සලකන අතර අනෙක් පෝස්ට් වල සඳහන් වන පරිදි ඇතුළත් කිරීමේ මාවතේ සෙවීමක් කරන්න .)

#include "file"පෝරමය භාවිතා කරන්නේ නම් , ක්‍රියාත්මක කිරීම පළමුව සහය දක්වන්නේ නම් ලබා දී ඇති නමේ ගොනුවක් සොයයි. (සහාය නොදක්වයි), හෝ සෙවීම අසමත් වුවහොත්, ක්‍රියාත්මක කිරීම අනෙක් ( #include <file>) ආකෘතිය භාවිතා කළ ආකාරයටම ක්‍රියා කරයි .

එසේම, තුන්වන පෝරමයක් පවතින අතර එය #includeඉහත ආකෘති දෙකටම නොගැලපෙන විට භාවිතා වේ. මෙම ආකෘතියේ දී, මූලික මූලික සැකසුම් (සාර්ව ප්‍රසාරණය වැනි) විධානයෙහි “ක්‍රියාකාරිත්වය” මත සිදු කෙරෙන අතර ප්‍රති #includeresult ලය අනෙක් ආකාර දෙකෙන් එකකට ගැලපෙනු ඇතැයි අපේක්ෂා කෙරේ.


50
+1, මෙය බොහෝ විට මෙහි වඩාත්ම සංක්ෂිප්ත හා නිවැරදි පිළිතුර විය හැකිය. ප්‍රමිතියට අනුව (piCookie ඔහුගේ පිළිතුරෙන් උපුටා දක්වන්නේ), එකම සැබෑ වෙනස වන්නේ “ශීර්ෂකය” සහ “ප්‍රභව ගොනුව” ය. සෙවුම් යාන්ත්‍රණය ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇත. ද්විත්ව උපුටා දැක්වීම් භාවිතා කිරීම යනු ඔබ "ප්‍රභව ගොනුවක්" ඇතුළත් කිරීමට අදහස් කරන අතර කෝණ වරහන් යන්නෙන් අදහස් කරන්නේ ඔබ "ශීර්ෂයක්" ඇතුළත් කිරීමට අදහස් කරන අතර එය ඔබ පවසන පරිදි කිසිසේත් ගොනුවක් නොවිය හැකිය.
ඩෑන් මෝල්ඩින්

3
Quest49 ගේ පිළිතුරට ඩෑන් මෝල්ඩින්ගේ අදහස බලන්න; සම්මත ශීර්ෂයන් ගොනු ස්වරූපයෙන් තිබිය යුතු නැත, ඒවා ගොඩනගා ගත හැකිය.
aib

10
මම දශකයක් තිස්සේ මෙම "සම්මත ශීර්ෂයන් ගොනු ආකාරයෙන් තිබිය යුතු නැත" කියවමි. සැබෑ ලෝක ආදර්ශයක් සැපයීමට සැලකිලිමත්ද?
මැක්සිම් එගොරුෂ්කින්

12
A මැක්සිම් යෙගොරුෂ්කින්: දැනට පවතින සැබෑ ලෝකයේ උදාහරණ ගැන මට සිතිය නොහැකිය. කෙසේ වෙතත්, ශීර්ෂයන් ලිපිගොනු විය යුතු නම් මිස MS-DOS සඳහා සම්පූර්ණ C11 සම්පාදකයක් පැවතිය නොහැක. මෙයට හේතුව සමහර C11 ශීර්ෂ නාම "8.3" MS-DOS ගොනු නාම සීමාවට නොගැලපේ.
ඩෑන් මෝල්ඩින්

18
A මැක්සිමගොරුෂ්කින්: VAX / VMS C සම්පාදකයා සියළුම සී ධාවන කාල පුස්තකාල ශීර්ෂයන් තනි පෙළ පුස්තකාල ගොනුවක (යුනික්ස් ලේඛනාගාරයකට සමාන) තබා ඇති අතර පුස්තකාලයට දර්ශක යතුර <සහ >යතුර අතර ඇති නූල භාවිතා කළේය .
ඒඩ්‍රියන් මැකාති

117

මෙහි සමහර හොඳ පිළිතුරු සී ප්‍රමිතියට යොමු කරන නමුත් පොසික්ස් ප්‍රමිතිය අමතක කර ඇත, විශේෂයෙන් c99 (උදා: සී සම්පාදක) විධානයෙහි නිශ්චිත හැසිරීම .

අනුව මෙම විවෘත සමූහ මූලික පිරිවිතර 7 නිකුත් ,

-I නාමාවලිය

සුපුරුදු ස්ථාන බැලීමට පෙර නාමාවලි පථ නාමයෙන් නම් කරන ලද නාමාවලියෙහි නිරපේක්ෂ මාර්ග නාම නොවන ශීර්ෂ සෙවීම සඳහා ඇල්ගොරිතම වෙනස් කරන්න . මේ අනුව, ද්විත්ව උපුටා දැක්වීම්වල ("") කොටු කර ඇති ශීර්ෂයන් පළමුව ගොනුවේ නාමාවලියෙහි # ඇතුළත් කිරීමේ රේඛාව සමඟද , පසුව -I විකල්පයන් ලෙස නම් කර ඇති නාමාවලිවලද , සාමාන්‍ය ස්ථානවලද සොයනු ඇත . කෝණ වරහන් වල ("<>") නම් කර ඇති ශීර්ෂයන් සඳහා, ශීර්ෂය සෙවිය යුත්තේ -I විකල්පයන්හි නම් කර ඇති නාමාවලිවල සහ පසුව සාමාන්‍ය ස්ථානවල පමණි. -I විකල්පයන්හි නම් කර ඇති නාමාවලි නිශ්චිත අනුපිළිවෙලින් සෙවිය යුතුය.c99 විධාන ආයාචනය.

එබැවින්, POSIX අනුකූල පරිසරයක, POSIX අනුකූල C සම්පාදකයෙකු සමඟ, පළමුව #include "file.h"සෙවීමට යන්නේ , ප්‍රකාශය සහිත ගොනුව කොහේද, කොතැනද, පළමුව සෙවීමට යන්නේ , ඔබේ පද්ධතිය අර්ථ දක්වා ඇත්තේ කොහේද ? ශීර්ෂයන් සඳහා සුපුරුදු ස්ථාන (එය POSIX විසින් නිර්වචනය කර නැති බව පෙනේ)../file.h.#include#include <file.h>/usr/include/file.h/usr/include


1
පා of යේ නිශ්චිත ප්‍රභවය කුමක්ද? එය IEEE STD 1003.1, 2013 හි සාමාන්‍ය කොටසකින්ද?
osgx

7
gosgx: එම වචන (හෝ අතිශයින්ම සමාන දෙයක්) සඳහා POSIX පිරිවිතරයෙන් සොයාගත හැකිය c99- එය C සම්පාදකයාගේ POSIX නමයි. (POSIX 2008 ප්‍රමිතියට C11 යන්න කිසිසේත්ම යොමු කළ නොහැක. 2013 POSIX 2008 යාවත්කාලීන කිරීම එය සඳහන් කළ C ප්‍රමිතිය වෙනස් කළේ නැත.)
ජොනතන් ලෙෆ්ලර්

1
මෙය මගේ පළමු සිතුවිල්ල ද විය. Gcc සඳහා වන පිටුවට අනෙක් අය මෙන් මෙයද ඇතුළත් වේ. පුස්තකාල සඳහා ද ඒ හා සමාන දෙයක් තිබේ - -L.
ප්‍රිෆ්ටන්

50

මේ දෙක අතර වෙනස ගැන GCC ලියකියවිලි පහත දැක්වේ:

පෙර සැකසුම් විධානය භාවිතා කරමින් පරිශීලක සහ පද්ධති ශීර්ෂ ගොනු ඇතුළත් ‘#include’වේ. එයට ප්‍රභේද දෙකක් ඇත:

#include <file>

මෙම ප්‍රභේදය පද්ධති ශීර්ෂ ගොනු සඳහා භාවිතා කරයි. එය පද්ධති නාමාවලි වල සම්මත ලැයිස්තුවක ගොනුවක් නම් ගොනුවක් සොයයි. -Iවිකල්පය සමඟ ඔබට මෙම ලැයිස්තුවට නාමාවලි සකස් කළ හැකිය ( ආයාචනය බලන්න ).

#include "file"

මෙම ප්‍රභේදය ඔබේම වැඩසටහනක ශීර්ෂ ගොනු සඳහා භාවිතා කරයි. එය දැනට පවතින ගොනුව අඩංගු නාමාවලියෙහි, පසුව උපුටා දැක්වීම් නාමාවලිවල සහ පසුව භාවිතා කරන එකම නාමාවලිවල ගොනුවක් නම් ගොනුවක් සොයයි <file>. ඔබට -iquoteවිකල්පය සමඟ මිල ගණන් නාමාවලි ලැයිස්තුවට නාමාවලි සකස් කළ හැකිය. ‘#include’උපුටා දැක්වීමේ ලකුණු හෝ කෝණ වරහන් වලින් වෙන් කර තිබේද යන තර්කය , එම අදහස් හඳුනා නොගන්නා අතර සාර්ව නම් පුළුල් නොවේ. මේ අනුව, #include <x/*y>පද්ධති ශීර්ෂ ගොනුවක් නම් කිරීම නියම x/*yකරයි.

කෙසේ වෙතත්, ගොනුව තුළ බැක්ස්ලෑෂ් සිදුවන්නේ නම්, ඒවා සාමාන්‍ය පෙළ අක්‍ෂර ලෙස සලකනු ලැබේ. සී හි නියත නියතයන්ට ගැලපෙන අක්ෂර ගැලවීමේ අනුපිළිවෙල කිසිවක් සැකසෙන්නේ නැත. මේ අනුව, #include "x\n\\y"බැක්ස්ලෑෂ් තුනක් අඩංගු ගොනු නාමයක් නියම කරයි. (සමහර පද්ධති '\' යන්න අර්ථකථන බෙදුම්කරුවෙකු ලෙස අර්ථකථනය ‘/’කරයි . මේ සියල්ලම එකම ආකාරයකින් අර්ථ නිරූපණය කරයි ‘/’.

ගොනුවේ නමට පසුව රේඛාවේ යමක් (අදහස් හැර) තිබේ නම් එය දෝෂයකි.


46

එය කරන්නේ:

"mypath/myfile" is short for ./mypath/myfile

සමග .කොහෙද ගොනුවේ ඇති මෙම නාමාවලිය එක්කෝ වීම #includeඅඩංගු වේ, සහ / හෝ සම්පාදකවරයා වත්මන් කම්කරු බහලුම, සහ / හෝdefault_include_paths

සහ

<mypath/myfile> is short for <defaultincludepaths>/mypath/myfile

නම් ./වේ <default_include_paths>, එය වෙනසක් වන්නේ නැත.

නම් mypath/myfileතවත් වේ බහලුම ඇතුළත්, හැසිරීම නිර්වචනය නොකළ වේ.


12
නැත, #include "mypath/myfile"සමාන නොවේ #include "./mypath/myfile". PiCookie ගේ පිළිතුර පවසන පරිදි, ද්විත්ව උපුටා දැක්වීම් සම්පාදකයාට ක්‍රියාත්මක කිරීම-නිර්වචනය කර ඇති ආකාරයට සෙවීමට කියයි - එයට නිශ්චිත ස්ථානවල සෙවීම ඇතුළත් වේ #include <...>. (ඇත්ත වශයෙන්ම, එය බොහෝ විට සමාන විය හැකි නමුත්, උදාහරණයක් ලෙස, අවම වශයෙන් යුනික්ස් වැනි පද්ධති /usr/include/mypath/myfileලෙස හැඳින්විය හැකි බැවිනි /usr/include/./mypath/myfile.)
කීත් තොම්සන්

1
E කීත් තොම්සන්: ඒක හරි, මම හිතුවේ මගේ ලිනක්ස් පෙට්ටිය ගැන. පෙනෙන විදිහට එය වෙනස් විය හැකිය. ප්‍රායෝගිකව වුවද, වින්ඩෝස් පොසික්ස් නොවන මෙහෙයුම් පද්ධතියක් ලෙසද / මාර්ග බෙදුම්කරු ලෙස අර්ථ නිරූපණය කරයි, සහ ./ ද පවතී.
ස්ටෙෆාන් ස්ටීගර්

1
මෙම -L dirpath විකල්පය මෙසේද පවසයි dirpath වෙත defaultincludepathsකිරීමට තවත් අර්ථවත් කරමින් විරුද්ධ ලෙස, .(ඉහත සඳහන් ලෙස). මෙම දෙකම අපේක්ෂිත ප්රතිඵලය ඇත #include "..."හා #include <...>සෙවීමට dirpath
Protongun

1
වත්මන් වැඩ කරන නාමාවලියෙහි ද්විත්ව උපුටා දැක්වීම් ඇතුළත් ශීර්ෂයන් සැමවිටම සොයන බව එයින් ගම්‍ය වන බැවින් මෙම පිළිතුර වැරදියි කියා මම සිතමි. සෙවුම් යාන්ත්‍රණය වඩාත් සවිස්තරාත්මක ය; මෙම පිළිතුර අසම්පූර්ණයි. මම මෙම ප්‍රකාශය පැමිණිලි කිරීමට හෝ කෙඳිරිගෑමට එකතු නොකරමි, නමුත් පද්ධතිය මාගෙන් ඉල්ලා සිටින්නේ මා මෙම පිළිතුරට ඡන්දය දුන්නේ ඇයිද යන්න පැහැදිලි කිරීම සඳහා අදහසක් එක් කරන ලෙසයි.
කාලෝ වුඩ්

39

මෙම <file>සෙවීමට කිරීමට preprocessor කියයි ඇතුළත් -Iබහලුම් සහ පූර්ව නිශ්චිත නාමාවලි තුළ පළමු පසුව .c ගොනුවේ නාමාවලියේ. මෙම "file"මූලාශ්රය ගොනුවේ බහලුම සෙවීමට මෙම preprocessor කියයි ඇතුළත් පළමු , පසුව ප්රතිවර්තනය -Iහා සපයනවා. සියලුම ගමනාන්ත කෙසේ හෝ සෙවීම, සෙවීමේ අනුපිළිවෙල පමණක් වෙනස් වේ.

2011 ප්‍රමිතිය බොහෝ දුරට සාකච්ඡා කරන්නේ "16.2 ප්‍රභව ගොනු ඇතුළත් කිරීම" තුළ ඇති ගොනු ය.

ආකෘති පත්‍රයේ පූර්ව සැකසුම් නියෝගයක්

# include <h-char-sequence> new-line

<සහ> පරිසීමක අතර නිශ්චිත අනුක්‍රමය මගින් අද්විතීය ලෙස හදුනාගත් ශීර්ෂයක් සඳහා ක්‍රියාත්මක කිරීම-නිර්වචනය කළ ස්ථාන අනුක්‍රමයක් සොයන අතර, එම නියෝගය ශීර්ෂයේ සමස්ත අන්තර්ගතයෙන් ප්‍රතිස්ථාපනය කිරීමට හේතු වේ. ස්ථාන නියම කර ඇති ආකාරය හෝ ශීර්ෂය හඳුනාගෙන ඇති ආකාරය ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇත.

3 ආකෘති පත්‍රයේ පූර්ව සැකසුම් නියෝගයකි

# include "q-char-sequence" new-line

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

# include <h-char-sequence> new-line

මුල් විධානයෙන් සමාන අනුක්‍රමික අනුපිළිවෙලක් සහිතව (අකුරු ඇතුළුව).

ගොනුව සොයාගත නොහැකි නම් "xxx"ආකෘති පත්රය පිරිහීමට ලක්වන බව සලකන්න <xxx>. ඉතිරිය ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇත.


4
මෙම -Iව්‍යාපාරය නිශ්චිතව දක්වා ඇති සී ප්‍රමිතියේ සඳහන් කිරීමක් ඔබට කළ හැකිද ?
juanchopanza

1
මම ඒ ගැන සඳහනක් දකින්නේ නැහැ -I.
juanchopanza

2
එය "ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇති" කොටසයි.

30

#include <file.h>එහි "ඇතුළත්" නාමාවලියෙහි ශීර්ෂකය සෙවීමට සම්පාදකයාට පවසයි, උදා: MinGW සඳහා සම්පාදකයා file.hC: \ MinGW \ include \ හෝ ඔබේ සම්පාදකයා ස්ථාපනය කර ඇති ඕනෑම තැනක සොයනු ඇත.

#include "file"වත්මන් ඩිරෙක්ටරිය (එනම් ප්‍රභව ගොනුව පවතින නාමාවලිය) සෙවීමට සම්පාදකයාට කියයි file.

ඔබට -IGCC සඳහා ධජය භාවිතා කළ හැකිය , එය කෝණික වරහන් සමඟ ඇතුළත් වූ විට, එය පසුව නාමාවලියෙහි ශීර්ෂයන් සෙවිය යුතුය -I. ධජය පසු නාමාවලිය GCC විසින් නාමාවලිය ලෙස සලකනු includesඇත.

උදාහරණයක් ලෙස, ඔබ සතුව myheader.hඔබේම නාමාවලියෙහි ගොනුවක් තිබේ නම් , ඔබ #include <myheader.h>ධජය සමඟ GCC අමතන්නේ නම් ඔබට පැවසිය හැකිය -I .(එය වත්මන් නාමාවලියෙහි ඇතුළත් කිරීම් සෙවිය යුතු බව අඟවයි.)

නොමැතිව -Iධජය, ඔබ භාවිතා කිරීමට සිදු වනු ඇත #include "myheader.h", ගොනුව හෝ පියවරක් ඇතුළත් කිරීමට myheader.hවෙත includeඔබගේ සම්පාදක බහලුම.


22

ප්‍රමිතිය අනුව - ඔව්, ඒවා වෙනස් ය:

  • පෝරමයේ පූර්ව සැකසුම් නියෝගයක්

    #include <h-char-sequence> new-line

    <සහ >පරිසීමක අතර නිශ්චිත අනුක්‍රමය මගින් අද්විතීය ලෙස හදුනාගත් ශීර්ෂයක් සඳහා ක්‍රියාත්මක-නිර්වචනය කළ ස්ථාන අනුක්‍රමයක් සොයන අතර , එම නියෝගය ශීර්ෂයේ සමස්ත අන්තර්ගතයෙන් ප්‍රතිස්ථාපනය කිරීමට හේතු වේ. ස්ථාන නියම කර ඇති ආකාරය හෝ ශීර්ෂය හඳුනාගෙන ඇති ආකාරය ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇත.

  • පෝරමයේ පූර්ව සැකසුම් නියෝගයක්

    #include "q-char-sequence" new-line

    පරිමිතීන් අතර නිශ්චිත අනුක්‍රමය මගින් හඳුනාගෙන ඇති ප්‍රභව ගොනුවේ සමස්ත අන්තර්ගතයන් මගින් එම නියෝගය ප්‍රතිස්ථාපනය කිරීමට හේතු වේ ". නම් කරන ලද ප්‍රභව ගොනුව ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇති ආකාරයට සොයනු ලැබේ. මෙම සෙවුමට සහය නොදක්වන්නේ නම්, හෝ සෙවීම අසමත් වුවහොත්, විධානය එය කියවූ ආකාරයටම නැවත සකසනු ලැබේ

    #include <h-char-sequence> new-line

    මුල් විධානයෙන් සමාන අනුක්‍රමික අනුපිළිවෙලක් සහිතව ( >අක්ෂර ඇතුළුව ).

  • පෝරමයේ පූර්ව සැකසුම් නියෝගයක්

    #include pp-tokens new-line

    (එය පෙර ආකාර දෙකෙන් එකකට නොගැලපේ) අවසර ඇත. විධානයෙන් පසු පෙර සැකසුම් ටෝකන includeසාමාන්‍ය පා in යේ මෙන් සකසනු ලැබේ. . A <සහ >පෙර සැකසුම් ටෝකන යුගලයක් හෝ "අක්ෂර යුගලයක් අතර පෙර සැකසුම් ටෝකන අනුක්‍රමයක් තනි ශීර්ෂ නාමයකට ඒකාබද්ධ කරන ක්‍රමය පෙර සැකසුම් ටෝකනය ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇත.

අර්ථ දැක්වීම්:

  • h-char: නව රේඛා අක්‍ෂරය හැර ප්‍රභව අක්‍ෂර කට්ටලයේ ඕනෑම සාමාජිකයෙක් සහ >

  • q-char: නව රේඛා අක්‍ෂරය හැර ප්‍රභව අක්‍ෂර කට්ටලයේ ඕනෑම සාමාජිකයෙක් සහ "

ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇති පුරුදු අතර කිසිදු සම්බන්ධතාවයක් ප්‍රමිතිය නොකියන බව සලකන්න. පළමු පෝරමය එක් ක්‍රියාත්මක කිරීමක්-නිර්වචනය කළ ආකාරයකින් සෙවන අතර අනෙක (සමහර විට වෙනත්) ක්‍රියාත්මක කිරීම-අර්ථ දක්වා ඇති ආකාරයකින් සෙවීම. සමහරක් ඇතුළත් ලිපිගොනු තිබිය යුතු බව ප්‍රමිතියෙන් නියම කරයි (නිදසුනක් ලෙස <stdio.h>).

විධිමත් ලෙස ඔබේ සම්පාදකයා සඳහා අත්පොත කියවිය යුතුය, කෙසේ වෙතත් සාමාන්‍යයෙන් (සම්ප්‍රදායට අනුව) #include "..."පෝරමය #includeමුලින් සොයාගත් ගොනුවේ නාමාවලිය සොයයි , පසුව #include <...>පෝරමය සොයන නාමාවලි (ඇතුළත් මාර්ගය, උදා: පද්ධති ශීර්ෂ ).


2
මෙය බොහෝ දුරට අවුරුදු හතකට පෙර සිට piCookie ගේ පිළිතුරට සමාන පා text යකි .
කයිල් ස්ට්‍රෑන්ඩ්

5
YleKyleStrand එයට හේතුව එකම පා the ය සම්මතයේ අදාළ කොටසේ උපුටා දැක්වීමකි - එම පෙළ සමාන විය යුතුය. සත්‍ය පිළිතුර එකම පා text යක් නොවන අතර එය තරමක් වෙනස් ය - එය ක්‍රියාත්මක කිරීම සඳහා වන ලියකියවිලි වල ලියා ඇති බව ද මා හඳුනාගෙන ඇති අතර, ඒවා අර්ථකථනය කරන සාම්ප්‍රදායික ක්‍රමයක් ද ඇති බව මම සටහන් කරමි (බොහෝ හෝ සියලුම සම්පාදකයින් මා විසින් භාවිතා කරන ලද) .
ස්කයිලිං

2
IMO මෙය මෙහි ඇති හොඳම පිළිතුරයි, මන්ද එය සම්මත පවසන දේ සහ බොහෝ සම්පාදකයින් සැබවින්ම කරන දේ යන දෙකම ආවරණය කරයි.
ප්ලග්වොෂ්

17

විශිෂ්ට පිළිතුරු වලට ස්තූතියි, එස්.පී. ඇඩම් ස්ටෙල්මාස්සික් සහ පිකූකි, සහ අයිබ්.

බොහෝ ක්‍රමලේඛකයින් මෙන්, "myApp.hpp"යෙදුම් විශේෂිත ලිපිගොනු සඳහා ආකෘති පත්‍රය භාවිතා කිරීමේ අවිධිමත් සම්මුතිය සහ <libHeader.hpp>පුස්තකාල හා සම්පාදක පද්ධති ගොනු සඳහා වන ආකෘති පත්රය, එනම් නිශ්චිතව දක්වා ඇති ලිපිගොනු /Iසහ INCLUDEපරිසර විචල්‍යය, වසර ගණනාවක් තිස්සේ සම්මත යැයි සිතමින් භාවිතා කර ඇත.

කෙසේ වෙතත්, සී ප්‍රමිතියට අනුව සෙවුම් අනුපිළිවෙල ක්‍රියාත්මක කිරීම විශේෂිත වන අතර එමඟින් අතේ ගෙන යා හැකි බව සංකීර්ණ කළ හැකිය. තත්වය වඩාත් නරක අතට හැරවීම සඳහා, අපි ජෑම් භාවිතා කරමු, එමඟින් ඇතුළත් වන ලිපිගොනු කොතැනදැයි ස්වයංක්‍රීයව හඳුනා ගනී. ඔබගේ ඇතුළත් ගොනු සඳහා ඔබට සාපේක්ෂ හෝ නිරපේක්ෂ මාර්ග භාවිතා කළ හැකිය. එනම්

#include "../../MyProgDir/SourceDir1/someFile.hpp"

MSVS හි පැරණි අනුවාදයන්ට ද්විත්ව බැක්ස්ලෑෂ් (\\) අවශ්‍ය වූ නමුත් දැන් එය අවශ්‍ය නොවේ. එය වෙනස් වූයේ කවදාදැයි මම නොදනිමි. 'නික්ස්' සමඟ අනුකූල වීම සඳහා ඉදිරි කප්පාදුව භාවිතා කරන්න (වින්ඩෝස් එය පිළිගනු ඇත).

ඔබ ඒ ගැන සැබවින්ම කනස්සල්ලට පත්ව සිටී නම්, "./myHeader.h"මූලාශ්‍ර කේතය මෙන් එකම ඩිරෙක්ටරියේ ඇතුළත් කළ ගොනුවක් සඳහා භාවිතා කරන්න (මගේ වර්තමාන, ඉතා විශාල ව්‍යාපෘතියක සමහර අනුපිටපත් ඇත, එහි ගොනු නාමයන් විසිරී ඇත - සැබවින්ම වින්‍යාස කළමනාකරණ ගැටලුවක්).

ඔබේ පහසුව සඳහා මෙහි පිටපත් කළ MSDN පැහැදිලි කිරීම මෙන්න).

උපුටා ගත් පෝරමය

මෙම අනුපිළිවෙලට ලිපිගොනු ඇතුළත් කිරීම සඳහා වන පෙර සැකසුම් සෙවීම්:

  1. # ඇතුළත් කිරීමේ ප්‍රකාශය අඩංගු ගොනුවේ එකම නාමාවලියෙහි.
  2. දැනට විවෘත කර ඇති නාමාවලිවල ගොනු විවෘත කර ඇති ප්‍රතිලෝම අනුපිළිවෙලට ඇතුළත් වේ
    . සෙවීම මවුපියන්ගේ නාමාවලියෙන් ආරම්භ වන අතර
    ඕනෑම ආච්චිලා සීයලාගේ නාමාවලි හරහා ඉහළට ගමන් කරයි.
  3. එක් එක් /Iසම්පාදක විකල්පයෙන් නිශ්චිතව දක්වා ඇති මාර්ගය දිගේ .
  4. INCLUDEපරිසර විචල්‍යය මගින් නියම කර ඇති මාර්ග ඔස්සේ .

කෝණ-වරහන් ආකෘතිය

මෙම අනුපිළිවෙලට ලිපිගොනු ඇතුළත් කිරීම සඳහා වන පෙර සැකසුම් සෙවීම්:

  1. එක් එක් /Iසම්පාදක විකල්පයෙන් නිශ්චිතව දක්වා ඇති මාර්ගය දිගේ .
  2. විධාන රේඛාවේ සම්පාදනය සිදු වන විට, INCLUDEපරිසර විචල්‍යය මගින් නියම කර ඇති මාර්ග ඔස්සේ .

16

අවම වශයෙන් GCC අනුවාදය <= 3.0 සඳහා, කෝණ-වරහන් පෝරමය ඇතුළත් කළ ගොනුව සහ ඇතුළුව එක අතර පරායත්තතාවයක් ජනනය නොකරයි.

එබැවින් ඔබට පරායත්තතා රීති ජනනය කිරීමට අවශ්‍ය නම් (නිදහස් කිරීම සඳහා GCC -M විකල්පය භාවිතා කිරීම), ඔබ යැපුම් ගසෙහි ඇතුළත් කළ යුතු ගොනු සඳහා උපුටා ගත් පෝරමය භාවිතා කළ යුතුය.

( Http://gcc.gnu.org/onlineocs/cpp/Invocation.html බලන්න )


1
ඔව් - පරායත්තතා ජනනය කිරීමේ විවිධ ක්‍රම තිබේ. එය ඔවුන්ගෙන් එක් කෙනෙක් නමුත් එය පමණක් නොවේ.
ප්‍රිෆ්ටන්

15

සඳහා #include ""වූ සම්පාදක සාමාන්යයෙන් බව ඇතුළත් ද පසුව අනෙක් ෆෝල්ඩර අඩංගු ලිපිෙගොනුව බහාළුම සෝදිසි කර බලනවා. සඳහා #include <>සම්පාදකවරයා වර්තමාන ගොනුව ගේ ෆෝල්ඩරය සොයා නැත.


1
මිනිසුන් එකඟ නොවන්නේ මන්දැයි විශ්වාස නැත.
මැක්සිම් එගොරුෂ්කින්

බොහෝ අය ඔවුන්ගේ සීඩබ්ලිව්ඩී හි ගොනු පමණක් සම්පාදනය කරන නිසා යැයි මම සැක කරමි. ඔබ ඩිරෙක්ටරි foo හි සිටී නම්, ඔබ foo / unittest / bar.c සම්පාදනය කරන්නේ නම් සහ එයට bar.h ඇතුළත් වේ නම් "bar.h" ක්‍රියා කරන අතර <bar.h> එසේ නොවේ.

1
Description ඔබ විස්තර කරන හැසිරීම සම්මත සී නොවන නිසා මැක්සිම් පුද්ගලයින් එකඟ නොවෙති
osvein

2
දෙකම @Spookbuster අයිතිය, සම්මත පවසයි <filename>හා "filename"ක්රියාත්මක කිරීම අර්ථ ස්ථාන සඳහා සොයන්න.
මැක්සිම් එගොරුෂ්කින්

14

ඔබ #include <filename> භාවිතා කරන විට, C \ C ++ ශීර්ෂ ගොනු (stdio.h \ cstdio, string, vector, ආදිය) නාමාවලියෙහි ඇති ගොනුව සොයන පෙර සකසනය. නමුත්, ඔබ #include "ගොනු නාමය" භාවිතා කරන විට: පළමුව, වත්මන් නාමාවලියෙහි ගොනුව සොයන පෙර සකසනය, එය මෙහි නොමැති නම් - ඔහු එය සොයන්නේ C \ C ++ ශීර්ෂ ලිපිගොනු වලය.


1
වසර ගණනාවක් තිස්සේ පරිපූර්ණ පිළිතුරක් ලැබීමෙන් පසු, එකක් ඉදිරිපත් කරන්නේ ඇයි? පොදු වුවත්, #includeනියෝගය ලිපිගොනු සමඟ කිසිසේත් සම්බන්ධ නොවේ.
හඳුනාගත නොහැකි

@Inspectable කරුණාකර එය ලිපිගොනු හා සම්බන්ධ නොවන්නේ මන්දැයි පැහැදිලි කරන්න.
බෙහ්රූස් කර්ජූ

11

කෝණ වරහන් සහිත # ඇතුළත් කිරීම ගොනුව ඇතුළත් කිරීම සඳහා "ක්‍රියාත්මක කිරීම මත රඳා පවතින ස්ථාන ලැයිස්තුවක්" (එය "පද්ධති ශීර්ෂයන්" යැයි පැවසීමේ ඉතා සංකීර්ණ ක්‍රමයකි) සොයනු ඇත.

# උපුටා දැක්වීම් ඇතුළත් කිරීම මඟින් ගොනුවක් පමණක් සොයනු ඇත (සහ, "ක්‍රියාත්මක කිරීම මත රඳා පවතින ආකාරයකින්", බ්ලී). එයින් අදහස් වන්නේ, සාමාන්‍ය ඉංග්‍රීසියෙන්, එය ඔබ විසි කරන මාර්ගය / ගොනු නාමය යෙදීමට උත්සාහ කරන අතර පද්ධති මාර්ගයක් සකස් කිරීමට හෝ වෙනත් ආකාරයකින් එය අවුල් කිරීමට නොවේ.

එසේම, #include "" අසමත් වුවහොත්, එය ප්‍රමිතියෙන් #include <> ලෙස නැවත කියවනු ලැබේ.

මෙම gcc ප්රලේඛනය gcc නොව සම්මත කිරීමට විශේෂිත වුණත් වන (සම්පාදක විශේෂිත) විස්තර, ISO ප්රමිති නීතිඥ ආකාරයේ සාකච්ඡාව වඩා තේරුම් ගොඩක් පහසු වේ ඇත.


කෙසේ වෙතත්, කෝණ වරහන් හෝ උපුටා දැක්වීම් භාවිතා කිරීම ලිපිගොනු ඇතුළත් කර ඇති ආකාරයට බලපාන්නේ නැත, එය හරියටම සමාන ය: ලබා දීමට පෙර, පෙර සැකසුම්කරු විසින් විශාල මූලාශ්‍ර ගොනුවක් නිර්මාණය කරයි. එය සම්පාදකයාට (පෙර සැකසුම්කරු විසින් # අර්ථ දැක්වීම, #if ඇගයීම යනාදිය වැනි වෙනත් දේ කරයි. නමුත් # ඇතුළත් කිරීම පහසුය)
ලොගෝර්න්

ගැටුම් ගැන කුමක් කිව හැකිද? උදා: zlib.hමගේ 'පරිශීලක' සෙවුම් මාර්ගවල මා සතුව ඇති බවත්, පද්ධති සෙවුම් මාවතේ වෙනත් අනුවාදයක් පවතින බවත්, එවිට #include <zlib.h>පද්ධති අනුවාදය #include "zlib.h"ඇතුළත් කර මගේම දෑ ඇතුළත් වේද?
the_mandrill

ආහා, මගේම ප්‍රශ්නයට පිළිතුරු දුන්නේය: stackoverflow.com/questions/21593/…
the_mandrill

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

10
#include "filename" // User defined header
#include <filename> // Standard library header.

උදාහරණයක්:

මෙහි ගොනු නාමය Seller.h:

#ifndef SELLER_H     // Header guard
#define SELLER_H     // Header guard

#include <string>
#include <iostream>
#include <iomanip>

class Seller
{
    private:
        char name[31];
        double sales_total;

    public:
        Seller();
        Seller(char[], double);
        char*getName();

#endif

පන්ති ක්‍රියාත්මක කිරීමේදී (නිදසුනක් ලෙස, Seller.cppසහ ගොනුව භාවිතා කරන වෙනත් ලිපිගොනු වල Seller.h), පරිශීලකයා විසින් අර්ථ දක්වා ඇති ශීර්ෂකය දැන් පහත පරිදි ඇතුළත් කළ යුතුය:

#include "Seller.h"

10
  • #include <> යනු පූර්ව නිශ්චිත ශීර්ෂ ගොනු සඳහා ය

ශීර්ෂ ගොනුව පෙර නිර්වචනය කර ඇත්නම්, ඔබ සරලවම ශීර්ෂ ගොනුවේ නම කෝණික වරහන් වල ලියා තබනු ඇත, එය මේ ආකාරයෙන් පෙනෙනු ඇත (අපට පූර්ව නිශ්චිත ශීර්ෂ ගොනුවක් ඇති බව උපකල්පනය කර iostream):

#include <iostream>
  • #include " " ක්‍රමලේඛකයා අර්ථ දක්වන ශීර්ෂ ගොනු සඳහා වේ

ඔබ (ක්‍රමලේඛකයා) ඔබේම ශීර්ෂ ගොනුවක් ලියා ඇත්නම් ඔබ ශීර්ෂ ගොනුවේ නම උපුටා දැක්වීම් වලින් ලියනු ඇත. එබැවින්, ඔබ ශීර්ෂ ගොනුවක් ලියා ඇතැයි සිතමු myfile.h, එවිට මෙය එම ගොනුව ඇතුළත් කිරීම සඳහා ඇතුළත් කිරීමේ විධානය භාවිතා කරන ආකාරය පිළිබඳ උදාහරණයකි:

#include "myfile.h"

2
එයට පෙර නිර්වචනය කළ ශීර්ෂ ලිපිගොනු සමඟ කිසිදු සම්බන්ධයක් නැත. එය සෙවීම සඳහා ස්ථාන සමඟ කළ යුතුය.
සී ජොන්සන්

9

මෙහි ඇති බොහෝ පිළිතුරු ගොනුව සොයා ගැනීම සඳහා සම්පාදකයා සොයන මාර්ග කෙරෙහි අවධානය යොමු කරයි. බොහෝ සම්පාදකයින් කරන්නේ මෙය වුවත්, සම්මත ශීර්ෂයන්ගේ බලපෑම් සමඟ අනුකූලව සම්පාදනය කිරීමට අවසර දී #include <list>ඇති අතර, ස්විචයක් ලෙස සැලකීමට, කීමට, එය ගොනුවක් ලෙස කිසිසේත් අවශ්‍ය නොවේ.

මෙය තනිකරම උපකල්පිත නොවේ. ඒ ආකාරයට ක්‍රියා කරන අවම වශයෙන් එක් සම්පාදකයෙකු වත් සිටී. #include <xxx>සම්මත ශීර්ෂ සමඟ පමණක් භාවිතා කිරීම රෙකමදාරු කරනු ලැබේ.


9
#include <abc.h>

සම්මත පුස්තකාල ගොනු ඇතුළත් කිරීමට භාවිතා කරයි. එබැවින් සම්පාදකයා සම්මත පුස්තකාල ශීර්ෂයන් වාසය කරන ස්ථාන පරීක්ෂා කරනු ඇත.

#include "xyz.h"

පරිශීලක අර්ථ දක්වන ලද ශීර්ෂ ගොනු ඇතුළත් කිරීමට සම්පාදකයාට කියයි. එබැවින් සම්පාදකයා වත්මන් ෆෝල්ඩරයේ හෝ -Iඅර්ථ දක්වා ඇති ෆෝල්ඩරවල මෙම ශීර්ෂ ගොනු පරීක්ෂා කරනු ඇත .


7

C ++ හි, ගොනුවක් ආකාර දෙකකින් ඇතුළත් කරන්න:

පළමුවැන්න #include වන අතර එය පෙර සැකසුම්කරුට පූර්ව නිශ්චිත පෙරනිමි ස්ථානයේ ගොනුව සෙවීමට පවසනවා. මෙම ස්ථානය බොහෝ විට ඇතුළත් කර ඇති පරිසර විචල්‍යයක් වන අතර එය ගොනු ඇතුළත් කිරීමේ මාවත දක්වයි.

දෙවන වර්ගය # ඇතුළත් කරන්න "ගොනු නාමය", එය පෙර සැකසුම්කරුට වත්මන් නාමාවලියෙහි ඇති ගොනුව මුලින්ම සොයා බලන ලෙස පවසන අතර පසුව පරිශීලකයා සකසා ඇති පූර්ව නිශ්චිත ස්ථානවල එය සොයා බලන්න.


7

ආකෘති පත්‍රය 1 - # ඇතුළත් කරන්න <xxx>

පළමුවෙන්ම, වත්මන් නාමාවලියෙහි ශීර්ෂ ගොනුව පවතින බව සොයා බලයි. සොයාගත නොහැකි නම්, එය කලින් සැකසූ සම්මත පද්ධති නාමාවලි ලැයිස්තුවේ සොයයි.

පෝරමය 2 - # "xxx" ඇතුළත් කරන්න

මෙය වත්මන් නාමාවලියෙහි ශීර්ෂ ගොනුව පවතින බව සොයා බලයි.


නිශ්චිත සෙවුම් නාමාවලි ලැයිස්තුව ඉලක්කගත පද්ධතිය, GCC වින්‍යාසගත කර ඇති ආකාරය සහ එය ස්ථාපනය කර ඇති ස්ථානය මත රඳා පවතී. ඔබේ ජීසීසී සම්පාදකයාගේ -v විකල්පය සමඟ එය ක්‍රියාත්මක කිරීමෙන් සෙවුම් නාමාවලි ලැයිස්තුව සොයාගත හැකිය.

- I dir භාවිතා කිරීමෙන් ඔබට සෙවුම් මාර්ගයට අමතර නාමාවලි එකතු කළ හැකිය , එමඟින් වත්මන් නාමාවලියෙන් පසුව (විධානයෙහි උපුටා දැක්වීමේ ආකෘතිය සඳහා) සහ සම්මත පද්ධති නාමාවලි වලට වඩා ඉදිරියෙන් dir සෙවීමට හේතු වේ.


මූලික වශයෙන්, "xxx" ආකෘතිය වර්තමාන නාමාවලියෙහි සෙවීම හැර අන් කිසිවක් නොවේ; පෝරමය ආපසු වැටී නොමැති නම්


3
හොඳින් තහවුරු වී ඇති නිවැරදි පිළිතුරක් ඇති පැරණි ප්‍රශ්නයකට පිළිතුරු දීමට ඔබ තීරණය කරන්නේ නම්, දවසේ අග භාගයේ නව පිළිතුරක් එක් කිරීමෙන් ඔබට කිසිදු ගෞරවයක් නොලැබෙනු ඇත. ඔබ සතුව සුවිශේෂී නව තොරතුරු තිබේ නම්, හෝ අනෙක් පිළිතුරු සියල්ලම වැරදියි කියා ඔබට ඒත්තු ගැන්වී ඇත්නම්, සෑම අතින්ම නව පිළිතුරක් එක් කරන්න, නමුත් 'තවත් පිළිතුරක්' එකම මූලික තොරතුරු ලබා දීමෙන් ප්‍රශ්නය ඇසීමෙන් බොහෝ කලකට පසු සාමාන්‍යයෙන් ජයග්‍රහණය වේ ' ඔබට බොහෝ ගෞරවය උපයා ගත නොහැක.
ජොනතන් ලෙෆ්ලර්

1
On ජොනතන් ලෙෆ්ලර් දර්ශන්ගේ පිළිතුර තරම් සංක්ෂිප්ත හා නිවැරදි යැයි ඔබට හැඟෙන “හොඳින් ස්ථාපිත” පිළිතුරට මා යොමු කළ හැකිද?
personal_cloud

1
#include "header.h"පෝරමයේ විස්තරය නිවැරදි නොවේ, PersonalPersonal_cloud. PiCookie සහ Yann Droneaud ගේ පිළිතුර ඔවුන්ගේ තොරතුරු පැමිණෙන්නේ කොහෙන්දැයි හඳුනා ගන්නා බැවින් වඩාත් අදාළ යැයි මම සලකමි . ඉහළම ඡන්දය දුන් පිළිතුර මුළුමනින්ම සතුටුදායක යැයි මට නොපෙනේ.
ජොනතන් ලෙෆ්ලර්

මෙම පිළිතුර ඉහළින් පෙන්වන්නේ ඇයි? තවත් පිළිතුරු දෙකක් පහළට 650+ ඡන්ද එකක් තිබේ. මෙම පිළිතුර මා ව්‍යාකූල කළේය, මන්ද එය මා නිරීක්ෂණය කළ හැසිරීමට නොගැලපේ. කෝණික වරහන් වලින් ගැලවී නොයාම නිසා අවසාන වාක්‍යය බිඳී ඇති නිසා මෙය විය හැකිය. එහි තේරුම කුමක් දැයි මට විශ්වාස නැත.
නියොනිට්

6

මෙම #include <filename>පද්ධතිය ගොනුව වෙත යොමු කොට ඇත විට භාවිතා කරයි. එය /usr/includeහෝ වැනි පද්ධති පෙරනිමි ස්ථානවල සොයාගත හැකි ශීර්ෂ ගොනුවකි /usr/local/include. වෙනත් වැඩසටහනකට ඇතුළත් කළ යුතු ඔබේම ගොනු සඳහා ඔබ #include "filename"සින්ටැක්ස් භාවිතා කළ යුතුය.


6

සම්මත ගොනු පුස්තකාල ස්ථානවල "<ගොනු නාමය>" සෙවීම

වත්මන් නාමාවලියෙහි "ගොනු නාමය" සෙවුම් කරන අතර.

ඉතා මැනවින්, ඔබ සම්මත සී පුස්තකාල සඳහා <...> සහ ඔබ ලියන සහ වර්තමාන නාමාවලියෙහි ඇති පුස්තකාල සඳහා "..." භාවිතා කරනු ඇත.


4
මෙම පිළිතුර අනෙක් ඒවාට එකතු කරන නව තොරතුරු මොනවාද?
ඩැනියෙල් ලැන්ගර්

5

සරල සාමාන්‍ය රීතිය වන්නේ සම්පාදකයා සමඟ එන ශීර්ෂ ගොනු ඇතුළත් කිරීම සඳහා කෝණික වරහන් භාවිතා කිරීමයි. වෙනත් ඕනෑම ශීර්ෂ ලිපිගොනු ඇතුළත් කිරීමට ද්විත්ව මිල ගණන් භාවිතා කරන්න. බොහෝ සම්පාදකයින් එය කරන්නේ මේ ආකාරයට ය.

1.9 - පෙර සැකසුම් විධානයන් පිළිබඳව ශීර්ෂ ලිපිගොනු වඩාත් විස්තරාත්මකව පැහැදිලි කරයි. ඔබ නවක ක්‍රමලේඛකයෙක් නම්, ඒ සියල්ල තේරුම් ගැනීමට එම පිටුව ඔබට උදව් වනු ඇත. මම එය මෙතැන් සිට ඉගෙන ගත් අතර, මම එය රැකියාවේදී අනුගමනය කරමි.


4
#include <filename>

ඔබට C / C ++ පද්ධතියේ හෝ සම්පාදක පුස්තකාලවල ශීර්ෂ ගොනුව භාවිතා කිරීමට අවශ්‍ය විට භාවිතා වේ. මෙම පුස්තකාල stdio.h, string.h, math.h, ආදිය විය හැකිය.

#include "path-to-file/filename"

ඔබේ ව්‍යාපෘති ෆෝල්ඩරයේ හෝ වෙනත් තැනක ඇති ඔබේම අභිරුචි ශීර්ෂ ගොනුවක් භාවිතා කිරීමට ඔබට අවශ්‍ය විටදී භාවිතා වේ.

පෙර සැකසුම් සහ ශීර්ෂකය පිළිබඳ වැඩි විස්තර සඳහා. සී කියවන්න - පෙර සැකසුම් .


3

#include <filename>

  • පෙර සැකසුම් මඟින් ක්‍රියාත්මක කිරීම මත රඳා පවතී. පද්ධති ශීර්ෂ ලිපිගොනු රඳවා ඇති නාමාවලිය සෙවීමට එය සම්පාදකයාට කියයි.
  • මෙම ක්‍රමය සාමාන්‍යයෙන් සම්මත ශීර්ෂ ගොනු සොයා ගැනීමට භාවිතා කරයි.

#include "filename"

  • වැඩසටහන ක්‍රියාත්මක වන ශීර්ෂ ගොනු සෙවීමට මෙය සම්පාදකයාට කියයි. එය අසමත් වුවහොත් එය හැසිරේ#include <filename> අතර එම ශීර්ෂ ගොනුව පද්ධති ශීර්ෂ ගොනු ගබඩා කර ඇති ස්ථානයේ සොයන්න.
  • මෙම ක්‍රමය සාමාන්‍යයෙන් භාවිතා කරන්නා විසින් නිර්වචනය කරන ලද ශීර්ෂ ගොනු හඳුනා ගැනීම සඳහා භාවිතා කරයි (පරිශීලකයා විසින් සාදන ලද ශීර්ෂ ගොනු). ඔබට සම්මත පුස්තකාලයක් ඇමතීමට අවශ්‍ය නම් මෙය භාවිතා නොකරන්න #include <filename>.

2

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

cpp -v /dev/null -o /dev/null

ඇපල් එල්එල්වීඑම් අනුවාදය 10.0.0 (ක්ලැන්ග් -1000.10.44.2)
ඉලක්කය: x86_64-apple-darwin18.0.0
නූල් ආකෘතිය: පොසික්ස් ඉන්ස්ටෝල්ඩ් ඩිර්: පුස්තකාලය / සංවර්ධක / කමාන්ඩ්ලයින් ටූල්ස් / යූඑස්ආර් / බින්
"/ පුස්තකාලය / සංවර්ධක / විධාන පුවරුව / usr / bin / clang" -cc1 -Triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-use -Werror = අතහැර දැමූ-වස්තු-අයිසා-භාවිතය -E -Disable-free - අක්‍රීය- llvm-verifier -discard-value-names -main-file-name null -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-anim -fno -rict-return -masm-verbose - munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning = lldb -target-linker-version 409.12 -v -resource-dir /Library/Developer/CommandLineTools/usr/lib/clang/10.0.0 - isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -I / usr / local / include -fdebug-compilation-dir / Users / hogstrom -ferror-limit 19 -fmessage-length 80 -stack-protection 1 -fblocks -fencode-extended-block-sign -fobjc-runtime = macosx-10.14.0 -fmax-type-align = 16 -fdiagnostics-show-option -fcolor-Dianostics -traditional-cpp -o - -xc / dev / null
clang -cc1 වෙළුම 10.0.0 (clang-1000.10.44.2) පෙරනිමි ඉලක්කය x86_64-apple-darwin18.0.0 නොපවතින නාමාවලිය නොසලකා හැරීම "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/local/include" නොසලකා හැරීම නාමාවලිය "/ පුස්තකාල / සංවර්ධක / විධාන පුවරුව / එස්ඩීකේ / මැකෝස්එක්ස් 10.14.sdk/Library/Frameworks"
# ඇතුළත් කරන්න "..." සෙවීම මෙතැනින් ආරම්භ වේ:
# ඇතුළත් කරන්න <...> සෙවීම මෙතැනින් ආරම්භ වේ:
/ usr / local / include
/ පුස්තකාලය / සංවර්ධනකරු / CommandLineTools / usr / lib / clang / 10.0.0 / ඇතුලත්
/ පුස්තකාලයේ / සංවර්ධනකරු / CommandLineTools / usr / ඇතුළත්
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include
/ පුස්තකාලයේ / සංවර්ධනකරු / CommandLineTools / SDKs / MacOSX10.14.sdk / System / Library / Frameworks (රාමු නාමාවලිය)
සෙවුම් ලැයිස්තුවේ අවසානය.


1
#include <file> 

පෙරනිමියෙන් බහලුම ඇතුළත් ගොනුවක් ඇතුළත් වේ.

#include "file" 

එය සම්පාදනය කළ වත්මන් නාමාවලියෙහි ගොනුවක් ඇතුළත් වේ.


-2

# ඇතුළත් කිරීමේ ප්‍රකාශය ලිවීමට ක්‍රම දෙකක් තිබේ. ඒවා නම්:

#include"filename"
#include<filename>

එක් එක් ස්වරූපයේ අර්ථය වේ

#include"mylib.h"

මෙම විධානය මඟින් mylib.hවත්මන් ඩිරෙක්ටරියේ ඇති ගොනුව මෙන්ම නිශ්චිත නාමාවලි ලැයිස්තුවක් ද සඳහන් කරනු ඇත.

#include<mylib.h>

මෙම විධානය මඟින් ගොනුව mylib.hනිශ්චිත නාමාවලි ලැයිස්තුවේ පමණක් සොයනු ඇත.

ඇතුළත් කිරීමේ සෙවුම් මාර්ගය ගොනුව ඇතුළත් කිරීම සඳහා සෙවිය යුතු නාමාවලි ලැයිස්තුවක් මිස වෙන කිසිවක් නොවේ. විවිධ සී සම්පාදකයින් ඔබට සෙවුම් මාර්ගය විවිධ පුරුදු වලින් සැකසීමට ඉඩ දෙයි.


1
හොඳින් තහවුරු වී ඇති නිවැරදි පිළිතුරක් ඇති පැරණි ප්‍රශ්නයකට පිළිතුරු දීමට ඔබ තීරණය කරන්නේ නම්, දවසේ අග භාගයේ නව පිළිතුරක් එක් කිරීමෙන් ඔබට කිසිදු ගෞරවයක් නොලැබෙනු ඇත. ඔබ සතුව සුවිශේෂී නව තොරතුරු තිබේ නම්, හෝ අනෙක් පිළිතුරු සියල්ලම වැරදියි කියා ඔබට ඒත්තු ගැන්වී ඇත්නම්, සෑම අතින්ම නව පිළිතුරක් එක් කරන්න, නමුත් 'තවත් පිළිතුරක්' එකම මූලික තොරතුරු ලබා දීමෙන් ප්‍රශ්නය ඇසීමෙන් බොහෝ කලකට පසු සාමාන්‍යයෙන් ජයග්‍රහණය වේ ' ඔබට බොහෝ ගෞරවය උපයා ගත නොහැක.
ජොනතන් ලෙෆ්ලර්
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.