Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Sửa chữa: Máy mã không chính xác được tạo ra cho một tuyên bố "chuyển đổi" trong Visual C++ 2010 x 64 biên dịch

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 2802711
Triệu chứng
Giả sử rằng bạn biên dịch C hoặc c + + nguồn mã tệp vào một tệp nhị phân dựa vào x 64 bằng cách sử dụng Visual C/c ++ compiler (Cl.exe) trong Microsoft Visual Studio 2010. Tập tin mã nguồn có chứa một chức năng mà sử dụng một chuyển đổi tuyên bố. Trong tình huống này, mã máy không chính xác có thể được tạo ra cho các báo cáo chuyển đổi nếu các điều kiện sau là đúng:
  • Tùy chọn biên dịch /Ob1 (Only_inline) được kích hoạt.
  • /O1 (giảm thiểu, kích thước), /O2 (tối đa hóa tốc độ), /Ox (tối ưu hóa đầy đủ) hoặc /Og (tối ưu hóa toàn cầu) tối ưu hóa trình biên dịch tùy chọn được kích hoạt.
  • Tùy chọn biên dịch /GL (toàn bộ chương trình tối ưu hóa) vô hiệu hoá.
Giải pháp

Thông tin hotfix

Một hotfix được hỗ trợ là bây giờ có sẵn từ Microsoft. Tuy nhiên, nó là nhằm khắc phục chỉ sự cố bài viết này mô tả. Nó chỉ áp dụng cho hệ thống đang gặp vấn đề cụ thể này.

Để giải quyết vấn đề này, liên hệ với bản ghi dịch vụ hỗ trợ khách hàng Microsoft để có được các hotfix. Để hoàn thành danh sách các bản ghi dịch vụ hỗ trợ Microsoft khách hàng số điện thoại và thông tin về chi phí hỗ trợ, ghé thăm website sau của Microsoft:Lưu ý Trong trường hợp đặc biệt, chi phí mà thường phải gánh chịu cho các cuộc gọi hỗ trợ có thể được hủy bỏ nếu chuyên viên hỗ trợ Microsoft xác định rằng một Cập Nhật cụ thể sẽ giải quyết vấn đề của bạn. Các chi phí hỗ trợ thông thường sẽ áp dụng để hỗ trợ thêm câu hỏi và vấn đề mà không đủ điều kiện cho Cập Nhật cụ thể trong câu hỏi.

Điều kiện tiên quyết

Để áp dụng hotfix này, bạn phải có Visual Studio 2010 Service Pack 1 (SP1) được cài đặt chuyên biệt.

Khởi động lại yêu cầu

Bạn không phải khởi động lại máy tính sau khi bạn áp dụng hotfix này nếu các tập tin bị ảnh hưởng đang không được sử dụng. Chúng tôi khuyên bạn đóng liên quan đến Visual Studio 2010 thành phần trước khi bạn áp dụng hotfix này.

Chi tieát taäp tin

Phiên bản toàn cầu hotfix này có các thuộc tính tệp (hoặc sau này tập tin thuộc tính) mà được liệt kê trong bảng sau. Ngày tháng và thời gian cho những tập tin được liệt kê trong Giờ Quốc tế Phối hợp (UTC). Khi bạn xem chi tieát taäp tin, nó bị chuyển thành giờ cục bộ. Để tìm sự khác nhau giữa UTC và local time, sử dụng các múi thời gian thẻ tab trong các Ngày và thời gian mục trong Panel điều khiển.
tập đã đặt tên tinPhiên bản tập tinKích thước tập tinNgàyThời gianNền tảngĐường dẫn
C2.dll16.0.40219.4442,606,71211 Tháng 3 năm 201319:24x 86Microsoft Visual Studio 10.0\VC\bin
C2.dll16.0.40219.4442,493,56012 Tháng 3 năm 201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_amd64
C2.dll16.0.40219.4442,593,92812 Tháng 3 năm 201316:48x 86Microsoft Visual Studio 10.0\VC\bin\x86_ia64
C2.dll16.0.40219.4442,960,50412 Tháng 3 năm 201316:48x 64Microsoft Visual Studio 10.0\VC\bin\amd64

Thông tin thêm
Để tái tạo các vấn đề này, tạo ra một C hoặc c + + nguồn tập tin có chứa đoạn mã sau:
#include <stdio.h>int test(int bps, int sflags){    if (sflags & (1 << bps))    {        switch (bps)        {        case 1:  return 1;        case 2:  return 3;        default: return 0;        }    }    else    {        switch (bps)        {        case 1:  return 2;        default: return 0;        }    }} void main(){    int res = test(1, -1);    printf("%d\n", res);}


Sau đó, mở dấu kiểm nhắc lệnh công cụ Visual Studio x 64 Cross hoặc dấu kiểm nhắc lệnh Visual Studio x 64 Win64 trong Visual Studio 2010, và biên dịch các tập tin nguồn bằng cách sử dụng lệnh sau đây:
cl /Ob1 /O2 'Đường dẫn tệp nguồn'

Kết quả dự kiến sẽ là 1. Tuy nhiên, do thực tế là 0.
Tình trạng
Microsoft đã xác nhận rằng đây là một vấn đề trong sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Tham khảo
Để biết thêm chi tiết về các tùy chọn biên dịch /Ob , hãy vào web site MSDN sau đây: Để biết thêm chi tiết về các tùy chọn biên dịch /GL , hãy vào web site MSDN sau đây: Để biết thêm chi tiết về các tùy chọn tối ưu hóa /O , hãy vào web site MSDN sau đây:

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 2802711 - Xem lại Lần cuối: 03/29/2013 08:59:00 - Bản sửa đổi: 3.0

Microsoft Visual Studio 2010 Service Pack 1, Microsoft Visual Studio 2010 Ultimate, Microsoft Visual Studio 2010 Professional, Microsoft Visual Studio 2010 Premium with MSDN

  • kbqfe kbhotfixserver kbfix kbsurveynew kbexpertiseadvanced kbmt KB2802711 KbMtvi
Phản hồi