包括 iostream 中断uint32_t定义 (C) [已关闭]

include iostream breaks uint32_t definition (C) [closed]

提问人:Duxa 提问时间:10/10/2018 最后编辑:MSaltersDuxa 更新时间:10/10/2018 访问量:330

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

5年前关闭。

编辑:请忽略这个问题。我意识到我是一个白痴,非常好和乐于助人的人指出iostream不是C,而是C++库。

我遇到了一个非常奇怪的问题。

我有一个完整的程序(大约 1000 行)。我需要

#include <iostream> 

当我这样做时,uint32_t中断的 typedef。

它被定义为这样

typedef unsigned __int32 uint32_t;

我正在使用 Visual Studio 2017。这就是它给出的错误

\vc\tools\msvc\14.15.26726\include\cstdlib(19):错误 C2061:语法 错误:标识符“noexcept”

当我将鼠标悬停在现在下划线uint32_t上时,下面说:

uint32_t变量“uint32_t”不是类型名

只评论行

#include <iostream>

程序将按预期编译和运行。

什么给了?

附带问题。我使用 uint32_t 的原因是为了保证我的变量是 32 位长,因为我正在做很多位操作。改用无符号 int 是否安全?

以下是我包括的所有内容的列表:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <iostream>

typedef unsigned __int32 uint32_t;
C IOstream UInt32-T

评论

0赞 Blaze 10/10/2018
恐怕没有保证尺寸,就像普通的.unsigned intint
2赞 Mat 10/10/2018
<iostream>是一个 C++ 标头,你不能在 C 中使用它。
0赞 Duxa 10/10/2018
呜,我是个白痴。谢谢你:)在谷歌上搜索东西时,我没有意识到我在看C++的东西:)
0赞 Marc.2377 10/10/2018
您不应该包含在 C 代码中,因为它是一个 C++ 标头,并且以任何方式都不是 C 标准的一部分。<iostream>
0赞 MSalters 10/10/2018
对于“有帮助”添加 C++ 标签的人:这隐藏了问题。标题正确地指出这是一个 C 问题。

答:

5赞 bolov 10/10/2018 #1

宣布自己是非法的。别这样。C++有一个标准的。使用它。它在 中声明。uint32_tcstdint

https://en.cppreference.com/w/cpp/types/integer

如果你在,那么你需要使用的标题是:Cstdint.h

https://en.cppreference.com/w/c/types/integer

评论

0赞 Duxa 10/10/2018
不过,这是 C,而不是 C++。同样适用?
4赞 bolov 10/10/2018
@Duxa,你是如何在 C ??? 中使用iostream
0赞 bolov 10/10/2018
@Duxa是的,它也适用于 C。除了标题是。stdint.h
0赞 Duxa 10/10/2018
是的,我是个白痴,我没有意识到我在看 C++ 文档。试图包含它以读取文件。需要找到一个 C 解决方案。谢谢。我知道 stdint.h,但认为它会包含太多不需要的东西,所以选择使用 typedef 代替。很高兴知道这是非法的。