C在某种程度上并不完全是C++的一个子集.因此,我们可以通过更改名称(stdio.hto cstdio,stdlib.hto cstdlib)来使用C++中的大多数C函数/头文件.
我的问题实际上是一种语义.在C++代码(使用GCC编译器的最新版本),我可以打电话printf("Hello world!");,并std::printf("Hello world!");和它的工作原理完全一样.在我使用它的参考中也显示为std::printf("Hello world!");.
我的问题是,它是否更适合std::printf();在C++中使用?有区别吗?
我收到了错误
error: 'INT32_MAX' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
但我已经包括在内了
#include <stdint.h>
Run Code Online (Sandbox Code Playgroud)
我正在使用命令编译(g ++(GCC)4.1.2 20080704(Red Hat 4.1.2-44))
g++ -m64 -O3 blah.cpp
Run Code Online (Sandbox Code Playgroud)
我需要做任何其他事情才能编译吗?还是有另一种C++方式来获取常量" INT32_MAX"?
谢谢,如果有什么不清楚,请告诉我!
在 C++ 中,固定宽度整数被定义为optional,但我似乎无法找到推荐的方法来检查它们是否被实际定义。
检查固定宽度整数是否可用的便携式方法是什么?
作为参考,我在C++ 11中进行编译.
我开始使用电路板的位图表示作为以片段为中心的方法编写国际象棋引擎.似乎使用的合适类型是uint64_t,但是,在网上搜索了一下之后,我对这里的"最佳实践"有点不确定.
我开始为游戏板定义.hpp文件.首先,我对不同代码似乎表现出来的类似行为感到困惑.
#include <cstdint>
uint64_t board;
Run Code Online (Sandbox Code Playgroud)
和
#include <cstdint>
std::uint64_t board;
Run Code Online (Sandbox Code Playgroud)
编译得很好.两者有什么区别?这个比那个好吗?
另外,我注意到我甚至不需要包含cstdint就可以使用uint64_t:
#include <iostream>
uint64_t board;
Run Code Online (Sandbox Code Playgroud)
和
#include <iostream>
uint64_t std::board;
Run Code Online (Sandbox Code Playgroud)
两者都编译得很好,就像上面的2个cstdint示例一样.因此,我对如何在C++ 11中使用uint64_t感到困惑,以及为什么所有这四个例子都完全相同.我被告知你想使用cstdint,但似乎iostream也提供了类型def?是否存在"最佳/最安全"的特定方式(例如,在名称空间冲突方面)?
我正在尝试在 Ubuntu 环境中编译一个程序,但我有一些错误提示unknown type name 'uint64_t',unknown type name 'uint16_t'即使我已经包含了cstdint我相信的任何其他要求。似乎是 C++ 库支持问题。
有谁知道如何解决这一问题?
我只是偶然发现了类型,u_int8_t因为它没有在Windows + MinGW中编译(但在Linux下编译得很好).根据该站点,C++ 11标准定义了类型uint8_t.我只是使用后者,一切正常.
出现的问题是:
u_int8_t和uint8_t?u_int8_t?uint8_t如果我使用C++ 11编译器(在不同的操作系统或架构上),可以安全地假设存在吗?intX_t和uintX_t)?我的GNU-Linux平台(Debian的拉伸)有C型u_int8_t,u_int16_t,u_int32_t并u_int64_t在文件中定义sys/types.h的同时uint8_t,uint16_t,uint32_t和uint64_t中定义stdint.h.我发现这些类型在练习X86-64汇编语言和与C交互的过程中很有用.有什么理由我更喜欢一个头文件而不是另一个头文件(无论是'最佳实践',可移植性等)?C++的答案有何不同?