Tôi thường sử dụng argv[0]
, hoặc basename(argv[0])
nếu có thể. Từ POV của người dùng, tôi nghĩ rằng nếu họ đổi tên hoặc liên kết cứng một tệp thực thi (hoặc ai đó làm điều đó cho họ), thì họ muốn thư từ nó xuất hiện dưới tên họ đang sử dụng, không phải dưới một tên khác được biên dịch như, mà họ có thể hoặc có thể không biết. Tương tự, nếu bạn phát hiện trong tương lai bạn muốn biên dịch chương trình của bạn dưới các tên khác nhau với các tùy chọn khác nhau, để đưa ra các phiên bản khác nhau, bạn có muốn quấn #ifndef
xung quanh #define
và đảm bảo rằng nó được xác định thông qua dòng lệnh trình biên dịch : -DPROGRAM_NAME=myprog_demo
, hoặc bạn chỉ muốn làm điều đó và nó hoạt động?
Trường hợp ngoại lệ có thể là nếu hướng dẫn sử dụng của bạn là một trích xuất từ trang manpage hoặc tài liệu khác, thì có thể bạn muốn gắn cứng tên chương trình vào đó. Nhưng sau đó bạn có thể sẽ không sử dụng #define
.
Triển khai không cần cung cấp argv[0]
, tuy nhiên, để thực hành di động tốt nhất cũng có thể xử lý trường hợp đó. Sau đó, một lần nữa, nếu hệ thống của bạn không cung cấp nó thì có lẽ người dùng cũng không thực sự thấy các tin nhắn trên bất kỳ loại thiết bị đầu cuối nào.
Bằng cách này:
#define PROGRAM_NAME "myprog"
puts("this is " PROGRAM_NAME);
Nguồn
2010-06-11 18:01:04
Nếu bạn muốn có hằng số, hãy sử dụng hằng số (tức là ở cấp độ toàn cầu, 'const char * const PROGRAM_NAME =" myprog ";'). Làm như vậy sẽ đảm bảo rằng chuỗi chỉ được lưu trữ một lần trong bộ nhớ. – mk12