2010-11-22 79 views
3

在64位體系結構long int上,根據gcc至少爲int64_t。在32位上,long int至少爲int32_t。使用微軟編譯器,long始終是int32_t,不管32/64位。有什麼辦法可以:gcc,不同體系結構上long int的寬度

  1. 強制gcc處理長爲int64_t,在32位? (爲了便於測試)
  2. 強制gcc在64位處理長度爲int32_t? (符合MS的編譯器)。

回答

11

編譯不這樣做,當它真的會爲你節省很多的麻煩 - 使用標準類型,如int32_tuint32_tint64_tuint64_t等從<stdint.h>而比試圖對諸如long int之類的裸類型做出假設或試圖按照你的意願彎曲編譯器。

注意:任何給定平臺的64位模型(例如大多數* nix平臺,Mac OS X等的LP64)都是給定的,所以即使您可以說服編譯器使用不同的64位模型你可能會打破系統代碼,庫等的任何調用。

+0

看到我對Goz的回答的評論。 – 2010-11-22 10:25:32

0

這就是爲什麼它通常更容易使用每個平臺定義的一組typedef。在隨機平臺與隨機-編譯器47.4

+0

我在我所有的項目中使用boost的cstdint。我不能強迫我的團隊的其他成員或圖書館作者也這樣做。在編譯器級強制它(如果可能的話)似乎更安全。 – 2010-11-22 10:23:53

+0

@John:如果你的團隊成員正在編寫脆弱/不安全/不可移植的代碼,那麼你需要修復它們和/或他們的代碼。 – 2010-11-22 10:26:42

+0

@ M.M'stdint.h'並不總是處於標準C中。它是在C99中引入的。 – Kaz 2017-08-29 13:47:54