size_t no XCode

Parece no XCode eu preciso usar std :: size_t em vez de apenas size_t no Visual C ++. Mas isso é uma dor, como eu realmente não quero ter que #include e alterar todos os size_t para std::size_t no meu código … no meu size_t código do Windows_t apenas funciona sem include quaisquer arquivos adicionais.

Existe uma maneira de fazer o meu código existente trabalhar no XCode, (talvez através do arquivo .pch?) Ou o GCC / MSVC ++ é fundamentalmente diferente nesse aspecto e meu código precisa usar std::size_t para ser multi-plataforma?

De acordo com o padrão C ++ 03, 17.4.1.2.4:

Exceto conforme indicado nas cláusulas 18 a 27, o conteúdo de cada header cname deve ser o mesmo que o nome do header correspondente.h, conforme especificado na ISO / IEC 9899: 1990, Linguagens de Programação C (Cláusula 7) ou ISO / IEC : 1990 Linguagens de Programação – C ALTERAÇÃO 1: Integridade C, (Cláusula 7), conforme apropriado, como se fosse incluído. No C ++ Standard Library, no entanto, as declarações e definições (exceto para nomes que são definidos como macros em C) estão dentro do escopo de namespace (3.3.5) do namespace std.

Em outras palavras, optando por usar invés de , você está pedindo especificamente que o tipo size_t esteja dentro do namespace std.

Então, aqui estão as escolhas:

  1. Use , então size_t está no namespace de nível superior, como sugerido por Jesse Good.

  2. Use e use std::size_t .

  3. Use e use uma declaração using para puxar size_t para o namespace de nível superior, como sugerido por cnicutar.

É claro que você poderia confiar no fato de que uma versão específica de um compilador / biblioteca / plataforma permite que você se dê bem, ou escreva códigos diferentes para cada plataforma, ou envolva tudo com autoconf, ou escreva um gerador de código ou sed pré-processador baseado em, ou o que quer que seja … mas por quê?

Talvez dizendo isso em algum lugar perto do topo?

 using std::size_t; 

Use #include .

Então, qual é a diferença entre #include e #include ?

é um header C ++ e tem a garantia de definir todos os símbolos no namespace std e também pode definir coisas no namespace global.

é um header C e tem a garantia de definir todos os símbolos no espaço de nomes global e também pode definir coisas no espaço de nomes std .

Então, como você disse no Visual Studio, size_t pode ser usado porque injeta size_t no namespace global para você (possivelmente já incluindo “stddef.h”). Se você quiser que isso funcione em qualquer compilador, inclua stddef.h .

(Entretanto, como um fã puro de C ++, eu pessoalmente prefiro std::size_t ).