草庐IT

external_deps

全部标签

c++ - extern "C"、重载和函数指针可能存在歧义

正常的功能,可以写extern"C"intFrotz(int);//inaheaderintFrotz(intx){returnx;}然而,对于函数指针,这似乎在编译器之间实现不一致。extern"C"intKlutz(int(*)(int),int);intKlutz(int(*fptr)(int),intx){return(*fptr)(x);}在声明中,参数也是extern"C"。在定义中,大多数编译器似乎都匹配这些函数,并使Klutz成为extern"C"函数。然而,Sun和Cray编译器将这些函数解释为不同的,产生了重载的intKlutz(int(*fptr)(int),in

【05】STM32·HAL库开发-C语言基础知识 | stdint.h介绍 | 位操作 | 宏定义的使用 | 条件编译 | extern声明 | typdef使用 | 结构体、指针、代码规范介绍。

这里写目录标题1.stdint.h简介(了解)2.位操作(掌握)2.1给寄存器某个位赋值3.宏定义(掌握)3.1带参数的宏定义4.条件编译(掌握)5.extern声明(掌握)6.类型别名(typedef)(掌握)7.结构体(掌握)8.指针(掌握)9.代码规范(熟悉)10.总结(了解)1.stdint.h简介(了解)  stdint.h是从C99中引进的一个标准C库的文件,可以在MDK5的安装路径:D:\MDK5.34\ARM\ARMCC\include中找到。  stdint.h定义了很多类型别名,将有符号的char类型定义别名为int8_t等,使用此套别名有易于移植。  在MDK中需要配置才

c++ - 使用 extern "C"链接的过载解决方案

在混合的C/C++项目中,我们需要从C调用C++函数。要调用的函数被重载为三个独立的函数,但我们可以从C端忽略它,我们只选择最合适的并坚持使用那个。有两种方法可以做到这一点:(1)编写一个带有extern"C"函数的小型C++包装器,将调用转发给选定的重载函数,或者(2)仅声明我们想要的一个函数的hackish方法以extern"C"的形式从C调用。问题是,选择第二种变体是否有任何缺点(除了噩梦和恶业)?换句话说,给定三个重载函数,其中一个被声明为exern"C",我们是否应该预料到C++方面的问题,或者这是否根据标准明确定义? 最佳答案

c++ - 我是否需要一个 extern "C" block 来包含标准 POSIX C header ?

我是否需要extern"C"{}block来在C++程序中包含标准Cheader。只考虑在C++中没有对应物的标准C头文件。例如:extern"C"{#include#include} 最佳答案 系统C头文件通常已经包含一个extern"C"block,由#ifdef__cplusplus保护。这样,函数在编译为C++时会自动声明为extern"C",您无需手动执行此操作。例如在我的系统上unistd.h和fcntl.h以__BEGIN_DECLS开始并以__END_DECLS结束,它们是在sys/cdefs.h中定义的宏:/*C+

c++ - 声明一个数组,其大小声明为 extern const

我在初始化一个大小定义为externconst的数组时遇到问题。我一直遵循这样的规则,即全局变量应该在头文件中声明为extern,并且它们的相应定义应该在一个实现文件中,以避免变量重新声明错误。这种方法工作得很好,直到我不得不初始化一个大小被定义为外部常量的数组。我收到一个错误,指出需要一个常量表达式。但是,如果我尝试为const变量赋值,编译器会正确地提示无法将值赋给常量变量。这实际上证明编译器确实将变量视为常量。那为什么声明一个同样大小的数组会报错呢?不使用#define有什么方法可以避免这种情况吗?我也想知道这个错误的原因。包.h:#ifndefPACKAGE_H#defineP

c - 链接 : error LNK2001: unresolved external symbol NtProcessStartup

我是Windows驱动程序开发和微过滤器的新手,我正在尝试构建nullFilter使用命令行工具的示例。所以我将#pragmacomment(lib,"FltMgr.lib")添加到.c文件并成功发出以下命令:cl.exe/nologo/Fo../../bin\filter.obj/cfilter.c/D_AMD64_rc.exe/nologo/Fo../../bin\filter.resfilter.rc但是,当我尝试创建sys文件时:link.exe/nologo/DRIVER:WDM/out:../../bin\filter.sys../../bin\filter.obj../.

windows - 无法从另一个内部调用 .bat 文件 - "not recognized as an internal or external command"错误

我尝试查看与此相关的其他问题,但没有成功。我试过直接调用另一个bat文件(例如“otherBat.bat”)、“call”命令,甚至是“start”命令。但是所有这些都失败了,我不知道为什么。两个.bat文件都在同一个文件夹中,我没有更改目录,所以我不知道问题是什么......如有任何帮助,我们将不胜感激^_^编辑:抱歉,这是代码:)主要.bat:echoTestrun...entervariable1set/pvar1=:echoTestrun...entervariable2set/pvar2=:callother.bat%var1%%var2%pause其他.bat:echoWo

bazel-可以skylark动作读取命令行标志(strict_java_deps)

我正在努力实施类似的功能StrictJavaDeps对于Rules_scala。我真的很想有能力在运行时配置warn或者error.我似乎还记得Skylark规则无法创建和访问命令行标志,但我不记得它们是否可以访问现有标志?主要区别是现有的已经被解析,因此也许它们也通过某些CTX传递。看答案您想要的标志(strict_java_deps)目前无法通过Skylark提供。没有理由我们不能添加它#3295追踪。对于其他标志,上下文可以访问配置片段,该片段可以访问某些解析的命令行标志。我想你想要什么ctx.碎片,然后使用碎片得到Java碎片,然后从中获得default_javac_flags:#ru

c++ - 如何使用 mingw 在代码块中的 exe 上启用 ASLR、DEP 和 SafeSEH?

我尝试在ASLR的链接器选项中使用-dynamicbase-pie和-e_mainCRTStartup但是当我在ollydbg中加载它时,它总是以400000加载 最佳答案 您可以使用-Wl,--nxcompat启用DEP。您也可以以相同的方式将--dynamicbase传递给链接器,但遗憾的是它不会发出必要的重定位表。作为解决方法,您可以传递-Wl,--dynamicbase,--export-all-symbols。像main这样的单个符号的显式__declspec(dllexport)也可以工作,这是目前Rust编译器中使用的

windows - VS Express 2013 错误 DEP1700 : The recipe file "xxxxx.appxrecipe" does not exist. 您可能需要构建您的项目

我刚刚修复/重新安装了我的Windows8.1PC,然后我安装了VS2013Express。但是每次我构建我的项目(我所有的项目)时,它都会给我这个错误:Error1Error:DEP1700:Therecipefile"xxxxx.appxrecipe"doesnotexist.Youmayneedtobuildyourproject.我已经尝试了这些步骤:修复我的VS2013Express卸载VS2013Express-重新启动PC-安装VS2013Express重新检查我的项目并从头开始构建它。但这些都不适合我。任何人都可以帮助我吗?因为在重新安装我的电脑之前一切正常。