it-swarm-pt.tech

tentando usar '#include <stdbool.h>' no VS 2010

Estou tentando usar o arquivo de biblioteca stdbool.h em um programa C. Quando tento compilar, no entanto, uma mensagem de erro aparece dizendo que o intellisense não pode abrir o arquivo de código-fonte stdbool.h.

Alguém pode aconselhar como eu levaria o visual studio a reconhecer isso? Esse arquivo de cabeçalho é válido? Estou lendo um livro sobre o aprendizado de programação C.

23
John
typedef int bool;
#define false 0
#define true 1

funciona muito bem. Os cabeçalhos do Windows fazem a mesma coisa. Não há absolutamente nenhuma razão para se preocupar com a memória "desperdiçada" gasta armazenando um valor de dois bits em um int.

Como Alexandre mencionou em um comentário, o compilador C da Microsoft (fornecido com o Visual Studio) não suporta C99 e provavelmente não vai. É lamentável, porque stdbool.h e muitos outros recursos muito mais úteis são suportados no C99, mas não no Visual Studio. Ele ficou preso no passado, suportando apenas o padrão mais antigo conhecido como C89. Estou surpreso que você não tenha encontrado um problema ao tentar definir variáveis ​​em outro lugar que não seja o início de um bloco. Isso me morde toda vez eu escrevo código C no VS.

Uma solução possível é configurar o Visual Studio para compilar o código como C++. Então quase tudo o que você ler no livro C99 funcionará sem que o compilador seja bloqueado. No C++, o tipo bool é incorporado (embora seja um tipo de 1 byte no modo C++, em vez de um tipo de 4 bytes como no modo C). Para fazer essa alteração, você pode editar as configurações de compilação do seu projeto no IDE ou simplesmente renomear o arquivo para ter uma extensão cpp (em vez de c). O VS definirá automaticamente o modo de compilação de acordo.

As versões modernas do Visual Studio (2013 e posteriores) oferecem suporte aprimorado ao C99, mas ele ainda não está completo. Honestamente, a melhor solução se você está tentando aprender C (e, portanto, C99 hoje em dia) é simplesmente escolher um compilador diferente. MinGW é uma boa opção se você estiver executando no Windows. Muitas pessoas gostam do Code :: Blocks IDE

26
Cody Gray

Crie seu próprio arquivo para substituir stdbool.h que se parece com isso:

#pragma once

#define false   0
#define true    1

#define bool int

No Visual Studio 2010, tive um problema ao usar typedef int bool; como sugerido em outro lugar. O IntelliSense reclamou de uma "combinação inválida de especificadores de tipo". Parece que o nome "bool" ainda é especial, mesmo que não esteja definido.

13
cherno

Como aviso, nas plataformas x64, o VS2017 (não tenho certeza sobre as versões anteriores) define bool como um valor de 1 byte no C++ (por exemplo, um char). Então, é isso

typedef int bool;

pode ser realmente perigoso se você o usar como um int (4 bytes) em arquivos C e como um nativo bool em C++ (1 byte) (por exemplo, um struct em um .h pode ter tamanhos diferentes, dependendo se você o compilar com C ou C++).

2
dacap