Trực tuyến Bao gồm một tệp nguồn C vào một tệp khác? Dịch Bao gồm một tập tin nguồn C vào một tập tin khác? Tập tin nguồn c

Gần đây tôi đã được hỏi một câu hỏi tương tự bởi một đồng nghiệp đang bắt đầu lập trình bằng C. Và tôi nghĩ đây là cơ hội tốt để chia sẻ hiểu biết của mình về vấn đề này. Bởi vì ngay cả những lập trình viên giàu kinh nghiệm không phải lúc nào cũng có quan điểm tương tự về vấn đề này.

Một phần đây là vấn đề về sở thích, vì vậy nếu có ai quan tâm đến cách tôi làm, xin chào mừng bạn đến với con mèo.

Mặc dù thực tế là “toàn bộ sự thật” về các tệp h được chứa trong phần tương ứng của mô tả về bộ tiền xử lý gcc, tôi sẽ cho phép mình một số giải thích và minh họa.

Vì vậy, theo nghĩa đen, tệp tiêu đề (tệp h) là tệp chứa các khai báo C và định nghĩa macro nhằm mục đích sử dụng trong một số tệp nguồn (tệp c). Hãy minh họa điều này.

Có thể dễ dàng nhận thấy rằng chức năng 1 và 2, cũng như macro 2, đều được đề cập trong cả hai tệp. Và vì việc bao gồm các tệp tiêu đề tạo ra kết quả tương tự như việc sao chép nội dung vào từng tệp C, nên chúng ta có thể thực hiện các thao tác sau:

Vì vậy, chúng tôi chỉ cần trích xuất phần chung của hai tệp và đặt nó vào tệp tiêu đề.
Nhưng tập tin tiêu đề có phải là một giao diện trong trường hợp này không?

  • Nếu chúng ta cần sử dụng chức năng mà chức năng 1 và 2 triển khai ở nơi khác thì Có
  • Nếu macro 2 chỉ nhằm mục đích sử dụng trong các tệp Unit1.c và Unit2.c thì nó không có chỗ trong tệp giao diện
Hơn nữa, chúng ta có thực sự cần phải có hai tệp C để triển khai giao diện được xác định trong tệp tiêu đề không? Hay một cái là đủ?
Câu trả lời cho câu hỏi này phụ thuộc vào chi tiết triển khai của các chức năng giao diện và nơi chúng được triển khai. Ví dụ: nếu bạn tạo sơ đồ chi tiết hơn, bạn có thể tưởng tượng một kịch bản trong đó các chức năng giao diện được triển khai trong các tệp khác nhau:


Tùy chọn triển khai này dẫn đến tính mạch lạc mã cao, khả năng kiểm tra thấp và khó sử dụng lại các mô-đun đó.
Để tránh những khó khăn như vậy, tôi luôn coi tệp C và tệp tiêu đề là một mô-đun. Trong đó,
  • Tệp tiêu đề chỉ chứa các khai báo về hàm, loại, macro là một phần của giao diện của mô-đun này.
  • Ngược lại, tệp C phải chứa phần triển khai tất cả các hàm được khai báo trong tệp h, cũng như các kiểu, macro và hàm riêng tư cần thiết để triển khai giao diện.
Vì vậy, nếu tôi triển khai mã tương ứng với sơ đồ trên, tôi sẽ cố gắng đạt được những điều sau (các phần cuối _с và _h trong tên tệp đã được thêm vào do không thể sử dụng dấu chấm trong công cụ mà tôi đã sử dụng để tạo các sơ đồ):


Sơ đồ cho thấy trên thực tế chúng ta đang xử lý hai mô-đun độc lập, mỗi mô-đun có giao diện riêng dưới dạng tệp tiêu đề. Điều này cho phép chỉ sử dụng giao diện thực sự cần thiết trong trường hợp cụ thể này. Hơn nữa, các mô-đun này có thể được kiểm tra độc lập với nhau.
Người đọc có thể nhận thấy rằng macro 2 từ tệp tiêu đề lại được trả về dưới dạng bản sao trong cả hai tệp C. Tất nhiên, điều này không thuận tiện lắm để duy trì. Nhưng làm phần macro này của giao diện là không đúng.
Trong những trường hợp như vậy, tôi thích tạo một tệp tiêu đề riêng chứa các loại và macro cần thiết cho một số tệp C.

Tôi hy vọng tôi có thể xác định được những thực thể cần được đặt trong tệp tiêu đề. Ngoài ra, còn thể hiện sự khác biệt giữa các giao diện và tệp chứa các khai báo và macro mà một số tệp C yêu cầu.

Cảm ơn bạn đã quan tâm đến tài liệu.



Tùy thuộc vào môi trường xây dựng của bạn (bạn sẽ không chỉ định), bạn có thể thấy rằng nó hoạt động chính xác theo cách bạn muốn.

Tuy nhiên, có nhiều môi trường (cả IDE và nhiều Makefile thủ công) mong muốn *.c được biên dịch - nếu điều này xảy ra, bạn có thể sẽ gặp phải lỗi liên kết do các ký hiệu trùng lặp.

Nói chung, nên tránh thực hành này.

Nếu bạn nhất định phải # thêm nguồn (và điều này thường nên tránh), hãy sử dụng một tệp khác cho tệp.

Việc đưa tệp C vào trong một tệp khác là hợp pháp nhưng không nên trừ khi bạn biết chính xác lý do tại sao bạn làm điều đó và bạn đang cố gắng đạt được điều gì.
Tôi khá chắc chắn rằng nếu bạn đăng ở đây lý do tại sao câu hỏi của bạn sẽ được thông báo tới cộng đồng, bạn sẽ tìm ra một cách phù hợp khác để đạt được mục tiêu của mình (lưu ý "gần như" vì có thể đây là một giải pháp phù hợp với bối cảnh) .

Nhân tiện, tôi đã bỏ lỡ phần thứ hai của câu hỏi. Nếu một tệp C được bao gồm trong một tệp khác và đồng thời được đưa vào một dự án, bạn có thể gặp phải vấn đề về ký hiệu trùng lặp, tại sao liên kết các đối tượng, tức là cùng một chức năng sẽ được xác định hai lần (trừ khi chúng là tĩnh).

Ngôn ngữ C không cấm loại #include này nhưng đơn vị dịch kết quả vẫn phải là C hợp lệ.

Tôi không biết bạn đang sử dụng chương trình nào với tệp .prj. Nếu bạn đang sử dụng cái gì đó như "make" hoặc Visual Studio hay bất cứ thứ gì, chỉ cần đảm bảo rằng bạn đặt nó vào danh sách các tệp cần được biên dịch mà không có tệp nào không thể được biên dịch độc lập.

Bạn có thể sử dụng trình biên dịch gcc trên linux để liên kết hai tệp với một đầu ra. Giả sử bạn có hai tệp c, một là "main.c" và một là "support.c". Vì vậy, lệnh để kết nối hai cái này là

Gcc main.c support.c -o main.out

Hai file này sẽ được liên kết với một main.out. Để chạy đầu ra, lệnh sẽ là

./main.out

Nếu bạn đang sử dụng hàm main.c được khai báo trong tệp support.c thì bạn cũng nên khai báo nó trong main bằng cách sử dụng lớp lưu trữ bên ngoài.

Nếu sử dụng đúng cách, đây có thể là một phương pháp hữu ích.

Giả sử bạn có một hệ thống con phức tạp có nhiệm vụ quan trọng với giao diện công cộng khá nhỏ và nhiều mã triển khai chưa được triển khai. Mã chạy tới vài nghìn dòng, hàng trăm hàm riêng tư và khá nhiều dữ liệu riêng tư. Nếu bạn làm việc với các hệ thống nhúng không tầm thường, bạn có thể gặp phải tình huống này khá thường xuyên.

Giải pháp của bạn có thể sẽ được phân lớp, mô-đun và tách rời, đồng thời những khía cạnh này có thể được trình bày và nâng cao một cách thuận tiện bằng cách mã hóa các phần khác nhau của hệ thống con trong các tệp khác nhau.

Với C bạn sẽ mất rất nhiều thứ khi làm điều này. Hầu hết tất cả các công cụ đều cung cấp khả năng tối ưu hóa phù hợp cho một đơn vị biên dịch duy nhất, nhưng lại rất bi quan về bất kỳ điều gì được khai báo bên ngoài.

Nếu bạn đặt mọi thứ vào một mô-đun nguồn C, bạn sẽ nhận được -

    Cải thiện hiệu suất và kích thước mã - Trong nhiều trường hợp, các lệnh gọi hàm sẽ được nội tuyến. Ngay cả khi không có lớp phủ, trình biên dịch vẫn có khả năng tạo mã hiệu quả hơn.

    Dữ liệu chức năng và cấp độ kênh bị ẩn.

    Tránh ô nhiễm không gian tên và hậu quả của nó - bạn có thể sử dụng những tên ít rườm rà hơn.

    Biên dịch và giao tiếp nhanh hơn.

Nhưng bạn cũng gặp phải một mớ hỗn độn tồi tệ khi chỉnh sửa tệp này và bạn mất đi tính mô-đun ngụ ý. Điều này có thể được khắc phục bằng cách chia mã nguồn thành nhiều tệp và đưa chúng vào một đơn vị biên dịch duy nhất.

Tuy nhiên, bạn cần áp đặt một số quy ước để giải quyết vấn đề này. Ở một mức độ nào đó, điều này sẽ phụ thuộc vào chuỗi công cụ của bạn, nhưng một số gợi ý chung là

    Đặt giao diện chung vào một tệp tiêu đề riêng biệt - bạn vẫn nên thực hiện việc này.

    Có một tệp .c chính bao gồm tất cả các tệp .c con. Điều này cũng có thể bao gồm mã cho giao diện mở.

    Sử dụng các trình bảo vệ trình biên dịch để ngăn các tiêu đề riêng và mô-đun nguồn được đưa vào bởi các mô-đun biên dịch bên ngoài.

    Tất cả dữ liệu và chức năng cá nhân phải được khai báo tĩnh.

    Duy trì sự khác biệt về khái niệm giữa các tệp .c và .h. Điều này sử dụng các quy ước hiện có. Sự khác biệt là bạn sẽ có rất nhiều quảng cáo tĩnh trong tiêu đề của mình.

    Nếu chuỗi công cụ của bạn không áp đặt bất cứ điều gì, bạn không nên chỉ định các tệp triển khai riêng tư như .c và .h. Nếu bạn sử dụng các bộ bảo vệ đã được kích hoạt, chúng sẽ không tạo mã và sẽ không giới thiệu bất kỳ tên mới nào (kết quả là bạn có thể có một số phân đoạn trống). Ưu điểm rất lớn là các công cụ khác (như IDE) sẽ xử lý các tệp này một cách tương ứng.

Phần mở rộng tệp không quan trọng đối với hầu hết các trình biên dịch C, vì vậy phần mở rộng này sẽ hoạt động.

Tuy nhiên, tùy thuộc vào cài đặt tệp hoặc dự án của bạn, tệp c đi kèm có thể tạo một tệp đối tượng riêng. Khi được liên kết, điều này có thể dẫn đến các ký tự được xác định kép.

bạn nên thêm tiêu đề như thế này

#bao gồm

lưu ý: cả hai file phải được đặt ở cùng một nơi

Bạn có thể đưa các tệp .C hoặc .CPP vào các tệp nguồn khác một cách chính xác. Tùy thuộc vào IDE của bạn, bạn thường có thể ngăn liên kết đôi bằng cách xem thuộc tính của tệp nguồn bạn muốn đưa vào, thường bằng cách nhấp chuột phải vào chúng và nhấp vào thuộc tính, đồng thời bỏ chọn/kiểm tra biên dịch/liên kết/loại trừ khỏi bản dựng hoặc bất kỳ tệp nào khác lựa chọn . Có lẽ. Hoặc bạn không thể đưa tệp vào chính dự án, vì vậy IDE thậm chí không biết nó tồn tại và sẽ không cố gắng biên dịch nó. Và với makefiles, bạn chỉ đơn giản là không đặt tệp vào đó để biên dịch và liên kết.

EDIT: Xin lỗi, tôi đã đưa ra câu trả lời thay vì trả lời các câu trả lời khác :(



bỏ phiếu trực tuyến (8)

Việc đưa tệp C vào trong một tệp khác là hợp pháp nhưng không nên trừ khi bạn biết chính xác lý do tại sao bạn làm điều đó và bạn đang cố gắng đạt được điều gì.
Tôi khá chắc chắn rằng nếu bạn đăng ở đây lý do tại sao câu hỏi của bạn sẽ được thông báo tới cộng đồng, bạn sẽ tìm ra một cách phù hợp khác để đạt được mục tiêu của mình (lưu ý "gần như" vì có thể đây là một giải pháp phù hợp với bối cảnh) .

Nhân tiện, tôi đã bỏ lỡ phần thứ hai của câu hỏi. Nếu một tệp C được bao gồm trong một tệp khác và đồng thời được đưa vào một dự án, bạn có thể gặp phải vấn đề về ký hiệu trùng lặp, tại sao liên kết các đối tượng, tức là cùng một chức năng sẽ được xác định hai lần (trừ khi chúng là tĩnh).

Phần mở rộng tệp không quan trọng đối với hầu hết các trình biên dịch C, vì vậy phần mở rộng này sẽ hoạt động.

Tuy nhiên, tùy thuộc vào cài đặt tệp hoặc dự án của bạn, tệp c đi kèm có thể tạo một tệp đối tượng riêng. Khi được liên kết, điều này có thể dẫn đến các ký tự được xác định kép.

Tùy thuộc vào môi trường xây dựng của bạn (bạn sẽ không chỉ định), bạn có thể thấy rằng nó hoạt động chính xác theo cách bạn muốn.

Tuy nhiên, có nhiều môi trường (cả IDE và nhiều Makefile thủ công) mong muốn *.c được biên dịch - nếu điều này xảy ra, bạn có thể sẽ gặp phải lỗi liên kết do các ký hiệu trùng lặp.

Nói chung, nên tránh thực hành này.

Nếu bạn nhất định phải # thêm nguồn (và điều này thường nên tránh), hãy sử dụng một tệp khác cho tệp.

Bạn có thể sử dụng trình biên dịch gcc trên linux để liên kết hai tệp với một đầu ra. Giả sử bạn có hai tệp c, một là "main.c" và một là "support.c". Vì vậy, lệnh để kết nối hai cái này là

Gcc main.c support.c -o main.out

Hai file này sẽ được liên kết với một main.out. Để chạy đầu ra, lệnh sẽ là

./main.out

Nếu bạn đang sử dụng hàm main.c được khai báo trong tệp support.c thì bạn cũng nên khai báo nó trong main bằng cách sử dụng lớp lưu trữ bên ngoài.

Tôi nghĩ mình nên chia sẻ một tình huống trong đó nhóm của tôi quyết định đưa các tệp .c vào. Kiến trúc của chúng tôi chủ yếu bao gồm các mô-đun được tách riêng thông qua hệ thống nhắn tin. Các trình xử lý tin nhắn này là công khai và gọi nhiều hàm static worker cục bộ để thực hiện công việc của chúng. Vấn đề nảy sinh khi cố gắng bao phủ các trường hợp thử nghiệm riêng lẻ của chúng tôi, vì cách duy nhất để triển khai mã triển khai riêng tư này là gián tiếp thông qua giao diện thông báo chung. Với một số tính năng dành cho công nhân nằm trong lòng ngăn xếp, điều này được chứng minh là một cơn ác mộng để đảm bảo phạm vi phủ sóng phù hợp.

Việc bao gồm các tệp .c đã cho chúng tôi cơ hội truy cập vào bánh răng trong máy, điều này thật thú vị khi chúng tôi thử nghiệm.

Ngôn ngữ C không cấm loại #include này nhưng đơn vị dịch kết quả vẫn phải là C hợp lệ.

Tôi không biết bạn đang sử dụng chương trình nào với tệp .prj. Nếu bạn đang sử dụng cái gì đó như "make" hoặc Visual Studio hay bất cứ thứ gì, chỉ cần đảm bảo rằng bạn đặt nó vào danh sách các tệp cần được biên dịch mà không có tệp nào không thể được biên dịch độc lập.

Nếu sử dụng đúng cách, đây có thể là một phương pháp hữu ích.

Giả sử bạn có một hệ thống con phức tạp có nhiệm vụ quan trọng với giao diện công cộng khá nhỏ và nhiều mã triển khai chưa được triển khai. Mã chạy tới vài nghìn dòng, hàng trăm hàm riêng tư và khá nhiều dữ liệu riêng tư. Nếu bạn làm việc với các hệ thống nhúng không tầm thường, bạn có thể gặp phải tình huống này khá thường xuyên.

Giải pháp của bạn có thể sẽ được phân lớp, mô-đun và tách rời, đồng thời những khía cạnh này có thể được trình bày và nâng cao một cách thuận tiện bằng cách mã hóa các phần khác nhau của hệ thống con trong các tệp khác nhau.

Với C bạn sẽ mất rất nhiều thứ khi làm điều này. Hầu hết tất cả các công cụ đều cung cấp khả năng tối ưu hóa phù hợp cho một đơn vị biên dịch duy nhất, nhưng lại rất bi quan về bất kỳ điều gì được khai báo bên ngoài.

Nếu bạn đặt mọi thứ vào một mô-đun nguồn C, bạn sẽ nhận được -

    Cải thiện hiệu suất và kích thước mã - Trong nhiều trường hợp, các lệnh gọi hàm sẽ được nội tuyến. Ngay cả khi không có lớp phủ, trình biên dịch vẫn có khả năng tạo mã hiệu quả hơn.

    Dữ liệu chức năng và cấp độ kênh bị ẩn.

    Tránh ô nhiễm không gian tên và hậu quả của nó - bạn có thể sử dụng những tên ít rườm rà hơn.

    Biên dịch và giao tiếp nhanh hơn.

Nhưng bạn cũng gặp phải một mớ hỗn độn tồi tệ khi chỉnh sửa tệp này và bạn mất đi tính mô-đun ngụ ý. Điều này có thể được khắc phục bằng cách chia mã nguồn thành nhiều tệp và đưa chúng vào một đơn vị biên dịch duy nhất.

Tuy nhiên, bạn cần áp đặt một số quy ước để giải quyết vấn đề này. Ở một mức độ nào đó, điều này sẽ phụ thuộc vào chuỗi công cụ của bạn, nhưng một số gợi ý chung là

    Đặt giao diện chung vào một tệp tiêu đề riêng biệt - bạn vẫn nên thực hiện việc này.

    Có một tệp .c chính bao gồm tất cả các tệp .c con. Điều này cũng có thể bao gồm mã cho giao diện mở.

    Sử dụng các trình bảo vệ trình biên dịch để ngăn các tiêu đề riêng và mô-đun nguồn được đưa vào bởi các mô-đun biên dịch bên ngoài.

    Tất cả dữ liệu và chức năng cá nhân phải được khai báo tĩnh.

    Duy trì sự khác biệt về khái niệm giữa các tệp .c và .h. Điều này sử dụng các quy ước hiện có. Sự khác biệt là bạn sẽ có rất nhiều quảng cáo tĩnh trong tiêu đề của mình.

    Nếu chuỗi công cụ của bạn không áp đặt bất cứ điều gì, bạn không nên chỉ định các tệp triển khai riêng tư như .c và .h. Nếu bạn sử dụng các bộ bảo vệ đã được kích hoạt, chúng sẽ không tạo mã và sẽ không giới thiệu bất kỳ tên mới nào (kết quả là bạn có thể có một số phân đoạn trống). Ưu điểm rất lớn là các công cụ khác (như IDE) sẽ xử lý các tệp này một cách tương ứng.

Điều này ổn chứ? vâng nó sẽ biên dịch

điều này có được khuyến khích không? không - Các tệp .c được biên dịch thành các tệp .obj, được liên kết sau khi biên dịch (bởi trình liên kết) thành một tệp thực thi (hoặc thư viện), do đó không cần phải đưa tệp .c này vào tệp khác. Thay vào đó, rất có thể bạn sẽ muốn tạo một tệp .h liệt kê các hàm/biến có sẵn trong một tệp .c khác và bao gồm tệp .h

hỗ trợ.microsoft

Khi bạn sửa đổi các tệp nguồn trong Visual C++ và lưu chúng, các dòng phải kết thúc bằng tổ hợp "CR/LF" [chuyển dòng, nguồn cấp dữ liệu]. Trên hệ thống UNIX, các dòng được kết thúc bằng "LF". Do đó, khi xem các tệp đã được sửa đổi trong nhóm Windows trên hệ thống UNIX, bạn có thể thấy nhiều ký tự "^M" trong dòng. Điều này chỉ xảy ra khi bạn sử dụng trình chỉnh sửa không biết cách diễn giải tệp Windows. Visual C++ có thể mở các tệp có dòng kết thúc bằng việc tạo UNIX LF. Nếu bạn sửa đổi tệp này và Lưu nó từ Visual C++ thì nó sẽ được lưu ở định dạng Windows (bạn sẽ thấy CR/LF chứ không phải LF trước đó có trên hệ thống).

Bài viết này mô tả quy trình lưu tệp đã sửa đổi được tạo trên nền tảng Windows ở định dạng có thể được sử dụng trên hệ thống UNIX.

GHI CHÚ: Visual C++.NET IDE chứa các chức năng có sẵn để lưu tệp ở định dạng UNIX. Trong IDE, lưu tệp bằng cách sử dụng Lưu thành..., chọn lưu từ danh sách thả xuống Lưu bằng mã hóa..., và nhấn nút thrn Đúng. Chọn Mã hóa chuỗi từ danh sách thả xuống UNIX (LF) và sau đó nhấp vào nút ĐƯỢC RỒI.

Bạn có thể sử dụng các bước sau để tạo dự án ứng dụng bảng điều khiển Win32 chuyển đổi tệp chứa "CR/LF" để chấm dứt dòng cho "LF":

  1. Để tạo một cái mới bằng ứng dụng bảng điều khiển Win32, một dự án trống có tên DOS2UNIX.
  2. Từ Tài liệu thực đơn, nhấn nút Mới và sau đó nhấp vào nút Các tập tin Chuyển hướng.
  3. Lựa chọn Tệp nguồn C/C++ và nhập tên file mới DOS2UNIX.cpp.
  4. Dán đoạn mã sau vào DOS2UNIX.cpp:

    #bao gồm #bao gồm #bao gồm sử dụng không gian tên std; int main(int argc, char* argv) ( if(argc !=2) ( cout<< "Please specify: dos2unix filename" << endl; return 0; } char ch; char temp="\0"; //Open the file for reading in binarymode. ifstream fp_read(argv, ios_base::in \ / ios_base::binary); sprintf(temp, "%s.temp", argv); //Create a temporary file for writing in the binary mode. This //file will be created in the same directory as the input file. ofstream fp_write(temp, ios_base::out \ / ios_base::trunc \ / ios_base::binary); while(fp_read.eof() != true) { fp_read.get(ch); //Check for CR (carriage return) if((int)ch == 0x0D) continue; if (!fp_read.eof())fp_write.put(ch); } fp_read.close(); fp_write.close(); //Delete the existing input file. remove(argv); //Rename the temporary file to the input file. rename(temp, argv); //Delete the temporary file. remove(temp); return 0; }

  5. Từ Sự thi công thực đơn, nhấn nút Tạo DOS2UNIX.exeđể tạo một tệp EXE.

Bạn có thể cần phải kiểm tra tệp exe này để xem nó có hoạt động chính xác không. Để thực hiện việc này, hãy mở tệp trong trình soạn thảo nhị phân Visual C++. Khi bạn chọn Mở trong nhóm Tài liệu menu bằng cách chọn DOS2UNIX.ex, Cài đặt Mở ra như Gửi ai nhị phân và sau đó nhấp vào Mở. Ví dụ: nếu tệp chứa "hellocrlfworld", dữ liệu tệp nhị phân (thập lục phân) sẽ trông như thế này:

48 65 6 C 6 C 6F 0 D 0A 57 6F 72 6 C 64

Điều này tương đương với:

Xin chào
Thế giới

Tại dấu nhắc lệnh, chạy dos2unix.exe . Tiếp theo, mở tệp trong trình soạn thảo nhị phân Visual C++. Bạn sẽ thấy 0x0d s bị xóa. Cho đến khi bạn thay đổi tệp và lưu nó trong Visual C++ 0x0d s sẽ không xuất hiện.

Điều này có thể được sử dụng kết hợp với Mô hình tự động hóa Visual C++ để tự động hóa toàn bộ quy trình. Một tập lệnh macro Microsoft Visual Basic đơn giản có thể được viết để gọi công cụ này, nhưng trước tiên phải thêm công cụ này vào Dịch vụ thực đơn trông như thế này:

  1. Từ Dịch vụ thực đơn, nhấn nút Cài đặt và sau đó nhấp vào nút Dịch vụ Chuyển hướng.
  2. Cung cấp tên như DOS2UNIX và cung cấp đường dẫn đầy đủ đến tệp Dos2unix.exe trong Đội trường chỉnh sửa.
  3. Đặt đối số thành $(Filename)$(FileExt).
  4. Chỉ định thư mục nguồn $(WkspDir) (chỉ định đường dẫn của riêng bạn).

Để kiểm tra hoạt động của chương trình, hãy mở tệp trong trình soạn thảo Visual C++, sau đó từ Dịch vụ trình đơn bắt đầu DOS2UNIX có nghĩa. Bạn sẽ thấy rằng tệp được mở trong trình chỉnh sửa đã bị xóa tất cả các ký tự CR.

Nếu bạn muốn tự động hóa quy trình này, hãy xử lý nó để mỗi khi bạn lưu một tệp đang mở trong trình soạn thảo Visual C++, DOS2UNIX.exe sẽ được gọi để xóa 0x0d s, sau đó sử dụng macro VBScript sau:

"Sự kiện này được kích hoạt mỗi khi tài liệu được lưu trong Trình soạn thảo VC++. Sub Application_DocumentSave(theDocument) "Điều này sẽ gọi công cụ người dùng trong menu Công cụ. "Thay đổi số tùy thuộc vào những gì bạn có. Theo mặc định, bạn chỉ" có 6 công cụ trong menu Công cụ, vì vậy công cụ DOS2UNIX sẽ là công cụ thứ 7. Thực thiCommand "UserTool7" End Sub

Mã VBScript này sẽ chỉ hoạt động nếu bạn mở tệp trong Visual C++ Editor. Đây là cách duy nhất để gọi tệp exe từ macro VBScript (macro VBScript không thể truyền tham số). Bạn có thể viết bằng Thay vào đó và nó sẽ linh hoạt hơn. Gọi công cụ "DOS2UNIX.exe" từ một phần bổ trợ mà không cần phải thêm nó vào Dịch vụ thực đơn.

Trong Visual C++ sử dụng macro VBScript được cung cấp:

  1. Mở tệp hiện có có phần mở rộng .dsm hoặc tạo một tệp.
  2. Dán mã được cung cấp trước đó vào tệp.
  3. Trong Visual C++, hãy làm như sau:
    1. Từ Dịch vụ thực đơn, nhấn nút Cài đặt.
    2. Nhấn vào nút Tệp macro và phần bổ trợ Chuyển hướng.
    3. Nhấn vào nút Ôn tập tải tệp .dsm chứa macro. Khi ở trong tệp .dsm đã được chọn trong Ôn tập hộp thoại, tập tin sẽ xuất hiện trong Tiện ích bổ sung và macro danh sách các tập tin bằng cách sử dụng hộp kiểm đã chọn bên cạnh nó.
    4. Nhấn vào nút Đóngđể tiếp tục.

Bây giờ, nếu bạn mở tệp trong trình soạn thảo Visual C++ và lưu từ tệp Tài liệu menu, macro được gọi và tất cả 0x0d s sẽ bị xóa khỏi tệp đang mở. Vì điều này sẽ ảnh hưởng đến bất kỳ tệp nào được lưu từ bây giờ và được áp dụng cho bất kỳ dự án nào bạn mở trong tương lai, hãy đảm bảo tắt macro khỏi Dịch vụ thực đơn sử dụng Cài đặt(bỏ chọn hộp bên cạnh macro).