首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序基本概念

虽然这个Windows下可执行文件包含是32x86指令,其文件格式和Linux下可执行文件有很大差别,换句话说,能被Windows操作系统加载执行程序不能被Linux操作系统加载执行,因为这两种操作系统加载执行程序机制很不一样...如果这个C程序只用到了C标准库,是可以跨平台;如果这个C程序用到了Windows操作系统提供而Linux操作系统没有提供库和接口,那么Linux下是编译不了。...调试技能我们在后续学习中慢慢培养,首先我们要区分清楚程序中Bug分为哪几类。 编译错误 编译器只能翻译语法正确程序,否则将导致编译失败,无法生成可执行文件。...虽然大部分情况下编译器给出错误提示信息能够指出错误代码位置,但也有个别时候编译器给出错误提示信息帮助不大,甚至会误导你。开始学习编程前几个星期,你可能会花大量时间来纠正语法错误。...对于初学者来说,最想看到错误提示其实是这样:“main.c程序第1行第19列,您试图包含一个叫做stdoi.h文件,可惜没有找到这个文件,但我却找到了一个叫stdio.h文件,猜这个才是您想要

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

C++ 动态新闻推送 第6期

每周更新 周刊项目地址 github,在线地址 discord讨论群组 |飞书讨论群组|知乎专栏 欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue ---- 资讯 编译器信息最新动态推荐关注... -stdlib=libc++某些场景下复制可能出现问题。...测试了没复现出来 c++20特性用例子描述 没什么说,就是看代码 Summary of C/C++ integer rules 使用整数上注意事项,讲了很多,包括整数提升相关细节 这里列出笔者比较感兴趣...位移与溢出结合问题 循环计数 条件比较 符号不一样,可能死循环 编译器警告 C++ coroutines: Basic implementation of a promise type Raymond...gcc trunk分支已经支持了,可以godbolt玩一玩 Roi Barkan “Argument passing, Core guidelines and concepts” 讨论参数

47320

讲解cl: 命令行 error D8021 :无效数值参数“Wno-cpp” 和 cl: 命令行 error D8021 :无效数值参数“Wno-unu

讲解cl命令行错误D8021: 无效数值参数"/Wno-cpp"和"/Wno-unused-function"使用Microsoft Visual Studio(通常是Windows操作系统下)进行...C++编程,我们可能会遇到名为"cl"命令行编译器错误消息"D8021: 无效数值参数"。...当我们使用该参数编译器将不再产生与这些警告相关错误消息或警告信息。 预处理器是C++编译过程中一个重要阶段,它对源代码进行转换和处理。...预处理阶段,预处理器会执行一系列操作,例如宏展开、条件编译以及包含其他文件等。然而,有时我们可能定义了一些预处理宏,但在代码中没有使用它们,或者定义了它们,没有完全使用它们。...这对于某些特定场景下,例如在代码中使用了一些宏没有全部使用时,能够较好地避免编译器警告干扰。

1.1K10

Debug和Release之本质区别

(即不编译assert函数)  /GF 合并重复字符串,并将字符串常量放到只读内存,防止被修改      实际,Debug 和 Release 并没有本质界限,他们只是一组编译选项集合,编译器只是按照预定选项行动...C++ 强类型特性能检查出大多数这样错误如果用了强制类型转换,就不行了。你可以 Release 版本中强制加入 /Oy- 编译选项来关掉帧指针省略,以确定是否此类错误。...这样做好处是这些值都很大,作为指针是不可能(而且 32 系统中指针很少是奇数值,在有些系统中奇数指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于 Debug ...如果你看了以上分析,结合错误具体表现,很快找出了错误,固然很好。如果一找不出,以下给出了一些在这种情况下策略。 1.  ... Debug 版中使用 /W4 警告级别,这样可以从编译器获得最大限度错误信息,比如 if( i =0 )就会引起 /W4 警告。不要忽略这些警告,通常这是你程序中 Bug 引起

3.6K90

教科书不会讲C语言关键字volatile用法

C/C++嵌入式代码中,你是否经历过以下情况: 代码执行正常–直到你打开了编译器优化 代码执行正常–直到打开了中断 古怪硬件驱动 RTOS任务独立运行正常–直到生成了其他任务 如果你回答是“yes...程序中循环查看该状态寄存器值是否变为非0。 下面是最容易想到,错误实现方法: 当你打开编译器优化时,程序总是执行失败。...因为编译器会生成下面的汇编代码: 程序被优化原因很简单,既然已经把变量值读入累加器,就没有必要重新一遍,编译器认为值是不会变化。就这样,第三行,程序进入了无限死循环。...例如,串口中断服务程序中,可能会检测是否接收到了ETX(假如是消息结束标识符)字符。如果接收到了ETX,ISR设置一个全局标志错误做法: 关闭编译器优化情况下,程序可能执行正常。...幸运的话,你编译器可能会发出警告;不幸的话,(或者你不认真的查看编译器警告),你程序无法正常执行。当然,你可以责怪编译器执行了“糟糕优化”。

73320

给程序员入门10点建议!

2、 认真对待编译器给出错误警告。...编译器给出错误警告对于初学者而言至关重要,尽管有时编译器给出错误信息并不能直接找出错误所在,但是对于我们而言,它是唯一线索,跟着编译器错误信息,我们可以找出90%编译错误。...就算是最后实在找不出来,也可以复制错误信息百度搜索一下,除了小概率编译器本身问题,一般而言都可以解决。 ?...这是调试程序基本操作,当然,现在有很多编译器可以进行返回一步操作(比如VS2010),但是需要告诉你们一点就是,不要迷信这个功能,以我多次血经验总结出来——它并不靠谱。...原因在于我们编写程序时所能犯错误可以说是无穷无尽,没有程序员可以说自己从来没有写过bug或者自己写程序不会产生一个bug,资深软件工程师很多时候也无法解决小白遇见错误

68150

详解libtorch error C1021: 无效预处理器命令“warning”

这个错误意味着源代码中使用了无效预处理器命令warning,通常是因为在编译开启了特定警告选项。本篇文章将详细介绍这个错误原因以及如何解决它。错误原因分析这个错误通常与编译器警告选项相关。...C++编译过程中,编译器会根据指定选项检测代码中警告,并据此决定是否生成警告信息。...然而,某些编译器并不支持使用warning命令来控制警告信息生成,因此会报告error C1021: 无效预处理器命令“warning”错误。...检查编译器选项首先,你可以检查编译器选项,确保没有使用任何与警告相关命令。使用libtorch,建议使用与其他C++项目相同编译选项,并遵循标准编译实践。2....这个错误通常与编译器警告选项有关,可能是因为使用了无效warning命令。为了解决这个错误,我们可以检查编译器选项,确保使用与libtorch兼容正确编译器,并及时更新libtorch版本。

33310

云课五分钟-0Cg++默认版本和升级-std=c++17

这些库是C++程序经常需要,例如STL(标准模板库)。而使用gcc编译C程序时,默认不会链接这些C++库。 编译器特性与警告: 随着版本迭代,g++和gcc在某些特性和警告可能存在差异。...例如,某些C++编译器中视为过时特性g++中可能会发出警告,而在gcc中不会。 头文件与处理: C++引入了很多C语言中没有的头文件,所以在这方面的处理上,g++和gcc也存在差异。...这使得它们成为了Linux、Windows、MacOS等多种操作系统首选编译器。然而,跨平台编译,需要注意不同平台之间兼容性问题。...g++处理C++代码,尤其是模板和STL相关代码,可能会产生更多警告信息,这些警告通常是有助于提高代码质量。 开源社区支持: 由于gcc和g++是开源,它们得到了广大开源社区支持。...编译器可移植性: gcc和g++作为跨平台编译器,其自身可移植性也是值得关注一个方面。它们可以各种操作系统运行,并为目标平台生成代码。

80240

谈谈C++新标准带来属性(Attribute)

根据C++17标准,未实现或者无效属性均应该被编译器忽略且不产生任何错误报告(C++17标准之前编译器则参考编译器具体实现会有不同行为)。...当然,标准中(C++17)也明确了,对于不支持或者错误设定属性,编译器也能够忽略不会报错。...环境中,编译程序给出如下提示信息: deprecated.cpp: In function 'int main()': deprecated.cpp:9:14: warning: 'void...不过正确使用属性即便没有正向收益,也不会有负收益,并且相信大部分场景下这是有好处,并且未来编译器更加优化之后,明确意图代码总是能得到更多优化。...,我们运行程序可以得到如下结果(这个例子是Linux x64 gcc11.1下结果,不同操作系统编译器可能结果不同): 空类大小:1 只有一个int类大小:4 一个int和一个空类大小:8 一个

58220

Rust 外刊评论

因为 Rust 编译器通过 miri 来进行常量表达式求值,但是 ra 并没有共享 miri 使用数据结构,未来也不打算这么做,ra团队自己实现了常量表达式求值功能。...AMD 和 Nvidia 都花费大量资金确保他们编译器链与 C++ 兼容,因此使用 C++ 很容易 GPU 启动和运行。但是像 rust-cuda 这样库,依旧很有前景。...国内技术社区好像并没有看到“炒作”这个词用到 Rust 身上,知乎里确实见了几个 Rust 黑粉。在国外技术社区论坛也很少看见这类言论。毕竟 Rust 还是最受欢迎语言。...语句之后再编译汇编:https://godbolt.org/z/G5Ghr5jxd[38],发现并没有通过 memcpy指令进行复制。所以看上去是打印语句抑制了编译器复制消除优化。...评论中有人给出一些建议: 耶鲁大学林忠教授开设 《CPSC 429a, 计算机系统设计原理》 和 《CPSC 425b,移动和嵌入式系统 》[41] 支持 Rust 语言。但是该课程不是公开课。

78130

C++ 动态新闻推送 第9期

Learned To Love Tail Calls in C clang最近有个新优化点 tailcall (尾递归调用优化) 实现在这里 不过其他编译器没实现这个,也就是说,不可移植 作者写...upb是一个pbparser,为了用上tailcall优化,手写了一套优化代码,然后编译器新增了这个优化,原来写代码就可以不用了 这里讨论了写tailcall代码技巧 代码提交在这里 https...://github.com/protocolbuffers/upb/pull/310 针对clang,就用编译器提供优化 https://github.com/protocolbuffers/upb/.../z/K8Mo6hcGa godbolt看一看 注意return fallback,如果没有return,这里就不会优化,解决方法,使用 __attribute__((preserve_most))...原理没有涉及 Guy Davidson - Everything you know about colour is wrong - Meeting C++ online 讲color表示以及各种库相关实现

44310

总结c++ primer中notes

当将超过取值范围值赋给 signed 类型,由编译器决定实际赋值。实际操作中,很多编译器处理signed 类型方式和 unsigned 类型类似。...不幸是,含有未定义行为程序在有些环境或编译器中可以正确执行,并不能保证同一程序不同编译器中甚至在当前编译器后继版本中会继续正确运行,也不能保证程序一组输入可以正确运行且另一组输入也能够正确运行...如果某种类型不支持某种操作,那么这种类型对象也就不能执行该操作 C++ 中,操作是否合法是在编译检查。当编写表达式编译器检查表达式中对象是否按该对象类型定义使用方式使用。...除了用作赋值操作操作数,未初始化变量用作任何其他用途都是没有定义。未初始化变量引起错误难于发现。正如我们之前劝告,永远不要依赖未定义行为。...警告:未初始化变量引起运行问题 使用未初始化变量是常见程序错误,通常也是难以发现错误。虽然许多编译器都至少会提醒不要使用未初始化变量,但是编译器并未被要求去检测未初始化变量使用。

1.6K90

muduo网络库学习之Timestamp类、AtomicIntegerT 类封装中知识点

4、BOOST_STATIC_ASSERT 编译断言      assert 运行时断言 5、使用PRld64 int64_t 用来表示64整数,32系统中是long long int,...64系统中是long int,所以打印int64_t格式化方法是: printf(“%ld”, value);  // 64bit OS printf("%lld", value); // 32bit...简单地说就是防止编译器对代码进行优化。当要求使用volatile 声明变量时候,系统总是重新从它所在内存读取数据,而不是使用保存在寄存器中备份。...// 当出现警告转为错误,停止编译。...-Wpointer-arith          // 对函数指针或者void *类型指针进行算术操作给出警告 -Wshadow          // 当一个局部变量遮盖住了另一个局部变量,或者全局变量

70500

C++ 动态新闻推送 第21期

每周更新 周刊项目地址 github,在线地址 discord讨论群组 |飞书讨论群组|知乎专栏 欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue ---- 资讯 编译器信息最新动态推荐关注...c++最新特性支持 Thriving in a crowded and changing world: C++ 2006-2020 Bjarne StroustrupPLDI发表了重要讲话,...总结了c++近年来飞速发展 这有个pdf 文章 max实现与编译器优化 需要了解simd sse 汇编 Daniel Lemire 新活, 场景是合并两个排好序数组,伪代码这样...advanced C++ software on MCUs 嵌入式平台,比如stm32之类小芯片c++代码。...github.com/o3de/o3de 简单总结-读起来有点费劲 One Friend Ain’t Enough - Jody Hagins [CppNow 2021] 这人想要变参friend,苦于不懂编译器

35330

Qt高级编码约定

提示:使用编译自动测试可以查看测试中所有编译器是否支持C++功能。 Qt源代码中约定 所有代码仅是ascii(仅7字符,如果不确定,请运行man ascii)....另外重构代码编译器会立即通知您是否强制转换会很危险。 编译器/平台特定问题 使用问号运算符要格外小心。如果返回类型不同,则某些编译器会生成在运行时崩溃代码(您甚至不会收到编译器警告)。...enum值将在编译编译器替换,生成更快代码。 而使用define不是安全操作(而且看起来很难看)。 建议参数名字需要完整表达。 大多数IDE将在它们补全框中显示参数名。...避免操作 不要继承模板/工具类 由于析构函数不是virtual,这会导致潜在内存泄漏问题。 这些符号没有被导出(大部分是内联),会导致报符号冲突编译错误提示。...因为是GCC 4.7和更早版本存在一个错误,需要捕获此错误如果您这样做,则Clang 5.0和更高版本将产生警告: void Foo::something() { ...

1.7K30

【笔记】《深入理解C++11》(下)

阅读并笔记途中跳过了一些之前已经总结过内容, 而对于一些自己看书后依然没搞清楚内容(例如SFINAE和内存模型)搜索资料进行了扩展, 还补充了一些原书没有介绍稍微有所相关内容, 参考文献每一段开头给出...必须是个常量表达式 常量表达式值必须在使用前初始化, 但是如果没有代码用到其地址, 编译器可以不生成数据, 直接将常量表达式作为编译时期值使用 编译浮点常量表达式精度至少要等于/高于运行时浮点数常量精度...但不同于abort(), 系统不会判断程序为错误退出因此不会进行额外异常分析. quick_exit()也可以用at_quick_exit()注册一批函数退出时调用, 标准要求至少支持32个 域...view=msvc-170 C++11标准化了一种批注C++方法(变量, 类, 块都行)附加语法, 写为两个中括号中间关键词, 一般放置目标上面一行或者目标的最前方, 通常会在触发时候产生编译器警告...maybe_unused]] (C++17) 当目标有意暂时不使用时, 令编译器不要发出警告 [[likely]] (C++20) 标记此分支为热代码, 提示编译器可以进行优化 [[unlikely]]

1K30

适合具备 C 语言基础 C++ 入门教程(八)

-20210220203259062] 看到上述编译信息,我们看到三个警告信息,第一个警告信息说是 int *p =str;这句代码,int *p这是一个变量,要去操作str这个字符串,这个字符串是一个常量...这是因为当前使用系统是64,那么 char *和int *是8个字节,但是unsigned int来说,只有4个字节,所以也就造成了上述警告,但是这个警告与本节所讲类型转换无关,其涉及到所使用编译平台区别...C++ 类型转换 本节核心内容还是讲解 C++,上述中 C语言部分是为了引出C++强制转换,在上述中,我们提及了 C语言隐式转换和强制转换,实际 C++中也有与之对应内容, C++中跟强制转换效果一样便是...,编译结果如下所示: [image-20210220205252531] 编译之后,如上图所示,出现了两个错误,这个错误也是刚刚在 C语言编译警告所提及,就是因为当前操作系统是 64,而char...static_cast 静态类型转换跟动态类型转换则存在不同,它转换则是由编译时候就由编译器确定好了转换类型。

35420

让vc编译程序减小体积

编译具体方法是:"build(编译)--->Configuration(配置)"中将"Win32 debug"移去,然后再次编译可以发现文件已经小了很多,才24k.离我们目标还很远呢....二,设置自己入口点函数 C或C++程序默认入口函数是main()或WinMain(),但我们现在不用什么Main,WinMain.因为这些都不是直接入口点,编译器产生exe文件时候,将为我们生成真正入口点...小后门就成功了 不被查杀哦 ^_^ // 编译器 cl.exe(Visual C++ 6.0) // 没有做任何优化情况下,编译大小为:16K // 编译优化后: 1K (用16进制编辑器把尾部0x00.../J 默认 char 类型是 unsigned /Wp64 启用 64 端口定位警告 /nologo 取消显示版权消息 /WX 将警告视为错误 /showIncludes 显示包含文件名 /WL 启用单行诊断...错误报告”文件 /codepage: 指定打开源文件要使用代码页 /utf8output UTF-8 编码输出编译器消息 /main: 指定包含入口点类型(忽略所有其他可能入口点

1.9K10

C++程序员转向C#十大陷阱

撰文/Jesse Liberty, 编译/荣耀 ---- C# 和 C++语法很相像, 很多语法改变是小而琐细。有一些改变衬于粗心C++ 程序员来说是潜在陷阱。...已经编辑了一个C++和C#语法不同点列表(可在web站点找到这个列表。站点,点击Books可以浏览《Programming C#》,也可以点击FAQ看看)。...已经编辑了一个C++和C#语法不同点列表(可在 web站点找到这个列表。站点,点击Books可以浏览《Programming C#》,也可以点击FAQ看看)。...实际,C#中没有显式析构器。 如果你处理一个未受管制资源,当你用完,你需要显式地释放那些资源。...一个好消息是误用赋值操作符而不是相等操作老毛病不会再犯了。因此,如果这么写: if ( x = 5 ) 将会得到一个编译错误,因为x = 5结果为5,而它不是布尔值。

2.1K10
领券