簡體   English   中英

XCode上的size_t

[英]size_t on XCode

在XCode上我似乎需要在Visual C ++上使用std :: size_t而不是size_t。 但這是一個痛苦,因為我真的不想要#include <cstddef>並在我的代碼中將每個size_t更改為std::size_t ...在我的Windows代碼size_t工作時不包含任何其他文件。

有沒有辦法讓我現有的代碼在XCode中運行(可能通過.pch文件?)或GCC / MSVC ++在這方面根本不同,我的代碼需要使用std::size_t才能跨平台?

根據C ++ 03標准,17.4.1.2.4:

除第18條至第27條所述外,每個標題cname的內容應與ISO / IEC 9899:1990編程語言C(第7條)或ISO / IEC中規定的相應標題名稱h的內容相同。 :1990編程語言-C修正案1:C完整性,(第7條),酌情包括在內。 但是,在C ++標准庫中,聲明和定義(在C中定義為宏的名稱除外)在命名空間std的命名空間范圍(3.3.5)內。

換句話說,通過選擇使用<cstddef>而不是<stddef.h> ,您特別要求類型size_t在命名空間std中。

那么,以下是選擇:

  1. 改為使用<stddef.h> ,因此size_t位於頂級命名空間中,如Jesse Good所建議的那樣。

  2. 使用<cstddef>並使用std::size_t

  3. 使用<cstddef>並使用using聲明將size_t拉入頂級命名空間,如cnicutar所示。

當然,你可以依賴這樣一個事實:一個特定版本的一個編譯器/庫/平台可以讓你逃脫它,或為每個平台編寫不同的代碼,或用autoconf包裝整個事件,或編寫代碼生成器或sed基於預處理器,或者其他什么......但為什么呢?

也許在靠近頂部的地方說這個?

using std::size_t;

使用#include <stddef.h>

那么, #include <stddef.h>#include <cstddef>之間的區別是什么?

<cstddef>是一個C ++頭文件,保證在std命名空間中定義所有符號,也可以在全局命名空間中定義內容。

<stddef.h>是一個C頭和保證以限定在全局命名空間的所有符號,並在還可以限定事std命名空間。

因此,正如您在Visual Studio上所說的那樣,可以使用size_t因為它會將size_t注入全局命名空間(可能已包含“stddef.h”)。 如果你想在任何編譯器上工作,請包括stddef.h

(但是,作為純C ++粉絲,我個人更喜歡std::size_t )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM