C සහ C ++ ක්රමලේඛන භාෂාවල, include
පහත දැක්වෙන පරිදි කෝණ වරහන් භාවිතා කිරීම සහ ප්රකාශයක උපුටා දැක්වීම් භාවිතා කිරීම අතර වෙනස කුමක්ද?
#include <filename>
#include "filename"
C සහ C ++ ක්රමලේඛන භාෂාවල, include
පහත දැක්වෙන පරිදි කෝණ වරහන් භාවිතා කිරීම සහ ප්රකාශයක උපුටා දැක්වීම් භාවිතා කිරීම අතර වෙනස කුමක්ද?
#include <filename>
#include "filename"
Answers:
ප්රායෝගිකව, වෙනස ඇත්තේ ඇතුළත් කර ඇති ගොනුව සඳහා පෙර සැකසුම්කරු සොයන ස්ථානයේ ය.
සඳහා #include <filename>
ක්රියාත්මක කිරීමේ රඳා ආකාරයට preprocessor සෙවීම්, සාමාන්යයෙන්, සොයන්න බහලුම් සම්පාදකවරයා / IDE විසින්-නම් පෙර. මෙම ක්රමය සාමාන්යයෙන් සම්මත පුස්තකාල ශීර්ෂ ගොනු ඇතුළත් කිරීමට භාවිතා කරයි.
සඳහා #include "filename"
එම බහලුම තුල එම preprocessor සෙවුම් පළමු, පසුව එම නියෝගය අඩංගු ගොනුව ලෙස භාවිතා සෙවුම් මාර්ගය පහත#include <filename>
ආකෘති පත්රය. ක්රමලේඛකයා විසින් නිර්වචනය කරන ලද ශීර්ෂ ගොනු ඇතුළත් කිරීම සඳහා මෙම ක්රමය සාමාන්යයෙන් භාවිතා වේ.
සෙවුම් මාර්ග පිළිබඳ GCC ප්රලේඛනයෙන් වඩාත් සම්පූර්ණ විස්තරයක් ලබා ගත හැකිය .
#include <...>
, පද්ධතියේ ස්ථාපනය කර ඇති පැකේජය #include "..."
භාවිතා කර අසල ඇති නිධිය භාවිතා කර ඇත. මට ඒවා පසුපසට වන්නට ඇත. කෙසේ හෝ ඇසුරුම් කළ ශීර්ෂයේ ඇතුළත් කර ඇති ගාස්තුව යටි ඉරි සහිත උපසර්ගයක් ඇත. (එය පැකේජ සඳහා සම්මුතියක් විය හැකිය. එසේ නැතහොත් ඒවා දෙක මිශ්ර කිරීම හිතාමතාම වළක්වා ගත හැකි ක්රමයක් විය හැකිය. අනුවාද සුදුසුකම් මට වඩාත් අර්ථවත් වනු ඇත.)
දැන ගැනීමට ඇති එකම ක්රමය ඔබේ ක්රියාත්මක කිරීමේ ලියකියවිලි කියවීමයි.
දී 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: නව රේඛා අක්ෂරය හැර ප්රභව අක්ෂර කට්ටලයේ ඕනෑම සාමාජිකයෙක් සහ
"
<සහ> අතර අක්ෂර අනුක්රමය අද්විතීය ලෙස යොමු කරන්නේ ශීර්ෂ පා to යක් වන අතර එය අනිවාර්යයෙන්ම ගොනුවක් නොවේ. අක්ෂර අනුක්රමය ඔවුන්ගේ අභිමතය පරිදි භාවිතා කිරීමට ක්රියාත්මක කිරීම බොහෝ සෙයින් නොමිලේ. (කෙසේ වෙතත්, බොහෝ විට එය ගොනු නාමයක් ලෙස සලකන අතර අනෙක් පෝස්ට් වල සඳහන් වන පරිදි ඇතුළත් කිරීමේ මාවතේ සෙවීමක් කරන්න .)
#include "file"
පෝරමය භාවිතා කරන්නේ නම් , ක්රියාත්මක කිරීම පළමුව සහය දක්වන්නේ නම් ලබා දී ඇති නමේ ගොනුවක් සොයයි. (සහාය නොදක්වයි), හෝ සෙවීම අසමත් වුවහොත්, ක්රියාත්මක කිරීම අනෙක් ( #include <file>
) ආකෘතිය භාවිතා කළ ආකාරයටම ක්රියා කරයි .
එසේම, තුන්වන පෝරමයක් පවතින අතර එය #include
ඉහත ආකෘති දෙකටම නොගැලපෙන විට භාවිතා වේ. මෙම ආකෘතියේ දී, මූලික මූලික සැකසුම් (සාර්ව ප්රසාරණය වැනි) විධානයෙහි “ක්රියාකාරිත්වය” මත සිදු කෙරෙන අතර ප්රති #include
result ලය අනෙක් ආකාර දෙකෙන් එකකට ගැලපෙනු ඇතැයි අපේක්ෂා කෙරේ.
<
සහ >
යතුර අතර ඇති නූල භාවිතා කළේය .
මෙහි සමහර හොඳ පිළිතුරු සී ප්රමිතියට යොමු කරන නමුත් පොසික්ස් ප්රමිතිය අමතක කර ඇත, විශේෂයෙන් 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
c99
- එය C සම්පාදකයාගේ POSIX නමයි. (POSIX 2008 ප්රමිතියට C11 යන්න කිසිසේත්ම යොමු කළ නොහැක. 2013 POSIX 2008 යාවත්කාලීන කිරීම එය සඳහන් කළ C ප්රමිතිය වෙනස් කළේ නැත.)
-L
.
මේ දෙක අතර වෙනස ගැන GCC ලියකියවිලි පහත දැක්වේ:
පෙර සැකසුම් විධානය භාවිතා කරමින් පරිශීලක සහ පද්ධති ශීර්ෂ ගොනු ඇතුළත්
‘#include’
වේ. එයට ප්රභේද දෙකක් ඇත:
#include <file>
මෙම ප්රභේදය පද්ධති ශීර්ෂ ගොනු සඳහා භාවිතා කරයි. එය පද්ධති නාමාවලි වල සම්මත ලැයිස්තුවක ගොනුවක් නම් ගොනුවක් සොයයි.
-I
විකල්පය සමඟ ඔබට මෙම ලැයිස්තුවට නාමාවලි සකස් කළ හැකිය ( ආයාචනය බලන්න ).
#include "file"
මෙම ප්රභේදය ඔබේම වැඩසටහනක ශීර්ෂ ගොනු සඳහා භාවිතා කරයි. එය දැනට පවතින ගොනුව අඩංගු නාමාවලියෙහි, පසුව උපුටා දැක්වීම් නාමාවලිවල සහ පසුව භාවිතා කරන එකම නාමාවලිවල ගොනුවක් නම් ගොනුවක් සොයයි
<file>
. ඔබට-iquote
විකල්පය සමඟ මිල ගණන් නාමාවලි ලැයිස්තුවට නාමාවලි සකස් කළ හැකිය.‘#include’
උපුටා දැක්වීමේ ලකුණු හෝ කෝණ වරහන් වලින් වෙන් කර තිබේද යන තර්කය , එම අදහස් හඳුනා නොගන්නා අතර සාර්ව නම් පුළුල් නොවේ. මේ අනුව,#include <x/*y>
පද්ධති ශීර්ෂ ගොනුවක් නම් කිරීම නියමx/*y
කරයි.කෙසේ වෙතත්, ගොනුව තුළ බැක්ස්ලෑෂ් සිදුවන්නේ නම්, ඒවා සාමාන්ය පෙළ අක්ෂර ලෙස සලකනු ලැබේ. සී හි නියත නියතයන්ට ගැලපෙන අක්ෂර ගැලවීමේ අනුපිළිවෙල කිසිවක් සැකසෙන්නේ නැත. මේ අනුව,
#include "x\n\\y"
බැක්ස්ලෑෂ් තුනක් අඩංගු ගොනු නාමයක් නියම කරයි. (සමහර පද්ධති '\' යන්න අර්ථකථන බෙදුම්කරුවෙකු ලෙස අර්ථකථනය‘/’
කරයි . මේ සියල්ලම එකම ආකාරයකින් අර්ථ නිරූපණය කරයි‘/’
.ගොනුවේ නමට පසුව රේඛාවේ යමක් (අදහස් හැර) තිබේ නම් එය දෝෂයකි.
එය කරන්නේ:
"mypath/myfile" is short for ./mypath/myfile
සමග .
කොහෙද ගොනුවේ ඇති මෙම නාමාවලිය එක්කෝ වීම #include
අඩංගු වේ, සහ / හෝ සම්පාදකවරයා වත්මන් කම්කරු බහලුම, සහ / හෝdefault_include_paths
සහ
<mypath/myfile> is short for <defaultincludepaths>/mypath/myfile
නම් ./
වේ <default_include_paths>
, එය වෙනසක් වන්නේ නැත.
නම් mypath/myfile
තවත් වේ බහලුම ඇතුළත්, හැසිරීම නිර්වචනය නොකළ වේ.
#include "mypath/myfile"
සමාන නොවේ #include "./mypath/myfile"
. PiCookie ගේ පිළිතුර පවසන පරිදි, ද්විත්ව උපුටා දැක්වීම් සම්පාදකයාට ක්රියාත්මක කිරීම-නිර්වචනය කර ඇති ආකාරයට සෙවීමට කියයි - එයට නිශ්චිත ස්ථානවල සෙවීම ඇතුළත් වේ #include <...>
. (ඇත්ත වශයෙන්ම, එය බොහෝ විට සමාන විය හැකි නමුත්, උදාහරණයක් ලෙස, අවම වශයෙන් යුනික්ස් වැනි පද්ධති /usr/include/mypath/myfile
ලෙස හැඳින්විය හැකි බැවිනි /usr/include/./mypath/myfile
.)
defaultincludepaths
කිරීමට තවත් අර්ථවත් කරමින් විරුද්ධ ලෙස, .
(ඉහත සඳහන් ලෙස). මෙම දෙකම අපේක්ෂිත ප්රතිඵලය ඇත #include "..."
හා #include <...>
සෙවීමට dirpath
මෙම <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>
. ඉතිරිය ක්රියාත්මක කිරීම-අර්ථ දක්වා ඇත.
-I
ව්යාපාරය නිශ්චිතව දක්වා ඇති සී ප්රමිතියේ සඳහන් කිරීමක් ඔබට කළ හැකිද ?
-I
.
#include <file.h>
එහි "ඇතුළත්" නාමාවලියෙහි ශීර්ෂකය සෙවීමට සම්පාදකයාට පවසයි, උදා: MinGW සඳහා සම්පාදකයා file.h
C: \ MinGW \ include \ හෝ ඔබේ සම්පාදකයා ස්ථාපනය කර ඇති ඕනෑම තැනක සොයනු ඇත.
#include "file"
වත්මන් ඩිරෙක්ටරිය (එනම් ප්රභව ගොනුව පවතින නාමාවලිය) සෙවීමට සම්පාදකයාට කියයි file
.
ඔබට -I
GCC සඳහා ධජය භාවිතා කළ හැකිය , එය කෝණික වරහන් සමඟ ඇතුළත් වූ විට, එය පසුව නාමාවලියෙහි ශීර්ෂයන් සෙවිය යුතුය -I
. ධජය පසු නාමාවලිය GCC විසින් නාමාවලිය ලෙස සලකනු includes
ඇත.
උදාහරණයක් ලෙස, ඔබ සතුව myheader.h
ඔබේම නාමාවලියෙහි ගොනුවක් තිබේ නම් , ඔබ #include <myheader.h>
ධජය සමඟ GCC අමතන්නේ නම් ඔබට පැවසිය හැකිය -I .
(එය වත්මන් නාමාවලියෙහි ඇතුළත් කිරීම් සෙවිය යුතු බව අඟවයි.)
නොමැතිව -I
ධජය, ඔබ භාවිතා කිරීමට සිදු වනු ඇත #include "myheader.h"
, ගොනුව හෝ පියවරක් ඇතුළත් කිරීමට myheader.h
වෙත include
ඔබගේ සම්පාදක බහලුම.
ප්රමිතිය අනුව - ඔව්, ඒවා වෙනස් ය:
පෝරමයේ පූර්ව සැකසුම් නියෝගයක්
#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 <...>
පෝරමය සොයන නාමාවලි (ඇතුළත් මාර්ගය, උදා: පද්ධති ශීර්ෂ ).
විශිෂ්ට පිළිතුරු වලට ස්තූතියි, එස්.පී. ඇඩම් ස්ටෙල්මාස්සික් සහ පිකූකි, සහ අයිබ්.
බොහෝ ක්රමලේඛකයින් මෙන්, "myApp.hpp"
යෙදුම් විශේෂිත ලිපිගොනු සඳහා ආකෘති පත්රය භාවිතා කිරීමේ අවිධිමත් සම්මුතිය සහ <libHeader.hpp>
පුස්තකාල හා සම්පාදක පද්ධති ගොනු සඳහා වන ආකෘති පත්රය, එනම් නිශ්චිතව දක්වා ඇති ලිපිගොනු /I
සහ INCLUDE
පරිසර විචල්යය, වසර ගණනාවක් තිස්සේ සම්මත යැයි සිතමින් භාවිතා කර ඇත.
කෙසේ වෙතත්, සී ප්රමිතියට අනුව සෙවුම් අනුපිළිවෙල ක්රියාත්මක කිරීම විශේෂිත වන අතර එමඟින් අතේ ගෙන යා හැකි බව සංකීර්ණ කළ හැකිය. තත්වය වඩාත් නරක අතට හැරවීම සඳහා, අපි ජෑම් භාවිතා කරමු, එමඟින් ඇතුළත් වන ලිපිගොනු කොතැනදැයි ස්වයංක්රීයව හඳුනා ගනී. ඔබගේ ඇතුළත් ගොනු සඳහා ඔබට සාපේක්ෂ හෝ නිරපේක්ෂ මාර්ග භාවිතා කළ හැකිය. එනම්
#include "../../MyProgDir/SourceDir1/someFile.hpp"
MSVS හි පැරණි අනුවාදයන්ට ද්විත්ව බැක්ස්ලෑෂ් (\\) අවශ්ය වූ නමුත් දැන් එය අවශ්ය නොවේ. එය වෙනස් වූයේ කවදාදැයි මම නොදනිමි. 'නික්ස්' සමඟ අනුකූල වීම සඳහා ඉදිරි කප්පාදුව භාවිතා කරන්න (වින්ඩෝස් එය පිළිගනු ඇත).
ඔබ ඒ ගැන සැබවින්ම කනස්සල්ලට පත්ව සිටී නම්, "./myHeader.h"
මූලාශ්ර කේතය මෙන් එකම ඩිරෙක්ටරියේ ඇතුළත් කළ ගොනුවක් සඳහා භාවිතා කරන්න (මගේ වර්තමාන, ඉතා විශාල ව්යාපෘතියක සමහර අනුපිටපත් ඇත, එහි ගොනු නාමයන් විසිරී ඇත - සැබවින්ම වින්යාස කළමනාකරණ ගැටලුවක්).
ඔබේ පහසුව සඳහා මෙහි පිටපත් කළ MSDN පැහැදිලි කිරීම මෙන්න).
උපුටා ගත් පෝරමය
මෙම අනුපිළිවෙලට ලිපිගොනු ඇතුළත් කිරීම සඳහා වන පෙර සැකසුම් සෙවීම්:
- # ඇතුළත් කිරීමේ ප්රකාශය අඩංගු ගොනුවේ එකම නාමාවලියෙහි.
- දැනට විවෘත කර ඇති නාමාවලිවල ගොනු විවෘත කර ඇති ප්රතිලෝම අනුපිළිවෙලට ඇතුළත් වේ
. සෙවීම මවුපියන්ගේ නාමාවලියෙන් ආරම්භ වන අතර
ඕනෑම ආච්චිලා සීයලාගේ නාමාවලි හරහා ඉහළට ගමන් කරයි.- එක් එක්
/I
සම්පාදක විකල්පයෙන් නිශ්චිතව දක්වා ඇති මාර්ගය දිගේ .INCLUDE
පරිසර විචල්යය මගින් නියම කර ඇති මාර්ග ඔස්සේ .කෝණ-වරහන් ආකෘතිය
මෙම අනුපිළිවෙලට ලිපිගොනු ඇතුළත් කිරීම සඳහා වන පෙර සැකසුම් සෙවීම්:
- එක් එක්
/I
සම්පාදක විකල්පයෙන් නිශ්චිතව දක්වා ඇති මාර්ගය දිගේ .- විධාන රේඛාවේ සම්පාදනය සිදු වන විට,
INCLUDE
පරිසර විචල්යය මගින් නියම කර ඇති මාර්ග ඔස්සේ .
අවම වශයෙන් GCC අනුවාදය <= 3.0 සඳහා, කෝණ-වරහන් පෝරමය ඇතුළත් කළ ගොනුව සහ ඇතුළුව එක අතර පරායත්තතාවයක් ජනනය නොකරයි.
එබැවින් ඔබට පරායත්තතා රීති ජනනය කිරීමට අවශ්ය නම් (නිදහස් කිරීම සඳහා GCC -M විකල්පය භාවිතා කිරීම), ඔබ යැපුම් ගසෙහි ඇතුළත් කළ යුතු ගොනු සඳහා උපුටා ගත් පෝරමය භාවිතා කළ යුතුය.
සඳහා #include ""
වූ සම්පාදක සාමාන්යයෙන් බව ඇතුළත් ද පසුව අනෙක් ෆෝල්ඩර අඩංගු ලිපිෙගොනුව බහාළුම සෝදිසි කර බලනවා. සඳහා #include <>
සම්පාදකවරයා වර්තමාන ගොනුව ගේ ෆෝල්ඩරය සොයා නැත.
<filename>
හා "filename"
ක්රියාත්මක කිරීම අර්ථ ස්ථාන සඳහා සොයන්න.
ඔබ #include <filename> භාවිතා කරන විට, C \ C ++ ශීර්ෂ ගොනු (stdio.h \ cstdio, string, vector, ආදිය) නාමාවලියෙහි ඇති ගොනුව සොයන පෙර සකසනය. නමුත්, ඔබ #include "ගොනු නාමය" භාවිතා කරන විට: පළමුව, වත්මන් නාමාවලියෙහි ගොනුව සොයන පෙර සකසනය, එය මෙහි නොමැති නම් - ඔහු එය සොයන්නේ C \ C ++ ශීර්ෂ ලිපිගොනු වලය.
#include
නියෝගය ලිපිගොනු සමඟ කිසිසේත් සම්බන්ධ නොවේ.
කෝණ වරහන් සහිත # ඇතුළත් කිරීම ගොනුව ඇතුළත් කිරීම සඳහා "ක්රියාත්මක කිරීම මත රඳා පවතින ස්ථාන ලැයිස්තුවක්" (එය "පද්ධති ශීර්ෂයන්" යැයි පැවසීමේ ඉතා සංකීර්ණ ක්රමයකි) සොයනු ඇත.
# උපුටා දැක්වීම් ඇතුළත් කිරීම මඟින් ගොනුවක් පමණක් සොයනු ඇත (සහ, "ක්රියාත්මක කිරීම මත රඳා පවතින ආකාරයකින්", බ්ලී). එයින් අදහස් වන්නේ, සාමාන්ය ඉංග්රීසියෙන්, එය ඔබ විසි කරන මාර්ගය / ගොනු නාමය යෙදීමට උත්සාහ කරන අතර පද්ධති මාර්ගයක් සකස් කිරීමට හෝ වෙනත් ආකාරයකින් එය අවුල් කිරීමට නොවේ.
එසේම, #include "" අසමත් වුවහොත්, එය ප්රමිතියෙන් #include <> ලෙස නැවත කියවනු ලැබේ.
මෙම gcc ප්රලේඛනය gcc නොව සම්මත කිරීමට විශේෂිත වුණත් වන (සම්පාදක විශේෂිත) විස්තර, ISO ප්රමිති නීතිඥ ආකාරයේ සාකච්ඡාව වඩා තේරුම් ගොඩක් පහසු වේ ඇත.
zlib.h
මගේ 'පරිශීලක' සෙවුම් මාර්ගවල මා සතුව ඇති බවත්, පද්ධති සෙවුම් මාවතේ වෙනත් අනුවාදයක් පවතින බවත්, එවිට #include <zlib.h>
පද්ධති අනුවාදය #include "zlib.h"
ඇතුළත් කර මගේම දෑ ඇතුළත් වේද?
#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"
#include <>
යනු පූර්ව නිශ්චිත ශීර්ෂ ගොනු සඳහා යශීර්ෂ ගොනුව පෙර නිර්වචනය කර ඇත්නම්, ඔබ සරලවම ශීර්ෂ ගොනුවේ නම කෝණික වරහන් වල ලියා තබනු ඇත, එය මේ ආකාරයෙන් පෙනෙනු ඇත (අපට පූර්ව නිශ්චිත ශීර්ෂ ගොනුවක් ඇති බව උපකල්පනය කර iostream):
#include <iostream>
#include " "
ක්රමලේඛකයා අර්ථ දක්වන ශීර්ෂ ගොනු සඳහා වේඔබ (ක්රමලේඛකයා) ඔබේම ශීර්ෂ ගොනුවක් ලියා ඇත්නම් ඔබ ශීර්ෂ ගොනුවේ නම උපුටා දැක්වීම් වලින් ලියනු ඇත. එබැවින්, ඔබ ශීර්ෂ ගොනුවක් ලියා ඇතැයි සිතමු myfile.h
, එවිට මෙය එම ගොනුව ඇතුළත් කිරීම සඳහා ඇතුළත් කිරීමේ විධානය භාවිතා කරන ආකාරය පිළිබඳ උදාහරණයකි:
#include "myfile.h"
මෙහි ඇති බොහෝ පිළිතුරු ගොනුව සොයා ගැනීම සඳහා සම්පාදකයා සොයන මාර්ග කෙරෙහි අවධානය යොමු කරයි. බොහෝ සම්පාදකයින් කරන්නේ මෙය වුවත්, සම්මත ශීර්ෂයන්ගේ බලපෑම් සමඟ අනුකූලව සම්පාදනය කිරීමට අවසර දී #include <list>
ඇති අතර, ස්විචයක් ලෙස සැලකීමට, කීමට, එය ගොනුවක් ලෙස කිසිසේත් අවශ්ය නොවේ.
මෙය තනිකරම උපකල්පිත නොවේ. ඒ ආකාරයට ක්රියා කරන අවම වශයෙන් එක් සම්පාදකයෙකු වත් සිටී. #include <xxx>
සම්මත ශීර්ෂ සමඟ පමණක් භාවිතා කිරීම රෙකමදාරු කරනු ලැබේ.
#include <abc.h>
සම්මත පුස්තකාල ගොනු ඇතුළත් කිරීමට භාවිතා කරයි. එබැවින් සම්පාදකයා සම්මත පුස්තකාල ශීර්ෂයන් වාසය කරන ස්ථාන පරීක්ෂා කරනු ඇත.
#include "xyz.h"
පරිශීලක අර්ථ දක්වන ලද ශීර්ෂ ගොනු ඇතුළත් කිරීමට සම්පාදකයාට කියයි. එබැවින් සම්පාදකයා වත්මන් ෆෝල්ඩරයේ හෝ -I
අර්ථ දක්වා ඇති ෆෝල්ඩරවල මෙම ශීර්ෂ ගොනු පරීක්ෂා කරනු ඇත .
C ++ හි, ගොනුවක් ආකාර දෙකකින් ඇතුළත් කරන්න:
පළමුවැන්න #include වන අතර එය පෙර සැකසුම්කරුට පූර්ව නිශ්චිත පෙරනිමි ස්ථානයේ ගොනුව සෙවීමට පවසනවා. මෙම ස්ථානය බොහෝ විට ඇතුළත් කර ඇති පරිසර විචල්යයක් වන අතර එය ගොනු ඇතුළත් කිරීමේ මාවත දක්වයි.
දෙවන වර්ගය # ඇතුළත් කරන්න "ගොනු නාමය", එය පෙර සැකසුම්කරුට වත්මන් නාමාවලියෙහි ඇති ගොනුව මුලින්ම සොයා බලන ලෙස පවසන අතර පසුව පරිශීලකයා සකසා ඇති පූර්ව නිශ්චිත ස්ථානවල එය සොයා බලන්න.
පළමුවෙන්ම, වත්මන් නාමාවලියෙහි ශීර්ෂ ගොනුව පවතින බව සොයා බලයි. සොයාගත නොහැකි නම්, එය කලින් සැකසූ සම්මත පද්ධති නාමාවලි ලැයිස්තුවේ සොයයි.
මෙය වත්මන් නාමාවලියෙහි ශීර්ෂ ගොනුව පවතින බව සොයා බලයි.
නිශ්චිත සෙවුම් නාමාවලි ලැයිස්තුව ඉලක්කගත පද්ධතිය, GCC වින්යාසගත කර ඇති ආකාරය සහ එය ස්ථාපනය කර ඇති ස්ථානය මත රඳා පවතී. ඔබේ ජීසීසී සම්පාදකයාගේ -v විකල්පය සමඟ එය ක්රියාත්මක කිරීමෙන් සෙවුම් නාමාවලි ලැයිස්තුව සොයාගත හැකිය.
- I dir භාවිතා කිරීමෙන් ඔබට සෙවුම් මාර්ගයට අමතර නාමාවලි එකතු කළ හැකිය , එමඟින් වත්මන් නාමාවලියෙන් පසුව (විධානයෙහි උපුටා දැක්වීමේ ආකෘතිය සඳහා) සහ සම්මත පද්ධති නාමාවලි වලට වඩා ඉදිරියෙන් dir සෙවීමට හේතු වේ.
මූලික වශයෙන්, "xxx" ආකෘතිය වර්තමාන නාමාවලියෙහි සෙවීම හැර අන් කිසිවක් නොවේ; පෝරමය ආපසු වැටී නොමැති නම්
#include "header.h"
පෝරමයේ විස්තරය නිවැරදි නොවේ, PersonalPersonal_cloud. PiCookie සහ Yann Droneaud ගේ පිළිතුර ඔවුන්ගේ තොරතුරු පැමිණෙන්නේ කොහෙන්දැයි හඳුනා ගන්නා බැවින් වඩාත් අදාළ යැයි මම සලකමි . ඉහළම ඡන්දය දුන් පිළිතුර මුළුමනින්ම සතුටුදායක යැයි මට නොපෙනේ.
සම්මත ගොනු පුස්තකාල ස්ථානවල "<ගොනු නාමය>" සෙවීම
වත්මන් නාමාවලියෙහි "ගොනු නාමය" සෙවුම් කරන අතර.
ඉතා මැනවින්, ඔබ සම්මත සී පුස්තකාල සඳහා <...> සහ ඔබ ලියන සහ වර්තමාන නාමාවලියෙහි ඇති පුස්තකාල සඳහා "..." භාවිතා කරනු ඇත.
සරල සාමාන්ය රීතිය වන්නේ සම්පාදකයා සමඟ එන ශීර්ෂ ගොනු ඇතුළත් කිරීම සඳහා කෝණික වරහන් භාවිතා කිරීමයි. වෙනත් ඕනෑම ශීර්ෂ ලිපිගොනු ඇතුළත් කිරීමට ද්විත්ව මිල ගණන් භාවිතා කරන්න. බොහෝ සම්පාදකයින් එය කරන්නේ මේ ආකාරයට ය.
1.9 - පෙර සැකසුම් විධානයන් පිළිබඳව ශීර්ෂ ලිපිගොනු වඩාත් විස්තරාත්මකව පැහැදිලි කරයි. ඔබ නවක ක්රමලේඛකයෙක් නම්, ඒ සියල්ල තේරුම් ගැනීමට එම පිටුව ඔබට උදව් වනු ඇත. මම එය මෙතැන් සිට ඉගෙන ගත් අතර, මම එය රැකියාවේදී අනුගමනය කරමි.
#include <filename>
ඔබට C / C ++ පද්ධතියේ හෝ සම්පාදක පුස්තකාලවල ශීර්ෂ ගොනුව භාවිතා කිරීමට අවශ්ය විට භාවිතා වේ. මෙම පුස්තකාල stdio.h, string.h, math.h, ආදිය විය හැකිය.
#include "path-to-file/filename"
ඔබේ ව්යාපෘති ෆෝල්ඩරයේ හෝ වෙනත් තැනක ඇති ඔබේම අභිරුචි ශීර්ෂ ගොනුවක් භාවිතා කිරීමට ඔබට අවශ්ය විටදී භාවිතා වේ.
පෙර සැකසුම් සහ ශීර්ෂකය පිළිබඳ වැඩි විස්තර සඳහා. සී කියවන්න - පෙර සැකසුම් .
#include <filename>
#include "filename"
#include <filename>
අතර එම ශීර්ෂ ගොනුව පද්ධති ශීර්ෂ ගොනු ගබඩා කර ඇති ස්ථානයේ සොයන්න.#include <filename>
.වත්මන් වින්යාසය මත පදනම්ව, 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 (රාමු නාමාවලිය)
සෙවුම් ලැයිස්තුවේ අවසානය.
# ඇතුළත් කිරීමේ ප්රකාශය ලිවීමට ක්රම දෙකක් තිබේ. ඒවා නම්:
#include"filename"
#include<filename>
එක් එක් ස්වරූපයේ අර්ථය වේ
#include"mylib.h"
මෙම විධානය මඟින් mylib.h
වත්මන් ඩිරෙක්ටරියේ ඇති ගොනුව මෙන්ම නිශ්චිත නාමාවලි ලැයිස්තුවක් ද සඳහන් කරනු ඇත.
#include<mylib.h>
මෙම විධානය මඟින් ගොනුව mylib.h
නිශ්චිත නාමාවලි ලැයිස්තුවේ පමණක් සොයනු ඇත.
ඇතුළත් කිරීමේ සෙවුම් මාර්ගය ගොනුව ඇතුළත් කිරීම සඳහා සෙවිය යුතු නාමාවලි ලැයිස්තුවක් මිස වෙන කිසිවක් නොවේ. විවිධ සී සම්පාදකයින් ඔබට සෙවුම් මාර්ගය විවිධ පුරුදු වලින් සැකසීමට ඉඩ දෙයි.