2011-07-11 22 views
9

Đoạn mã sau của tôi không in giá trị trong studio trực quan.Tại sao định dạng% zd printf không hoạt động trong VS2010?

int main() { 
    intptr_t P = 10; 
    printf("test value is %zd",P); 
    return 0; 
} 

OUTPUT:

test value is zd 

tôi mong đợi in mã trên

test value is 10 

tôi đang sử dụng intptr_t thay vì số nguyên để làm cho đoạn code để điều chỉnh ở cả hai bit 32 và kiến ​​trúc 64 bit.

+0

Vui lòng sử dụng một phong cách thụt phù hợp . Nó sẽ giúp cả hai chúng tôi và bạn đọc mã của bạn. – bdonlan

+0

@bdonlan và Bart, Cảm ơn bạn đã gợi ý và tôi xin lỗi vì mọi thứ :) – thetna

Trả lời

4

Mặc dù specifier z chiều dài được hỗ trợ trong C99, Visual Studio 2010 không hỗ trợ C99, và thay vào đó phù hợp với phiên bản cũ của C đã được thiếu specifier z dài. Là một phần mở rộng, VS2010 hỗ trợ I length specifier thay vì cho size_t, nhưng điều này không thể di chuyển sang các nền tảng khác.

Tôi khuyên bạn nên sử dụng một số unsigned long long thay vì chỉ định số %llu; chi phí là tối thiểu và nó di động với nền tảng C99 là tốt.

+1

Tài liệu MS không cho phép '% llu' làm tùy chọn, chỉ'% lld'. Và bạn cũng muốn truyền tham số đến kích thước phù hợp. –

+0

@Mark Ransom cũng muốn sử dụng ** uintptr_t ** cho trình intger chưa ký. Bạn đề nghị gì cho tôi trong trường hợp này? – thetna

+0

http://stackoverflow.com/questions/9610747/which-c99-features-are-available-in-the-ms-visual-studio-compiler –

2

Đối với mã di động, #include <inttypes.h> và sử dụng PRIdPTR trong chuỗi định dạng printf của bạn.

printf("test value is %" PRIdPTR, P); 

Các Wikipedia page for inttypes.h có một liên kết đến một phiên bản của tập tin đó sẽ làm việc với Visual C++, và có lẽ sẽ làm việc với VS2010 cũng (nếu Microsoft không thêm một inttypes.h).

PRIdPTR là dành cho intptr_t, PRIuPTR là dành cho uintptr_t.

+1

Vì inttypes.h vẫn không có trong VS2012, [đây là một hiện tại liên kết đến triển khai tom được đề cập, bây giờ trên code.google.com] (https://code.google.com/p/msinttypes/) –

0

Để in size_t bạn cần phải sử dụng % Iu trong VS và% zu trong gcc

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