2013-12-13 32 views
1

我想知道C和C++語言。return static_cast <int> C++和C

C++使用:

return static_cast<int> 

我怎樣才能變換return static_cast<int>到C?

例如:

  • Çprintf()
  • C++ cout
+3

的static_cast (X) - >(類型*)× – gukoff

+1

你的英語很好,但請看看預覽,點擊'{}'格式按鈕,您的文章是不是亂碼。 – Potatoswatter

+0

在C中難以轉換的是''dynamic_cast (somevar)' –

回答

8

空調風格鑄造簡單地用前綴括號中的類型的值。取而代之的

static_cast<type>(value) 

你根本

(type)value 

例如

static_cast<int>(x) 

成爲

(int)x 

或者你可以做

#ifdef __cplusplus 
    #define STATIC_CAST(Type_, Value_) static_cast<Type_>(Value_) 
#else 
    #define STATIC_CAST(Type_, Value_) (Type_)(Value_) 
#endif 

,並在周圍VALUE_ C版本使用一個調用兩種語言

STATIC_CAST(int, x) // C++ static_cast<int>(x), C (int)(x) 

額外的括號不需要d簡單的案件,但在那裏,因爲這是一個宏,如果你說

STATIC_CAST(int, 1.0 + 2.0) 

你不希望它擴展到

(int)1.0 + 2.0 

,但希望它擴大到

(int)(1.0 + 2.0) 

請注意,C++允許C形式的鑄造,但模板化的轉換機制是C++工程師的首選。

+2

注意:C允許您將任何東西轉換爲其他任何東西。沒有安全機制,除了完全沒有意義的事情。 – Potatoswatter

+0

@Patatoswatter,錯了。在C中,只能*轉換基本類型,指針和'enum',沒有別的。 –

+0

@JensGustedt除了這個列表之外,其餘的類型還有數組,結構體,聯合體和'void'。可選地,還有原子和複數,我猜想可能是鑄造的。你可以從數組轉換爲指針,或者從任何東西轉換爲'void'。其餘的情況是不允許的,因爲它們沒有概念基礎,即沒有意義。 – Potatoswatter