最近,我在一个项目中看到他们将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;
}
答案 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”,并且if
和for
和while/do while
语句中的控制表达式可以不必专门具有布尔类型。由于它是从C派生的,因此即使它也具有专用的布尔类型和运算符,在C ++中也是如此。