Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Giúp mình cách để dùng Vcpkg để chuyển code trên Github thành một MSVC project?

  1. #1
    Ngày gia nhập
    07 2011
    Nơi ở
    Moscow-Russia
    Bài viết
    154

    Mặc định Giúp mình cách để dùng Vcpkg để chuyển code trên Github thành một MSVC project?

    Chào các bạn,
    Mình muốn chuyển một dự án open source code C++ trên Github (ví dụ: https://github.com/CGAL/cgal/releases thành một VC++ 2019. Mình nghe nói là có thể dùng Vcpkg gì đó, và mình không biết là sẽ cài đặt và sử dụng ra làm sao để có thể làm được công việc mong muốn kia của mình. Mong các bạn giúp mình. Mình xin cảm ơn.
    A good beginning and a good ending !

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    Đây là một ví dụ kinh điển: hàm char *strtok_s có 4 tham số: (since C11)
    https://en.cppreference.com/w/c/string/byte/strtok

    C++ Code:
    1. #define __STDC_WANT_LIB_EXT1__ 1
    2. #include <string.h>
    3. #include <stdio.h>
    4.  
    5. int main(void)
    6. {
    7.     char input[] = "A bird came down the walk";
    8.     printf("Parsing the input string '%s'\n", input);
    9.     char *token = strtok(input, " ");
    10.     while(token) {
    11.         puts(token);
    12.         token = strtok(NULL, " ");
    13.     }
    14.  
    15.     printf("Contents of the input string now: '");
    16.     for(size_t n = 0; n < sizeof input; ++n)
    17.         input[n] ? putchar(input[n]) : fputs("\\0", stdout);
    18.     puts("'");
    19.  
    20. #ifdef __STDC_LIB_EXT1__
    21.     char str[] = "A bird came down the walk";
    22.     rsize_t strmax = sizeof str;
    23.     const char *delim = " ";
    24.     char *next_token;
    25.     printf("Parsing the input string '%s'\n", str);
    26.     token = strtok_s(str, &strmax, delim, &next_token);
    27.     while(token) {
    28.         puts(token);
    29.         token = strtok_s(NULL, &strmax, delim, &next_token);
    30.     }
    31.  
    32.     printf("Contents of the input string now: '");
    33.     for(size_t n = 0; n < sizeof str; ++n)
    34.         str[n] ? putchar(str[n]) : fputs("\\0", stdout);
    35.     puts("'");
    36. #endif
    37. }

    thử biên dịch nó với vc++ thử xem thế nào?
    được thì tính tiếp, dịch chuyển đến project.
    ...
    ..
    .

  3. #3
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    Thông thường thì phiên bản sau mở được sản phẩm của phiên bản trước (có thể yêu cầu convert sang chuẩn mới), trừ vài trường hợp.
    Đây là ví dụ cụ thể

    C++ Code:
    1. /*
    2. Utf8 BOM for wide_string Vc
    3.  
    4. cl /nologo /EHsc wstr.cpp
    5.  
    6. https://www.codeproject.com/Articles/34068/Unicode-Output-to-the-Windows-Console
    7. */
    8.  
    9. #include "wostream_wide.h" //# over w_output
    10. #include "ostream_wide.h"  //# over s_output
    11. //#include <stdio.h>
    12.  
    13. #include <iostream>
    14.  
    15. int main(){
    16.     std::wcout << L"\nQuốc ngữ tiếng Việt\n\n"; //# string literal, wostream_wide
    17.  
    18.     const wchar_t * w = L"Bà cháu đi đường cẩn thận .."; //# var string
    19.     std::cerr << w << std::endl; //# ostream_wide
    20.    
    21.     wchar_t ws[] = L"\nChào tạm biệt! ";
    22.     std::wcout << ws; //# wostream_wide
    23.    
    24.     printf("\nBye .. ");
    25.     system("pause>nul");
    26.    
    27.     return 0;
    28. }
    - Biên dịch với Vc2010 kết quả như hình chụp: dịch được, chạy được, đạt yêu cầu.


    - Biên dịch với Vc2019 nó báo lỗi, lỗi biên dịch. Để trực quan hơn tôi chụp với Bcc( , nó hiện rõ lỗi đẹp hơn so với trình biên dịch Vc2019 đơn sắc)


    Đời không như là mơ! Chuyển MSVC project cũ sang MSVC project mới trước đi!
    Source code gốc Unicode Output to the Windows Console xem link trong comment, nó unicode_console.vcproj có phiên bản Version="8,00"
    ...
    ..
    .

  4. #4
    Ngày gia nhập
    08 2017
    Bài viết
    4,085

    Một ví dụ khác
    C Code:
    1. /* isfinite example */
    2. #include <stdio.h>      /* printf */
    3. #include <math.h>       /* isfinite, sqrt */
    4.  
    5. int main()
    6. {
    7.   printf ("isfinite(0.0)       : %d\n",isfinite(0.0));
    8.   printf ("isfinite(1.0/0.0)   : %d\n",isfinite(1.0/0.0));
    9.   printf ("isfinite(-1.0/0.0)  : %d\n",isfinite(-1.0/0.0));
    10.   printf ("isfinite(sqrt(-1.0)): %d\n",isfinite(sqrt(-1.0)));
    11.   return 0;
    12. }
    http://www.cplusplus.com/reference/cmath/isfinite/

    + Biên dịch với Gcc (MinGw) không có vấn đề gì, Output:
    Code:
    isfinite(0.0)       : 1
    isfinite(1.0/0.0)   : 0
    isfinite(-1.0/0.0)  : 0
    isfinite(sqrt(-1.0)): 0
    + Biên dịch với Msc(vc2019 hại điện bậc nhất hiện nay) nó báo lỗi tréo ngoe:
    error C2124: divide or mod by zero
    ở dòng 8 và dòng 9 của code trên

    + Biên dịch với Bcc nó báo lỗi (dù có thay math.h bằng cmath)
    error: use of undeclared identifier 'isfinite'
    có nhìn thấy isfinite trong dinkumware64\cmath:198:
    using _CSTD isfinite ; using _CSTD isinf ;
    ...
    ..
    .

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn