Функцийн аргументууд үндсэн в визуал студи. Үндсэн() функцын аргументууд

Нэмэлт болон нэрлэсэн аргументууд

Нэмэлт аргументууд

C# 4.0 нь аргыг дуудах үед аргументуудыг тодорхойлоход хялбар болгох шинэ функцийг нэвтрүүлсэн. Энэ хэрэгслийг гэж нэрлэдэг нэмэлт аргументуудмөн аргын параметрийн өгөгдмөл утгыг тодорхойлох боломжийг танд олгоно. Хэрэв аргыг дуудах үед параметрт тохирох аргумент заагаагүй бол энэ утгыг анхдагчаар ашиглана. Тиймээс ийм параметрийн аргументыг зааж өгөх шаардлагагүй. Нэмэлт аргументууд нь зарим параметрүүдэд анхдагч аргументуудыг ашигладаг аргуудыг дуудахад хялбар болгодог. Тэдгээрийг мөн аргын хэт ачааллын "богино" хэлбэр болгон ашиглаж болно.

Нэмэлт аргументуудыг нэмэх гол түлхэц нь COM объектуудтай харилцах харилцааг хялбарчлах хэрэгцээ байв. Microsoft-ын хэд хэдэн объектын загварт (жишээлбэл, Майкрософт оффис) функцийг COM объектуудаар дамжуулан хангадаг бөгөөд тэдгээрийн ихэнх нь аль эрт бичигдсэн бөгөөд нэмэлт параметрүүдийг ашиглахад зориулагдсан.

Нэмэлт аргументуудыг ашиглах жишээг доор харуулав.

Системийг ашиглах; System.Collections.Generic ашиглах; System.Linq ашиглах; System.Text ашиглах; namespace ConsoleApplication1 ( анги Програм ( // b болон c аргументууд нь статик int mySum (int a, int b = 5, int c = 10) гэж дуудагдах үед заавал байх ёстой) ( a + b + c; буцаах; ) static void Main() ( int sum1 = mySum(3); int sum2 = mySum(3,12); Console.WriteLine("Sum1 = "+sum1); Console.WriteLine("Sum2 = "+sum2); Console.ReadLine(); ) ) )

Бүх нэмэлт аргументуудыг шаардлагатай аргументуудын баруун талд заавал зааж өгөх ёстой гэдгийг санах нь зүйтэй. Аргуудаас гадна нэмэлт аргументуудыг бүтээгч, индексжүүлэгч, төлөөлөгчдөд ашиглаж болно.

Нэмэлт аргументуудын нэг давуу тал нь программист нарийн төвөгтэй арга болон бүтээгчийн дуудлагуудыг шийдвэрлэхэд хялбар болгодог. Эцсийн эцэст, ихэвчлэн шаардлагатай байдаг аргаас илүү олон параметрүүдийг тохируулах шаардлагатай байдаг. Ийм тохиолдолд эдгээр параметрүүдийн заримыг нэмэлт аргументуудыг болгоомжтой ашиглах замаар нэмэлт болгож болно. Энэ нь та зөвхөн өгөгдсөн зүйлд чухал ач холбогдолтой аргументуудыг дамжуулах хэрэгтэй гэсэн үг юм тодорхой тохиолдол, бусад тохиолдолд шаардлагатай бүх аргумент биш. Энэ арга нь аргыг оновчтой болгож, програмистын үүнтэй харьцах ажлыг хялбарчлах боломжийг бидэнд олгодог.

Нэрлэсэн аргументууд

Дахиад нэг функциональ байдал.NET 4.0 хувилбарыг гаргаснаар C# дээр нэмсэн . нэртэй аргументууд. Таны мэдэж байгаагаар аргументуудыг аргад дамжуулахдаа тэдгээрийн харагдах дараалал нь дүрмээр бол тухайн аргад параметрүүдийг тодорхойлсон дараалалтай тохирч байх ёстой. Өөрөөр хэлбэл аргументын утгыг аргументуудын жагсаалт дахь байрлалаар нь параметрт оноодог.

Нэрлэсэн аргументууд нь энэхүү хязгаарлалтыг даван туулах зорилготой юм. Нэрлэсэн аргумент нь түүний утгыг оноож буй параметрийн нэрийг зааж өгөх боломжийг танд олгоно. Мөн энэ тохиолдолд аргументуудын дараалал хамаагүй болсон. Тиймээс нэрлэсэн аргументууд нь өмнө дурдсан объект эхлүүлэгчидтэй зарим талаараа төстэй боловч тэдгээрээс синтаксээрээ ялгаатай байдаг. Аргументыг нэрээр нь тодорхойлохын тулд дараах синтакс хэлбэрийг ашиглана уу.

параметрийн_нэр: утга

Энд параметрийн_нэрутга дамжуулж буй параметрийн нэрийг заана. Мэдээжийн хэрэг, параметрийн_нэр нь дуудаж буй аргын хүчинтэй параметрийн нэр байх ёстой.

Өгөгдлийг дуудах үед тушаалын мөрөөс програм руу шилжүүлдэг. Ийм өгөгдлийг тушаалын мөрийн аргумент гэж нэрлэдэг. Энэ нь иймэрхүү харагдаж байна, жишээ нь:

./a.out test.txt ls -lt /home/peter/

Энэ нь a.out (одоогийн лавлахаас) болон ls (PATH орчны хувьсагчд заасан ижил сангаас) програмуудыг дууддаг. Тушаалын мөрөөс эхний програм нь нэг үг хүлээн авдаг - test.txt, хоёр дахь нь - хоёр: -lt ба /home/peter/.

Хэрэв програм C хэл дээр бичигдсэн бол түүнийг эхлүүлэх үед удирдлага шууд main() функц руу шилждэг тул түүний хувьсагчийн параметрүүдэд томилогдсон тушаалын мөрийн аргументуудыг тэр хүлээн авдаг.

Одоогоор бид main() функцийг ямар ч параметр авдаггүй, юу ч буцаадаггүй гэж тодорхойлсон. Үнэн хэрэгтээ, C хэл дээр ямар ч функц анхдагчаар (хэрэв өөр зүйл тодорхойлогдоогүй бол) бүхэл тоог буцаадаг. Үүнийг шалгаж болно. Хэрэв та кодыг дараах байдлаар бичвэл:

main() (printf("Сайн уу \n"); буцаах 0 ; )

Дараа нь эмхэтгэлийн явцад ямар ч анхааруулга, алдаа гарахгүй. Хэрэв бид int main() гэж бичвэл ижил зүйл тохиолдох болно. Энэ нь анхдагч функц нь бүхэл тоог буцаадаг болохоос юу ч биш (хүчингүй) гэдгийг баталж байна. Хэдийгээр функцийн буцаах зүйл нь үргэлж "давчлагдсан" байж болно, жишээлбэл, voidmain() эсвэл float main() .

Командын мөрөөс програмыг дуудах үед түүнд хос өгөгдөл үргэлж дамждаг:

  1. бүхэл тоо, дуудагдах үед командын мөрөнд байгаа үгсийн тоог (зайгаар тусгаарлагдсан элементүүд),
  2. мөрийн массивын заагч, энд мөр бүр нь тушаалын мөрөөс нэг үг юм.

Програмын нэрийг өөрөө бас авч үздэг болохыг анхаарна уу. Жишээлбэл, хэрэв дуудлага дараах байдалтай байвал:

./a.12 сэдэв 2

Дараа нь програмын эхний аргумент нь 4 байх ба мөрийн массив нь ("./a.out", "12", "theme", "2") гэж тодорхойлогддог.

Нэр томъёонд анхаарлаа хандуулаарай, зөвхөн хоёр програмын аргумент (тоо ба массив) байдаг, гэхдээ таны хүссэнээр олон тушаалын мөрийн аргументууд байдаг. Тушаалын мөрийн аргументуудыг программын аргументууд (main() функцын аргументууд) болгон "орчуулдаг".
Энэ өгөгдөл (тоо ба заагч) програм руу юу ч дамжуулалгүйгээр зүгээр л нэрээр нь дуудагдсан ч гэсэн дамжуулагдана: ./a.out. Энэ тохиолдолд эхний аргумент нь 1, хоёр дахь аргумент нь зөвхөн нэг мөр (""./a.out") массивыг заадаг.

Өгөгдлийг програм руу дамжуулж байгаа нь үндсэн () функц үүнийг хүлээн авах ёстой гэсэн үг биш юм. Хэрэв main() функцийг параметргүйгээр тодорхойлсон бол командын мөрийн аргументуудад хандах боломжгүй. Хэдийгээр тэднийг илгээхэд юу ч саад болохгүй. Ямар ч алдаа гарахгүй.

Програмд ​​дамжуулсан өгөгдөлд хандахын тулд тэдгээрийг хувьсагчдад хуваарилах ёстой. Аргументууд шууд main() руу шилждэг тул түүний толгой дараах байдлаар харагдах ёстой.
үндсэн (int n, char *arr)

Эхний хувьсагч (n) нь үгийн тоог, хоёр дахь хувьсагч нь мөрийн массивыг заагчийг агуулна. Ихэнхдээ хоёр дахь параметрийг **arr гэж бичдэг. Гэсэн хэдий ч энэ нь адилхан. Мөрний массив нь өөрөө элемент болгон тэмдэгт мөрүүдийг агуулж байдаг гэдгийг санаарай. Мөн функцэд бид заагчийг массивын эхний элемент рүү дамжуулдаг. Бид заагчийг заагч руу дамжуулж байгаа нь харагдаж байна, өөрөөр хэлбэл. **арр.

Дасгал хийх
Ийм програм бичнэ үү:

#оруулна int main(int argc, char ** argv) ( int i; printf ("%d \n", argc); хувьд (i= 0; i< argc; i++ ) puts (argv[ i] ) ; }

Энэ нь дуудагдах үед командын мөрөнд байгаа үгийн тоог болон үг бүрийг хэвлэдэг шинэ мөр. Үүнийг командын мөрийн аргументгүйгээр, аргументтай дууд.

Хөтөлбөрт бид argc болон argv хувьсагчийн параметрүүдийг ашигласан. Зөвхөн ийм нэрийг ашиглах нь заншилтай байдаг ч үнэндээ тэд юу ч байж болно. Таны хөтөлбөрүүд зөвхөн танд төдийгүй бусад програмистуудад илүү ойлгомжтой байхын тулд энэ стандартыг дагаж мөрдөх нь дээр.

Програмд ​​өгөгдөл дамжуулахын практик ач холбогдол

Хэрэв та GNU/Linux командын мөрөнд ажиллаж байсан туршлагатай бол ихэнх командууд свич болон аргументтай байдгийг та мэднэ. Жишээлбэл, сангуудын агуулгыг үзэх, хуулах, зөөх, объектуудыг аргумент болгон зааж өгдөг Файлын системкомандыг гүйцэтгэдэг. Үүнийг хэрэгжүүлэх онцлогийг түлхүүрүүдийг ашиглан тодорхойлно. Жишээлбэл, тушаалд

Cp -r ../les_1 ../les_101

cp нь командын нэр, -r нь шилжүүлэгч, ../les_1 ба ../les_101 нь командын аргументууд юм.

Ерөнхийдөө ихэнх тохиолдолд програмыг эхлүүлэх үед файлын хаягууд болон програмын гүйцэтгэлийн "өөрчлөгч" (эдгээр нь түлхүүрүүд) шилждэг.

Хэрэглэгчийн командын мөрөнд зааж өгсөн файлуудыг бичих, нэмэх зорилгоор нээж, програмыг ажиллуулах явцад хэрэглэгчийн гарнаас оруулсан мэдээллийг тэнд бичдэг (нэмдэг) програм бичье.

#оруулна #оруулна үндсэн (int argc, char ** argv) ( int i, ch; FILE * f[ 5 ] ; хэрэв (argc)< 3 || argc >7) ( тавьдаг "Параметрийн тоо буруу"); буцаах 1; ) хэрэв (strcmp (argv[ 1 ] , "-w" ) != 0 && strcmp (argv[ 1 ] , "-a" ) != 0 ) ( тавьдаг ( "Эхний параметр нь -w эсвэл -a байж болно"); буцах 2; ) хувьд (i= 0; i< argc- 2 ; i++ ) { f[ i] = fopen (argv[ i+ 2 ] , argv[ 1 ] + 1 ) ; if (f[ i] == NULL) { printf ("%s файлыг нээх боломжгүй\n", argv[ i+ 2 ] ); буцах 3 ; ) ) while ((ch = getchar () ) != EOF) for (i= 0 ; i)< argc- 2 ; i++ ) putc (ch, f[ i] ) ; for (i= 0 ; i < argc- 2 ; i++ ) fclose (f[ i] ) ; return 0 ; }

Кодын тайлбар:

  1. Таван файлын заагчийн массив үүссэн. Тиймээс нэг дор таваас илүү файл нээх боломжгүй. Эхний файлын файлын заагч нь f массив элементэд, хоёр дахь нь f-д хадгалагдах болно.
  2. Тушаалын мөрийн аргументуудын тоог шалгана. Тэдгээрийн дор хаяж гурав байх ёстой, учир нь. Эхнийх нь програмын нэр, хоёр дахь нь файлын нээлттэй горим, гурав дахь нь бичих эхний буюу цорын ганц файл юм. Програм нь зөвхөн таван файл нээх боломжийг олгодог тул тушаалын мөрийн аргументуудын нийт тоо долоогоос хэтрэхгүй. Тиймээс хэрэв аргументуудын тоо 3-аас бага эсвэл 7-оос их байвал програм дуусна, учир нь Буцах мэдэгдэл нь дараа нь илүү олон код байгаа ч гэсэн функцийг гарахад хүргэдэг. 0-тэй тэнцүү биш функцийн буцаах утгыг эх процесс нь програм алдаагаар дуусгавар болсон гэсэн мессеж гэж тайлбарлаж болно.
  3. Хоёрдахь командын мөрийн аргументын зөв эсэхийг шалгана. Хэрэв энэ нь "-w" ч биш, "-a" ч биш бол хоёр дахь if бол нөхцөлт илэрхийлэл нь 1 (үнэн)-ийг буцаана. strcmp() функц нь мөрүүдийг харьцуулах боломжийг олгодог бөгөөд хэрэв тэдгээр нь тэнцүү бол 0-ийг буцаана.
  4. IN for гогцоо argv массивын гурав дахь элементээр эхэлсэн файлууд нь заасан хаягууд дээр нээгддэг. Ийм учраас argv массивын гурав дахь хэсгээс эхлэн элементүүдийг авахын тулд i дээр 2-ыг нэмдэг. argc-2 илэрхийлэл нь дамжуулагдсан файлын нэрийн тоог заана; учир нь argc нь тушаалын мөрийн аргументуудын нийт тоог хадгалдаг бөгөөд эхний хоёр нь файлын нэр биш юм.
  5. argv+1 илэрхийлэл нь "w" (эсвэл "a") дэд мөрийг "-w" (эсвэл "-a") мөрөөс "тайрах" боломжийг олгодог. argv нь үндсэндээ мөрийн эхний элементийн заагч юм. Заагч дээр нэгийг нэмснээр бид үүнийг массивын дараагийн элемент рүү шилжүүлнэ.
  6. Хэрэв файлыг нээх боломжгүй бол fopen() функц нь NULL буцаана. Энэ тохиолдолд програм дуусна.
  7. Хэрэглэгчийн гараас оруулсан тэмдэгт бүр бүх нээлттэй файлд бичигдэнэ.
  8. Төгсгөлд нь файлууд хаалттай байна.

C++ програмчлалын хэл дээр консол програмыг автоматаар үүсгэх үед үүнтэй маш төстэй үндсэн функц автоматаар үүсгэгддэг:

int main(int argc, char * argv)
{…}

Функцийн толгой хэсэгт гарын үсэг агуулагдана үндсэн функц argc болон argv аргументуудтай main() .
Хэрэв програмыг командын мөрөөр ажиллуулж байгаа бол ямар ч мэдээллийг энэ програм руу шилжүүлэх боломжтой. Үүний тулд argc болон argv командын мөрийн аргументууд байдаг.
argc параметр нь int төрлийн бөгөөд үндсэн функцэд дамжуулагдсан параметрийн тоог агуулдаг. Түүнээс гадна, програмын нэрийг эхний параметр гэж үздэг тул үндсэн функцэд мэдээлэл дамжуулахгүй байсан ч argc үргэлж 1-ээс багагүй байна.
argv параметр нь мөрүүд рүү чиглэсэн заагчийн массив юм. Зөвхөн мөрийн төрлийн өгөгдлийг командын мөрөөр дамжуулж болно.

Програмыг тушаалаар эхлүүлэх үед Windows шугамТа түүн рүү зарим мэдээллийг илгээж болно. Энэ тохиолдолд тушаалын мөр дараах байдлаар харагдах болно.
Drive:\path\name.exe аргумент1 аргумент2 ...

Тушаалын мөрийн аргументуудыг нэг буюу хэд хэдэн зайгаар тусгаарлана.

argv аргумент нь бүрэн хангасан програмын нэрийг агуулна:

#оруулна
namespace std ашиглах;

cout<< argv << endl;

буцаах 0;
}

Гүйцэтгэлийн үр дүн

Жишээ нь: хоёр бүхэл тооны үржвэрийг тооцоолох
Програм нь эндээс StrToInt() бүхэл тоонд хөрвүүлэх функцийг ашигладаг.

#оруулна
namespace std ашиглах;
int StrToInt(char*s) (…)
int main(int argc, char * argv) (

Int a = 0, b=0;

Хэрэв (argc > 1)

a = StrToInt(argv);

Хэрэв (argc > 2)

b = StrToInt(argv);

cout<< a <<«*» << b << «= « << a*b << endl;

буцаах 0;
}

гэж программыг эхлүүлсэн

Гүйцэтгэлийн үр дүн

Командын мөрийн аргументуудтай програмыг дибаг хийх

Програмыг дибаг хийх үед командын мөрийн аргументуудыг дамжуулахын тулд та цэс рүү хандах хэрэгтэй Үл хөдлөх хөрөнгөтөсөл.


Таб дээр Тохиргооны шинж чанарууд -> Дибаг хийхсонгох Тушаалын аргументуудмөн тэдгээрийн үнэ цэнийг тогтооно.

Програмыг дибаг хийх горимд ажиллуулах үед оруулсан аргументуудыг программ командын мөрийн аргумент болгон авч үзэх болно.


Заримдаа програмыг эхлүүлэхдээ түүнд зарим мэдээллийг дамжуулах нь ашигтай байдаг. Ерөнхийдөө энэ мэдээллийг үндсэн() функц руу командын мөрийн аргументуудаар дамжуулдаг. Тушаалын мөрийн аргументгэдэг нь үйлдлийн системийн командын мөрөнд программын нэрийн дараа орох мэдээлэл юм. Жишээлбэл, програмыг эмхэтгэж эхлэхийн тулд командын мөрөнд дараах зүйлийг бичих хэрэгтэй.

cc хөтөлбөрийн_нэр

хөтөлбөрийн_нэрнь таны эмхэтгэх гэж буй програмын нэрийг зааж өгөх командын мөрийн аргумент юм.

Тушаалын мөрийн аргументуудыг хүлээн авахын тулд хоёр тусгай суурилуулсан аргументыг ашигладаг: argc болон argv . argc параметр нь командын мөрөн дээрх аргументуудын тоог агуулдаг ба бүхэл тоо бөгөөд эхний аргумент нь программын нэр учраас үргэлж 1-ээс багагүй байна. Мөн argv параметр нь тэмдэгт мөрүүдийн массивын заагч юм. Энэ массив дахь элемент бүр нь командын мөрийн аргументыг заадаг. Бүх командын мөрийн аргументууд нь мөрүүд тул ямар ч тоог хүссэн хоёртын формат руу хөрвүүлэхийг программыг боловсруулахдаа өгөх ёстой.

Тушаалын мөрийн аргументыг ашиглах энгийн жишээ энд байна. Дэлгэц дээр Hello гэсэн үг болон таны нэрийг харуулах бөгөөд үүнийг командын мөрийн аргумент болгон зааж өгөх ёстой.

#оруулна #оруулна int main(int argc, char *argv) ( if(argc!=2) ( printf("Та нэрээ оруулахаа мартсан байна.\n"); exit(1); ) printf("Сайн уу %s", argv) ; 0 буцаана;)

Хэрэв та энэ програмын нэрийг (нэр) гэж нэрлэсэн бөгөөд таны нэр Том бол програмыг ажиллуулахын тулд командын мөрөнд Том нэрийг оруулна уу. Програмыг ажиллуулсны үр дүнд дэлгэцэн дээр Сайн уу, Том гэсэн мессеж гарч ирнэ.

Олон орчинд командын мөрийн бүх аргументууд хоорондоо зай эсвэл табаар тусгаарлагдсан байх ёстой. Таслал, цэг таслал, ижил төстэй тэмдэгтүүдийг тусгаарлагч гэж үзэхгүй. Жишээлбэл,

Spot-г ажиллуул, гүй

нь гурван тэмдэгтийн мөрөөс бүрдэнэ, while

Эрик, Рик, Фред

нь нэг тэмдэгт мөр - таслалыг ерөнхийд нь зааглагч гэж үздэггүй.

Хэрэв мөрөнд хоосон зай байгаа бол зарим орчинд олон аргумент үүсгэхээс сэргийлэхийн тулд мөрийг давхар хашилтанд хийж болно. Үүний үр дүнд бүх мөрийг нэг аргумент гэж үзэх болно. Үйлдлийн систем дээрээ командын мөрийн сонголтуудыг хэрхэн тохируулдаг талаар илүү ихийг мэдэхийг хүсвэл тухайн системийн баримт бичгийг үзнэ үү.

argv-г зөв зарлах нь маш чухал. Тэд үүнийг ихэвчлэн хэрхэн хийдэг вэ:

Char *argv;

Хоосон дөрвөлжин хаалт нь массив нь тодорхойгүй урттай болохыг харуулж байна. Та одоо argv массивыг индексжүүлснээр бие даасан аргументуудад хандах боломжтой. Жишээлбэл, argv нь үргэлж програмын нэр болох эхний тэмдэгт мөрийг заадаг; argv нь эхний аргументыг заадаг гэх мэт.

Тушаалын мөрийн аргументуудыг ашиглах өөр нэг жижиг жишээ бол доорхи тоолох програм юм. Энэ программ нь зарим утгыг (тушаалын мөрөнд заасан) доош тоолж, 0-д хүрэх үед дохио өгдөг. Анхны утгыг агуулсан эхний аргументыг atoi () стандарт функцийг ашиглан бүхэл тоо болгон хувиргадаг гэдгийг анхаарна уу. Хэрэв командын мөрийн хоёр дахь аргумент (мөн хэрэв бид програмын нэрийг гурав дахь аргумент болгон авбал) "дэлгэц" мөр (дэлгэц рүү гарга) байвал тооллогын үр дүн (урвуу дарааллаар) гарч ирнэ. дэлгэц дээр.

/* Буцааж тоолох програм. */ # орно #оруулна #оруулна #оруулна int main(int argc, char *argv) ( int disp, тоолох; if(argc)<2) { printf("В командной строке необходимо ввести число, с которого\n"); printf("начинается отсчет. Попробуйте снова.\n"); exit(1); } if(argc==3 && !strcmp(argv, "display")) disp = 1; else disp = 0; for(count=atoi(argv); count; --count) if(disp) printf("%d\n", count); putchar("\a"); /* здесь подается звуковой сигнал */ printf("Счет закончен"); return 0; }

Хэрэв командын мөрийн аргументуудыг заагаагүй бол алдааны мэдэгдэл гарч ирнэ гэдгийг анхаарна уу. Тушаалын мөрийн аргументтай програмууд нь ихэвчлэн дараах зүйлийг хийдэг: хэрэглэгч шаардлагатай мэдээллийг оруулахгүйгээр эдгээр програмуудыг ажиллуулах үед аргументуудыг хэрхэн зөв зааж өгөх заавар гарч ирдэг.

Тушаалын мөрийн аргументуудын нэг тэмдэгтэд хандахын тулд argv-д хоёр дахь индексийг оруулна уу. Жишээлбэл, дараах программ нь дуудсан бүх аргументуудыг тэмдэгт тус бүрээр нь хэвлэдэг.

#оруулна int main(int argc, char *argv) ( int t, i; for(t=0; t)

argv-ийн эхний индекс нь мөрөнд хандах боломжийг олгодог бөгөөд хоёр дахь индекс нь түүний бие даасан тэмдэгтүүдэд хандах боломжийг олгодог гэдгийг санаарай.

Ихэвчлэн argc болон argv нь програмыг эхлүүлэх үед хэрэг болох анхны командуудыг дамжуулахад ашиглагддаг. Жишээлбэл, командын мөрийн аргументууд нь ихэвчлэн файлын нэр, сонголт эсвэл өөр үйлдэл зэрэг мэдээллийг зааж өгдөг. Тушаалын мөрийн аргументуудыг ашиглах нь таны програмыг "мэргэжлийн дүр төрх" болгож, багц файлуудад ашиглахад хялбар болгодог.

argc болон argv нэрс нь уламжлалт боловч шаардлагагүй. Та эдгээр хоёр параметрийг main() функцэд хүссэнээрээ нэрлэж болно. Мөн зарим хөрвүүлэгчид main()-д зориулсан -additional аргументуудыг дэмжиж болох тул хөрвүүлэгчийнхээ баримт бичгийг шалгахаа мартуузай.

Програмд ​​командын мөрийн параметр шаардлагагүй тохиолдолд main() функцийг ямар ч параметргүй гэж шууд зарлах нь түгээмэл байдаг. Энэ тохиолдолд void гэсэн түлхүүр үгийг энэ функцийн параметрийн жагсаалтад ашиглана.

Borland C++ нь гурван үндсэн() аргументыг дэмждэг. Эхний хоёр нь уламжлалт argc болон argv юм. Эдгээр нь ANSI C стандартаар тодорхойлогдсон main() функцийн цорын ганц аргументууд бөгөөд тэдгээр нь командын мөрийн аргументуудыг програм руу дамжуулах боломжийг олгодог. Тушаалын мөрийн аргументууд нь үйлдлийн системийн командын мөрөнд программын нэрийг дагаж байгаа мэдээлэл юм. Жишээлбэл, Borland inline хөрвүүлэгчээр програмыг эмхэтгэх үед bcc гэж ихэвчлэн бичдэг хөтөлбөрийн_нэр

Хаана хөтөлбөрийн_нэрэмхэтгэгдэх программ юм. Програмын нэрийг аргумент болгон хөрвүүлэгч рүү дамжуулдаг.

argc параметр нь командын мөрийн аргументуудын тоог агуулдаг бөгөөд бүхэл тоо юм. Хөтөлбөрийн нэр нь эхний аргумент байх шаардлага хангасан тул үргэлж 1-ээс багагүй байна. argv параметр нь тэмдэгт заагчийн массивын заагч юм. Энэ массивын элемент бүр нь командын мөрийн аргументыг заадаг. Бүх командын мөрийн аргументууд нь мөр юм. Бүх тоог програм нь дотоод формат руу хөрвүүлдэг. Дараах программ нь "Сайн уу" гэж, дараа нь програмын нэрийн ард бичигдсэн бол хэрэглэгчийн нэрийг хэвлэнэ.

#оруулна

{
хэрэв(argc!=2)
{
printf("Та нэрээ бичихээ мартсан байна\n");
буцаах 1;
}
printf("Сайн уу %s", argv);
буцаах 0;
}

Хэрэв та энэ програмын нэрийг дуудаж, хэрэглэгчийн нэр нь Сергей бол програмыг ажиллуулахын тулд та дараахийг бичнэ үү.
Сергей гэдэг.
Хөтөлбөрийн үр дүнд гарч ирэх болно:
Сайн уу Сергей.

Тушаалын мөрийн аргументууд нь хоосон зай эсвэл табаар тусгаарлагдсан байх ёстой. Таслал, цэг таслал, ижил төстэй тэмдэгтүүдийг тусгаарлагч гэж үзэхгүй. Жишээлбэл:

Гурван мөрөөс бүрдэнэ, while

Херб, Рик, Фред

Энэ бол нэг мөр - таслал нь зааглагч биш юм.

Хэрэв та хоосон зай эсвэл таб агуулсан мөрийг нэг аргумент болгон дамжуулахыг хүсвэл давхар хашилтад бичнэ үү. Жишээлбэл, энэ бол нэг аргумент юм:

"энэ бол тест"

argv-г зөв зарлах нь чухал. Хамгийн түгээмэл арга бол:

Хоосон хаалт нь массив нь тогтмол урттай биш гэдгийг харуулж байна. Та argv индексжүүлэлтийг ашиглан бие даасан элементүүдэд хандах боломжтой. Жишээлбэл, argv нь үргэлж програмын нэрийг агуулсан эхний мөрийг заадаг. argv дараагийн мөрийг заана гэх мэт.

Командын мөрийн аргументуудыг ашиглах жижиг жишээг доор харуулав. Энэ нь командын мөрөнд заасан утгаас доош тоолж, тэг хүрэх үед дохио өгдөг. Эхний аргумент нь стандарт atoi() функцийг ашиглан бүхэл тоо руу хөрвүүлсэн тоог агуулж байгааг анхаарна уу. Хэрэв "дэлгэц" гэсэн тэмдэгт хоёр дахь аргумент байгаа бол тоолуур өөрөө дэлгэцэн дээр гарч ирнэ.

/* тоолох програм */

#оруулна
#оруулна
#оруулна
int main(int argc, char *argv)
{
int disp, тоолох;
хэрэв (argc<2)
{
printf("Та тооллын уртыг оруулах ёстой\n");
printf("командын мөрөнд. Дахин оролдоно уу.\n");
буцаах 1;
}
if (argc==3 && !strcmp(argv,"дэлгэц")) disp = 1;
өөр disp = 0;
for(count=atoi(argv); count; -count)
if (disp) printf("%d", тоолох);
printf("%c", "\a"); /* ихэнх компьютер дээр энэ нь дуудлага юм */
буцаах 0;
}

Хэрэв аргумент заагаагүй бол алдааны мэдэгдэл гарч ирнэ гэдгийг анхаарна уу. Энэ нь зөв мэдээлэлгүйгээр програмыг ажиллуулах оролдлого хийсэн тохиолдолд зааварчилгаа өгөхийн тулд командын мөрийн аргументуудыг ашигладаг програмуудын хамгийн ердийн зүйл юм.

Тусдаа командын мөрийн тэмдэгтүүдэд хандахын тулд argv-д хоёр дахь индекс нэмнэ үү. Жишээлбэл, дараах программ нь дуудсан бүх аргументуудыг нэг тэмдэгтээр хэвлэдэг:

#оруулна
int main(int argc, char *argv)
{
int t, i;
for(t=0; t {
i = 0;
while(argv[t][i])
{
printf("%c", argv[t][i]);
}
printf(");
}
буцаах 0;
}

Эхний индекс нь мөрт хандах, хоёр дахь нь мөрийн тэмдэгтэд хандах зориулалттай гэдгийг санах нь зүйтэй.

Ихэвчлэн argc болон argv нь эх командыг авахад ашиглагддаг. Онолын хувьд та 32767 хүртэл аргументтай байж болох ч ихэнх үйлдлийн системүүд үүнд ойртохыг ч зөвшөөрдөггүй. Ихэвчлэн эдгээр аргументуудыг файлын нэр эсвэл сонголтыг тодорхойлоход ашигладаг. Тушаалын мөрийн аргументуудыг ашиглах нь програмыг мэргэжлийн харагдуулж, багц файлд програмыг ашиглах боломжийг олгодог.

Хэрэв та Borland C++-д нийлүүлсэн WILDARGS.OBJ файлыг оруулсан бол *.EXE төрлийн аргументуудад орлуулагч тэмдэгтүүдийг ашиглаж болно. (Borland C++ загваруудыг автоматаар зохицуулж, үүний дагуу argc-г нэмэгдүүлнэ.) Жишээлбэл, хэрэв та WILDARGS.OBJ-г дараах програмд ​​холбовол командын мөрөнд заасан файлын нэртэй хэдэн файл тохирохыг хэвлэх болно:

/* Энэ программыг WILDARGS.OBJ-тэй холбох */

#оруулна
int main(int argc, char *argv)
{
int i бүртгүүлэх;
printf("%d файл заасан нэртэй таарч байна\n", argc-1);
printf("Тэд бол: ");
for(i=1; i printf("%s", argv[i]);
буцаах 0;
}

Хэрэв бид энэ програмыг WA гэж нэрлэвэл дараах байдлаар ажиллуулбал EXE өргөтгөлтэй файлуудын тоо, эдгээр файлуудын нэрсийн жагсаалтыг авна.

Borland C++ нь argc болон argv-ээс гадна гурав дахь командын мөрийн аргументыг -env өгдөг. env параметр нь программыг үйлдлийн системийн орчны мэдээлэлд хандах боломжийг олгодог. env параметр нь argc болон argv-ийг дагаж мөрдөх ёстой бөгөөд дараах байдлаар зарлагдана.

Таны харж байгаагаар env нь argv-тэй адил зарлагдсан байна. Яг л argv шиг энэ нь мөрийн массивын заагч юм. Мөр бүр нь үйлдлийн системээр тодорхойлогдсон орчны мөр юм. env параметр нь argc параметртэй харьцуулах зүйлгүй бөгөөд энэ нь орчны хэдэн мөр байгааг харуулдаг. Үүний оронд орчны сүүлчийн мөр нь хоосон байна. Дараах програм нь үйлдлийн системд одоогоор тодорхойлогдсон орчны бүх мөрийг хэвлэнэ.

/* энэ программ нь орчны бүх мөрийг хэвлэдэг */

#оруулна
int main(int argc, char *argv, char *env)
{
int t;
for(t=0; env[t]/ t++)
printf("%s\n", env[t]);
буцаах 0;
}

Хэдийгээр argc болон argv нь програмд ​​ашиглагддаггүй ч параметрийн жагсаалтад байх ёстой гэдгийг анхаарна уу. C параметрийн нэрийг мэдэхгүй. Харин тэдгээрийн хэрэглээ нь параметрүүдийг зарлах дарааллаар тодорхойлогддог. Үнэн хэрэгтээ та параметрийг хүссэнээрээ дуудаж болно. argc, argv, env нь уламжлалт нэр учраас програмыг уншиж буй хүн бүр эдгээр нь main() функцийн аргументууд гэдгийг шууд ойлгохын тулд тэдгээрийг үргэлжлүүлэн ашиглах нь дээр.

Програмын хувьд ердийн даалгавар бол орчны мөрөнд тодорхойлсон утгыг олох явдал юм. Жишээлбэл, PATH мөрийн агуулга нь програмуудад хайлтын замыг ашиглах боломжийг олгодог. Дараах програм нь стандарт хайлтын замыг зарласан мөрүүдийг хэрхэн олохыг харуулж байна. Энэ нь стандарт номын сангийн strstr() функцийг ашигладаг бөгөөд энэ нь дараах загвартай:

Char *strstr(const char *str1, const char *str2);

strstr() функц нь str1-ээр заасан тэмдэгт мөрийг str2-ээр заасан мөрт хайдаг. Хэрэв ийм мөр олдвол эхний байрлал руу заагчийг буцаана. Хэрэв тохирох зүйл олдохгүй бол функц NULL утгыг буцаана.

/* программ нь PATH агуулсан мөрийг орчны мөрүүдийг хайдаг */

#оруулна
#оруулна
int main (int argc, char *argv, char *env)
{
int t;
for(t=0; env[t]; t++)
{
if(strstr(env[t], "PATH"))
printf("%s\n", env[t]);
}
буцаах 0;
}



Ачааж байна...
Топ