使用方括号而不是引号定义的供应商的预处理指令

Posted

技术标签:

【中文标题】使用方括号而不是引号定义的供应商的预处理指令【英文标题】:Preprocessing directive from a vendor defined using brackets rather than quotes 【发布时间】:2014-12-29 20:35:20 【问题描述】:

我正在查看供应商提供的一些 C 代码,这些代码带有预编译的 C 文件和自己的头文件。我遇到的问题是:由于它是特定于供应商的代码,因此我没有对代码的读/写访问权限(由于某种原因它阻止了我,但这是一个不同的问题)并且他们将预处理指令定义为:

#include <fun.h>

这很好,但由于我无法编辑文件,我无法附加 .h 文件的路径,因为

#include "C:\some\directory\fun.h"

我假设当我在我的计算机上安装他们的软件时,安装并没有把所有东西都放在它应该去的地方,因为它在文档中说它这样做了,而且它是他们软件的新版本,所以。 .是的,错误。

有没有办法告诉编译器包含路径而不将整个内容移动到本地目录或系统目录,我什至不确定这些目录是什么,但我知道有一些.

解决方案: 通过添加路径将文件夹添加到路径目录

项目名称 -> 搜索目录 -> 编译器(这个专门在代码块中) 这也是假设您使用的是 IDE。如果从 cmd 提示符编译,我勾选的解决方案是正确的。

如果您尝试编译的文件不是项目的一部分,它会反复要求您构建文件,然后什么也不做。所以请务必将其添加到项目中。

另外。 我遇到的问题,即无法编辑供应商文件,实际上是由于 只读文件夹 Program Files (x86) 的权限。可能有几种解决方法,仅将权限更改为读/写是不够的。据我了解,我在 Windows 7 平台上工作,这是 Windows 7 的一个功能。我发现将要编辑的文件移动到另一个文件夹,更改代码,然后将其移回更容易。

【问题讨论】:

对于“gcc”,在编译文件的行尾附近使用“-IpathToIncludeFiles”。 I.E 在任何文件名之后。如果您在一个步骤中同时执行编译和链接,请将上述参数放在任何“-LpathToLibrary”和“-llibraryName”参数之前 #include <...> 和#include "..." 之间的唯一区别是在目录中搜索包含文件的顺序。 <...> 首先在系统目录中搜索。 “...”首先在用户目录中搜索 【参考方案1】:

C:\some\directory 添加到包含搜索路径。 大多数编译器使用-I/I 开关来做到这一点

对于gcc,将-I C:/some/directory 添加到编译器命令行

【讨论】:

以上是关于使用方括号而不是引号定义的供应商的预处理指令的主要内容,如果未能解决你的问题,请参考以下文章

include包含头文件的语句中,双引号和尖括号的区别

JSON特殊字符处理

如何知道特定的预处理器指令是不是在第三方 DLL 中定义?

JSON解析错误,出现双引号,反斜杠处理办法

shell_script2

React之事件处理