为什么有人使用int而不是bool数据类型?

时间:2019-05-22 19:29:19

标签: c++ c typedef

最近,我在一个项目中看到他们将defint int键入为BOOL并用它代替了bool。这样做有什么好处吗?

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
#include <cmath>

#include <assimp/scene.h>
#include <assimp/Importer.hpp>

    static void glfwError(int id, const char* description)
{
    std::cout << description << std::endl;
}

int main(int argc, char *argv[]) {
    if (!glfwInit()) {
        printf("failed to initialize GLFW.\n");
        return -1;
    }



    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, true);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    auto window = glfwCreateWindow(1000, 600, "awesome", nullptr, nullptr);
    if (!window) {
        return -1;
    }

    glfwMakeContextCurrent(window);
    if (glewInit()) {
        printf("failed to initialize OpenGL\n");
        return -1;
    }

    printf("OpenGL %s, GLSL %s\n", glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION));

    while(!glfwWindowShouldClose(window)) {
        glClearColor(0.f,
                     0.f,
                     1.f,
                     1.f
                     );
        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers(window);
        glfwPollEvents();
    };

    Assimp::Importer importer;
    aiScene* scene;

    return 0;
}

2 个答案:

答案 0 :(得分:6)

如果他们经常与C代码进行交互,则可能会这样做。由于C没有bool类型-至少直到C11(我认为是C99,也许是C99)才引入_Bool类型-我真的不记得它是否与C ++兼容{ {1}}-他们应该刚采用bool关键字(IMHO),但我离题了。

此外,在C ++ 98标准早于C ++获得bool的C ++标准库中也很常见。

因此,传统 C兼容性是答案。

答案 1 :(得分:1)

C在1999年标准之前没有专用的布尔类型-任何具有非零值的标量都被认为是“ true”,而零值被认为是“ false”。常见的惯例是使用宏和/或typedef创建布尔值:

#define BOOL int
#define TRUE (1)
#define FALSE (0)

typedef int bool;
static const bool true = 1;
static const bool false = 0;

或类似的东西。

因此,您正在寻找的是旧的(C99之前的)C代码,或者是在该标准发布之前学习过C的人编写的代码。

请注意,C仍将 any 非零标量值视为“ true”,并且ifforwhile/do while语句中的控制表达式可以不必专门具有布尔类型。由于它是从C派生的,因此即使它也具有专用的布尔类型和运算符,在C ++中也是如此。