草庐IT

C++标准

全部标签

c++ - fclose 一个已经被 fclose 的文件

在我的程序中,我可能会关闭一个已经关闭的文件。当我对一个已经关闭的文件执行fclose时会发生什么?如果不能这样做,如何知道文件是关闭还是打开? 最佳答案 使用同一流调用fclose两次是未定义的行为-很可能会崩溃。无法检查FILE*是否已经关闭,因此安全的解决方案是在关闭后立即将指针设置为NULL:fclose(fh);fh=NULL;来源:“关联文件关闭后,指向FILE对象的指针的值是不确定的”(C草案标准)。“在调用fclose()之后,对流的任何使用都会导致未定义的行为。”(单一UNIX®规范)。

c++ - C 和 C++ 之间的内存布局兼容性

我正在构建一个使用许多函数和struct的C++库在C库中定义。为了避免将任何代码移植到C++,我将典型的条件预处理添加到C头文件中。例如,//my_struct.hoftheClibrary#include#ifdef__cplusplusextern"C"{#endiftypedefstruct{doubled1,d2,d3;#ifdef__cplusplusstd::complexz1,z2,z3;std::complex*pz;#elsedoublecomplexz1,z2,z3;doublecomplex*pz;#endifinti,j,k;}my_struct;//Memo

图文讲透Golang标准库 net/http实现原理 - 客户端

客户端的内容将是如何发送请求和接收响应,走完客户端就把整个流程就完整的串联起来了!这次我把调用的核心方法和流程走读的函数也贴出来,这样看应该更有逻辑感,重要部分用红色标记了一下,可以着重看下。图片先了解下核心数据结构Client和Request。Client结构体typeClientstruct{TransportRoundTripperCheckRedirectfunc(req*Request,via[]*Request)errorJarCookieJarTimeouttime.Duration}四个字段分别是:•Transport:表示HTTP事务,用于处理客户端的请求连接并等待服务端的响

c++ - 在哪里可以看到 C++ 标准库中使用的代码?

当我使用#include编译程序时我在哪里可以看到该文件的内容,而且由于该文件包含声明,我在哪里可以看到这些函数中使用的实际代码?它是对所有人开放还是不对公众开放? 最佳答案 实际代码在您的编译器附带的特定于平台的标准库中,您可以通过查看标准库实现源来了解它。这是GNU的libstdc++的文档(和源代码)(它与gcc一起提供):http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html.从这些镜像之一下载源代码:http://gcc.gnu.org/mirro

c++ - include "file.h"vs <file> 有什么区别?

我在VisualStudio2010中工作。我在ProjectProperties->Linker->General->AdditionalDirectories添加了一个目录如果我使用项目编译"file.h"但如果我使用则不会 最佳答案 您可能假设隐式添加.h到文件名的末尾。这不是真的。你是否使用或""对文件名没有意义。它基本上告诉实现应该以何种顺序遍历包含目录以查找头文件。引用标准:Apreprocessingdirectiveoftheform#includenew-linesearchesasequenceofimpleme

c++ - bool 条件赋值

可以这样在C中模拟bool值:intsuccess;success=(errors==0&&count>0);if(success)...使用stdbool.h可以完成以下操作:boolsuccess;success=(errors==0&&count>0)?true:false;if(success)...据我所知,逻辑运算符和比较运算符应该返回1或0。此外,应定义stdbool.h常量,以便true==1和false==0。因此以下应该有效:boolsuccess;success=(errors==0&&count>0);if(success)...它确实适用于我测试过的编译器。但

c++ - 编译时错误与运行时错误

我很困惑为什么编译器会给出constchars[]="hello";s[2]='t';//CompileTimeErrorchar*t="hello";*(t+2)='u';//RuntimeError我想在这两种情况下,编译器都应该给出编译时错误。谁能告诉我为什么会这样? 最佳答案 在第一种情况下,您正在写入一个const,编译器注意到并可以拒绝它。在第二种情况下,t是一个指向非常量char的指针,因此您可以取消引用它并在*(t+2)处写入。但是,由于t是使用指向只读段的指针初始化的,因此您会在运行时遇到段冲突。您可能会痛苦地配置

c++ - C++ 标准是否要求对 wchar_t 进行编码?

以下是我的2014草案标准N4140的一些摘录22.5Standardcodeconversionfacets[locale.stdcvt]3Foreachofthethreecodeconversionfacetscodecvt_utf8,codecvt_utf16,andcodecvt_utf8_utf16:(3.1)—Elemisthewide-charactertype,suchaswchar_t,char16_t,orchar32_t.4Forthefacetcodecvt_utf8:(4.1)—ThefacetshallconvertbetweenUTF-8multibyt

c++ - 使用#pragma once 有什么危险?

这个问题在这里已经有了答案:Is#pragmaonceasafeincludeguard?(15个答案)关闭5年前。现代C和C++编译器支持非标准的#pragmaonce预处理器指令,其目的与经典的头文件保护类似:#ifndefhopefully_unique_identifier_that_doesnt_hurt_the_code#definehopefully_unique_identifier_that_doesnt_hurt_the_code//somecodehere#endif一个问题,我知道,经典的方法是,一旦你包含了一个标题,你必须#undef标题保护宏来再次包含它(这

c++ - 在 C++ 内联汇编中定义一个变量

假设我们有以下C++代码:intvar1;__asm{movvar1,2;}现在,我想知道的是,如果我不想在__asm指令之外定义var1,我必须做些什么才能将它放入其中。有可能吗?谢谢 最佳答案 为此,您需要使用_declspec(naked)创建一个“裸”方法,并自行编写通常由编译器创建的序言和结尾。序言的目的是:设置EBP和ESP为局部变量保留堆栈空间将需要修改的寄存器保存在函数体中结语必须:恢复保存的寄存器值清理局部变量的保留空间这是一个标准的序言pushebp;Saveebpmovebp,esp;Setstackframe