Argc và Argv C++

Argc Va Argv C



Khi viết chương trình C++, tất cả chúng ta đều biết rằng hàm “main()” được coi là rất quan trọng vì chúng ta không thể biên dịch chương trình của mình nếu thiếu phần triển khai của hàm này. Cũng giống như tất cả các hàm khác trong C++, hàm “main()” cũng có khả năng chấp nhận các đối số. Tuy nhiên, sự khác biệt giữa việc truyền đối số cho hàm “main()” với việc truyền đối số cho các hàm khác là bạn phải truyền đối số qua dòng lệnh trong trường hợp trước. Nó là như vậy bởi vì bản thân hàm “main()” là hàm điều khiển, đó là lý do tại sao không có hàm nào khác có khả năng gọi nó và truyền đối số cho nó. Trong bài viết này, chúng ta sẽ thảo luận về hai tham số của hàm “main()”, tức là “argc” và “argv” trong C++ trên Ubuntu 20.04.

Argc và Argv trong C++ trong Ubuntu 20.04 là gì?

Tham số “argc” đề cập đến số lượng đối số, trong khi “argv” đề cập đến một mảng ký tự chứa tất cả các đối số được truyền cho hàm “main()” thông qua dòng lệnh tại thời điểm thực thi chương trình trong C++. Ở đây, bạn cần biết rằng “argc” luôn hiển thị số lượng đối số là “1” nhiều hơn số lượng thực tế của các đối số được truyền. Điều này là như vậy vì tên của tệp đối tượng cũng được tính là đối số dòng lệnh. Bạn có thể chuyển các đối số dòng lệnh thuộc bất kỳ loại dữ liệu nào cho hàm “main()”. Tất cả những gì bạn cần quan tâm là các tham số này được đề cập trong nguyên mẫu của hàm “main()” nếu bạn muốn truy cập chúng bên trong nó. Tuy nhiên, chức năng “main()” có thể hoạt động hoàn toàn tốt nếu không có hai tham số này. Điều này sẽ được thảo luận trong phần sau của bài viết này, sau đó chúng ta sẽ tiến hành sử dụng hai tham số này trong C++ trên Ubuntu 20.04.

Chức năng chính không có Argc và Argv trong C++:

Trước hết, chúng tôi muốn nói với bạn rằng hàm “main()” trong C++ có thể hoạt động hoàn toàn tốt ngay cả khi không sử dụng các tham số “argc” và “argv”. Điều này được mô tả trong chương trình C++ sau:









Chúng ta có một hàm “main()” đơn giản trong chương trình này mà không có bất kỳ đối số nào. Trong chức năng “main()” này, chúng tôi chỉ in một thông báo mẫu trên thiết bị đầu cuối.



Sau đó, chúng tôi đã biên dịch chương trình C++ cơ bản này với sự trợ giúp của lệnh được đề cập bên dưới:





$ g++ CommandLine.cpp –o CommandLine

Sau đó, chúng tôi đã thực hiện chương trình này bằng cách chạy lệnh sau:



$ . / Dòng lệnh

Đầu ra của chương trình C++ đơn giản này được hiển thị trong hình bên dưới:

Chạy chương trình C++ mà không cần truyền bất kỳ đối số dòng lệnh nào:

Bây giờ, chúng ta sẽ thử triển khai một chương trình C++ trong đó hàm “main()” có khả năng chấp nhận các tham số “argc” và “argv”, tuy nhiên, chúng ta sẽ không chuyển các đối số này cho nó khi thực hiện chương trình này từ phần cuối. Chương trình C ++ đã nói được hiển thị trong hình ảnh sau:

Trong chương trình C++ này, hàm “main()” của chúng ta có khả năng chấp nhận các tham số “argc” và “argv”. Tuy nhiên, vì chúng tôi không có ý định chuyển các giá trị này cho nó trong ví dụ cụ thể này, nên chúng tôi đã cố ý cân bằng “argc” thành “0” để khi chúng tôi cố gắng in giá trị của nó, nó sẽ không trả về bất kỳ giá trị rác nào. Sau đó, chúng tôi đã in giá trị của tham số “argc” trên thiết bị đầu cuối. Sau đó, chúng tôi đã sử dụng vòng lặp “for” để in tất cả các đối số dòng lệnh trên thiết bị đầu cuối.

Chúng tôi đã biên dịch mã này bằng lệnh hiển thị bên dưới:

$ g++ CommandLine.cpp –o CommandLine

Sau đó, khi chúng tôi muốn chạy chương trình này, chúng tôi đã không chuyển bất kỳ đối số dòng lệnh nào cho nó, như bạn có thể thấy từ lệnh sau:

$ . / Dòng lệnh

Từ đầu ra của chương trình C++ này được hiển thị trong hình ảnh bên dưới, bạn có thể thấy rằng không có đối số dòng lệnh nào được truyền cho hàm này vì số đối số là “0” và không có đối số nào được in trên thiết bị đầu cuối vì mảng ký tự “ argv” cũng trống.

Chạy chương trình C++ với các đối số dòng lệnh kiểu số nguyên:

Bây giờ, chúng ta muốn chạy cùng một chương trình C++ bằng cách truyền các đối số dòng lệnh kiểu số nguyên cho nó. Tuy nhiên, trước khi làm điều đó, chúng tôi sẽ sửa đổi một chút mã của mình như trong hình sau:

Sửa đổi duy nhất mà chúng tôi đã thực hiện đối với mã này là chúng tôi đã xóa dòng “argc=0” khỏi nó vì trong ví dụ này, chúng tôi muốn in số thực của các đối số dòng lệnh được truyền cho chương trình này khi chạy. Phần còn lại của mã hoàn toàn giống như được sử dụng trong phần trên.

Chúng tôi đã biên dịch lại mã đã sửa đổi của mình bằng lệnh hiển thị bên dưới:

$ g++ CommandLine.cpp –o CommandLine

Sau đó, để thực thi mã này, chúng tôi đã sử dụng các đối số dòng lệnh sau:

$ . / Dòng lệnh 1 hai 3

Điều đó có nghĩa là chúng ta đã chuyển ba đối số dòng lệnh kiểu số nguyên cho chương trình C++ này trong khi chạy nó, tức là 1, 2 và 3.

Đầu ra của chương trình sửa đổi này được hiển thị trong hình bên dưới:

Tổng số đối số được chương trình C++ này trả về là “4”, tức là ba đối số nguyên mà chúng ta đã truyền vào + tên của tệp đối tượng. Chương trình này cũng in các phần tử của mảng ký tự “argv” trên thiết bị đầu cuối, tức là, các đối số kiểu số nguyên thực tế đã được chuyển đến chương trình này tại thời điểm thực thi, cùng với tên của chương trình.

Chạy chương trình C++ với Đối số dòng lệnh kiểu ký tự:

Bây giờ, chúng tôi muốn xem liệu cùng một chương trình C++ có hoạt động tốt hay không khi chúng tôi cố gắng thực thi nó bằng cách truyền các đối số dòng lệnh kiểu ký tự cho nó. Vì vậy, chúng tôi không cần phải sửa đổi nó thêm nữa. Chúng ta chỉ phải thực thi nó với các đối số dòng lệnh kiểu ký tự như sau:

$ . / Dòng lệnh a b c d e f

Điều đó có nghĩa là chúng ta đã chuyển các đối số dòng lệnh gồm sáu ký tự cho chương trình C++ này trong khi chạy nó, tức là a, b, c, d, e và f.

Đầu ra được tạo ra do chuyển các đối số dòng lệnh kiểu ký tự cho cùng một chương trình C++ được hiển thị bên dưới:

Tổng số đối số được chương trình C++ này trả về là “7”, tức là các đối số gồm sáu ký tự mà chúng ta đã truyền + tên của tệp đối tượng. Chương trình này cũng in các phần tử của mảng ký tự “argv” trên thiết bị đầu cuối, tức là, các đối số kiểu ký tự thực được truyền cho chương trình này tại thời điểm thực thi, cùng với tên của chương trình.

Sự kết luận:

Bài viết này nhằm mục đích thảo luận về hai đối số dòng lệnh, còn được gọi là tham số của hàm “main()”, tức là “argc” và “argv”. Chúng tôi đã nói về tầm quan trọng của hai tham số này bằng cách nêu cách sử dụng của chúng. Sau đó, chúng tôi đã chia sẻ với bạn một số ví dụ mô tả cách sử dụng “argc” và “argv” trong C++ trên Ubuntu 20.04. Ngoài ra, chúng tôi cũng làm rõ rằng ngay cả khi không sử dụng các tham số này, hàm “main()” vẫn có thể hoạt động hoàn hảo. Do đó, một khi bạn đọc bài viết này, bạn sẽ hiểu rất rõ cách sử dụng của “argc” và “argv” trong C++.