2009-04-09 15 views
6

Cuối tôi phải đối mặt với các vấn đề trỏ ngón tay vào trình biên dịch VC6.Đã đến lúc nói lời tạm biệt với trình biên dịch VC6 chưa?

Rất ít trong số đó là:

  1. Một chức năng-thử-block không hoạt động. Related Q
  2. hằng số trong lớp không hoạt động.
  3. __FUNCTION_ (Macro để lấy tên hàm) không hoạt động
  4. Bổ sung mới nhất là nó không cho phép các hàm trống được chuyển như một phần của for_each.

Ví dụ bên dưới không được biên dịch bằng trình biên dịch VC6. Nó nói "lỗi C2562: '()': 'void' trả về một giá trị". Có vẻ như VC6 không thích các hàm void được chuyển tới for_each.

class Temp 
{ 
public: 
    Temp(int i):m_ii(i) 
    {} 

    int getI() const 
    { 
     return m_ii; 
    } 

    void printWithVoid() 
    { 
     cout<< "i = "<<m_ii<<endl; 

    } 
    bool printWithBool() 
    { 
     cout<< "i = "<<m_ii<<endl; 
     return true; 
    } 
private: 
    int m_ii; 
}; 

int main(void) 
{ 
    std::vector<Temp> arrTempObjects; 

    arrTempObjects.push_back(Temp(0)); 
    arrTempObjects.push_back(Temp(2)); 

    //Doesnot work, compiler error 
    std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithVoid)); 

    //Works 
    std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithBool)); 

    return 0; 
} 

Bạn đã gặp phải bất kỳ vấn đề nào khác liên quan đến VC6.0. Bất kỳ giải pháp nào để giải quyết những vấn đề này? Hoặc là nó thời gian để thay đổi trình biên dịch?

+3

Cùng thời trang: Đã đến lúc nói goobye với Commodore 64 Basic chưa? VC6 là công nghệ thế kỷ 20, vượt qua nó. – MSalters

+0

Dự án lớn đến mức nào, trong bao lâu cho đến khi bạn giao hàng? –

+0

Hãy thử STLPort, nó có thể giúp đỡ. –

Trả lời

36

Khá thẳng thắn tôi khó có thể hiểu được lý do tại sao bạn sẽ không mua một máy tính hiện đại và chuyển sang Visual Studio 2008.

VC6 đã có một STL thiếu, nghèo C++ tuân thủ tiêu chuẩn và giao diện đồ họa lỗi thời.

Bạn không nên để đối thủ cạnh tranh của mình sử dụng các công cụ tốt hơn bạn.

+3

Một số người dùng không có lựa chọn vì họ làm việc tại các tập đoàn lớn, bảo thủ không phải lúc nào cũng hành động theo những gì chúng tôi nghĩ là lợi ích tốt nhất của họ. Các công ty có đầu tư lớn vào mã không cho họ dễ dàng. Một số đang chạy Cobol trên các khung hình chính từ 30-40 tuổi. – duffymo

+0

Dự án kế thừa của nó. Tôi cần thuyết phục người quản lý của mình! –

+0

Bạn có thể chọn rời đi. –

3

VC6 không thể thực hiện được bất kỳ loại C++ hiện đại nào. Tôi nhớ lại tôi đã cố gắng sử dụng một trong các thư viện tăng cường trước đây như có thể là Graph và nó đã đưa ra "L COMPI L COMPI B INTERNNG NỘI THẤT" trên khắp nơi để cuối cùng tôi cười vào.

+0

Nó sẽ ICE cho hầu như bất cứ điều gì mẫu-ish bạn ném vào nó. Blech! Tốt riddance tôi nói! – Macke

2

Tôi đã thay đổi từ VC++ 6.0 thành Code :: Blocks (đó là FOSS) với g ++ một vài tháng trước và đã không thực sự nhìn lại. Tôi bỏ lỡ trình gỡ lỗi VC++ một chút, vì việc triển khai gdb trong CB không ở đâu gần như trơn, nhưng đó là tất cả. Một số thứ trong IDE hoạt động tốt hơn (hoàn thành mã, tooltips, xalculation phụ thuộc) và trình biên dịch rõ ràng là tốt hơn nhiều.

Về điểm của bạn, khối chức năng thử hầu như không được sử dụng rộng rãi, và hầu hết mọi người nghĩ rằng chúng khá vô dụng. Và macro __FUNCTION__ không phải là một phần của Tiêu chuẩn C++, do đó bạn không nên phụ thuộc quá nhiều vào việc tính di động là một vấn đề.

1

Trừ khi bạn có một chương trình lớn để duy trì, vâng. Chuyển đổi ngay hôm nay!

Phiên bản Express của VC++ là bản tải xuống miễn phí từ Microsoft.

3

Câu trả lời không có trí tuệ là có và ASAP. Bạn có các lựa chọn thay thế miễn phí như VC++ express và Code :: Blocks, nếu chi phí phát hành. Nỗi đau trong việc giải quyết các vấn đề tương thích là IMO không có lý do để không nâng cấp bởi vì bạn sẽ phải làm điều đó một ngày nào đó và nó chỉ trở nên khó khăn hơn.

Lý do duy nhất tôi nhìn thấy một trở ngại có thể là nếu bạn có mã MFC sẽ khó khăn/tốn thời gian để chuyển. Trong trường hợp đó bạn không thể sử dụng VC++ express (không hỗ trợ cho MFC) và bạn phải đầu tư ít nhất là VS std. phiên bản. Bạn sẽ mất khoảng 300 EUR (tùy thuộc vào nơi bạn sinh sống).

1

Bạn có thể tìm hiểu cách sống với các điểm yếu của VC6. Nó gần như có một nét duyên dáng retro nhất định những ngày này.Chúng tôi đã liên tục cung cấp "chỉ một bản phát hành VC6 cuối cùng" của một số thư viện cho khách hàng trong nhiều năm nay. Khó để tranh luận với một khách hàng chuẩn bị để trả tiền cho công việc phụ backporting và duy trì một chi nhánh. Nhưng tại một thời điểm nào đó, chi phí cho chúng tôi để quay trở lại các tính năng mới được phát triển trong các VC mới hơn sẽ vượt quá chi phí của chúng khi chúng được nâng cấp (đặc biệt là tăng thêm và TBB của Intel leo vào đầu của codebase). Hoặc ít nhất tôi hy vọng đó là những gì sẽ xảy ra! Trường hợp xấu nhất nó sẽ xảy ra giống như flaky C++ 0x hỗ trợ xuất hiện và chúng tôi sẽ bị mắc kẹt hỗ trợ cho họ trong 10 năm ...

0

Quy tắc chung có vẻ là phiên bản mới là bản nâng cấp và do đó đáng giá.

Tuy nhiên! bạn phải chọn đúng thời điểm cho nó, có rất nhiều lỗi được sửa, nhưng sau đó bạn cần phải nhận thức được các lỗi và biến thể mới từ tiêu chuẩn.

Dành thời gian để nâng cấp. Nâng cấp phiên bản trình biên dịch cũng có thể là một dự án theo đúng nghĩa của nó, đảm bảo bạn có mã ổn định và kiểm tra tốt trước khi nâng cấp và khi bạn hoàn thành chứng minh rằng nó vẫn hoạt động như cũ.

Bạn có thể bị buộc phải nâng cấp khi bạn bắt đầu phát triển cho Vista vì VC6 không cung cấp cho việc ký mã một cách dễ dàng và danh sách đỏ không ở dạng mà Vista thích. (muốn ít nhất VC2K5)

0

Bạn có đang cập nhật hệ điều hành sớm không? Khi tôi nghiên cứu chuyển các ứng dụng của mình sang Vista, tôi thấy rằng Vista không hỗ trợ chính thức bất cứ điều gì trước VS 2005 (ngoại trừ VB 6) và có một danh sách dài các vấn đề nhỏ có thể xảy ra với VS 2005 mà có thể hoặc không thể cắn bạn . Tôi đề nghị trì hoãn cho đến khi VS 2008 SP1 có sẵn (tức là, khi VS 2008 thực sự có thể sử dụng được), và thực hiện chuyển đổi trình biên dịch trước.

Nếu dự án là đặc biệt cho một số khách hàng chạy nó trên máy NT cũ, bạn có thể muốn giữ nó ở VS 6. Nếu bạn bán nó cho bất kỳ loại tiêu thụ chung nào, bạn sẽ cần làm cho nó tương thích với Vista tại một số điểm (hoặc 7 tương thích, hoặc bất cứ điều gì), và bạn sẽ cần phải nâng cấp.

7

Vâng, đây là điều. Trình biên dịch VC6 hút. Tuy nhiên ... IDE là khá tốt.

VS2005 có hỗ trợ kiểm soát nguồn tốt hơn nhiều. Nói cách khác, nó có khả năng xử lý chậm hơn nhiều, có một khung đầu ra crappy mà deconentially decays trên chèn dòng đầu ra (những gì tuyệt đối rác mã hóa?), Hệ thống trợ giúp là nhiều lần chậm hơn, và gỡ lỗi và tiếp tục (có thể tính năng tốt nhất của Microsoft trên IDEs khác) bị hỏng nhiều hơn.

.NET? Chắc chắn, VS20xx là cách duy nhất để đi. Tuy nhiên, đối với một máy khách nhỏ gắn bó với VC6/MFC (đối với các giao diện cho các hệ thống nhúng, vv), tôi thực sự thích làm việc với VC6. Nó chỉ là FAST.

2008? Tôi muốn ... nhưng phải mất một thời gian để khách hàng của tôi di chuyển. Chưa có ai.

6

Đã đến lúc nói lời tạm biệt với trình biên dịch VC6 chưa?

Có.

1

Tôi đoán đây là lý do tại sao rất nhiều ứng dụng trên Windows hút vì mọi người vẫn sử dụng VC6. Tại sao lộn xộn với phá vỡ, không bao giờ duy trì MFC hoặc thậm chí Win32 khi họ là wxWidgets và Qt4 ra có cách tốt hơn so với MFC bao giờ có thể và bạn thậm chí có thể sử dụng miễn phí bổ sung của Visual Studio 2005 +

+0

Um. Bởi vì khách hàng trả tiền cho chúng tôi để làm như vậy? – EvilTeach

2

Không, đã đến lúc nói lời tạm biệt với nó một thập kỷ trước.Dưới đây là một vài lý do tại sao:

  • Có được tự do, trình biên dịch tiêu chuẩn tương thích có sẵn, cả hai từ Microsoft và những người khác
  • VC6 đã được viết trước khi ngôn ngữ C++ đã được tiêu chuẩn hóa, và nó là hư không gần tiêu chuẩn phù hợp. Đặc biệt là các khuôn mẫu và thư viện chuẩn sống trong một thế giới riêng của chúng, không ràng buộc các tính năng này thực sự hoạt động như thế nào trong ISO C++. Ngôn ngữ mà nó biên dịch không phải là C++. Nó là một lai của C++ chuẩn, các phần mở rộng của Microsoft, các giới hạn trình biên dịch và các lỗi. Không ai trong số đó là mong muốn.
  • VC6 được biết là tạo mã không hợp lệ trong một số trường hợp. Nó không chỉ biên dịch một ngôn ngữ tự chế, lỗi và không chuẩn, nó cũng làm cho việc tối ưu hóa không hợp lệ gây ra sự cố, hoặc trong một số trường hợp thực sự tạo ra một assembly không thể thực hiện được.

Nó bị hỏng và đã bị hỏng bị hỏng. Nó được thiết kế để biên dịch một ngôn ngữ ngừng hoạt động trong cùng thời gian khi trình biên dịch bị loại bỏ (khi ngôn ngữ được chuẩn hóa), và nó không thành công ngay cả trong nhiệm vụ đó, với vô số lỗi, một số số đã được sửa trong nửa gói dịch vụ -dozen đã được phát hành. Nhưng không phải tất cả chúng, và thậm chí không phải tất cả những thứ quan trọng.

Tất nhiên, nhược điểm của việc này là ứng dụng của bạn rất có thể bị hỏng. (không phải vì bạn là lập trình viên xấu, nhưng vì nó nhắm vào trình biên dịch bị hỏng. Nó bị phá vỡ để được VC6 chấp nhận)

Việc chuyển đến trình biên dịch tuân thủ tiêu chuẩn có khả năng là rất nhiều công việc . Đừng cho rằng bạn chỉ có thể nhập các dự án cũ của mình, nhấp vào "xây dựng" và nó sẽ hoạt động. Vì vậy, nếu bạn là một phần của một doanh nghiệp lớn mà không thể chỉ mất một tháng để chuyển đổi trình biên dịch, bạn có thể phải chuyển nó thành một dự án phụ, trong khi một phần của nhóm đang duy trì phiên bản VC6. Đừng vứt bỏ VC6 cho đến khi bạn đã chuyển tất cả mọi thứ thành công, và nó hoạt động.

Các vấn đề liên quan