Tag: 包括

如何包含头文件?

我在工作区中有一个带有* .c和* .h文件的普通C代码。 我有一个头文件1.h声明一些结构为 struct my1 { int a; .. .. }my_t; 但是当我尝试在另一个头文件2.h中声明类型struct my1的变量时,如下所示: – struct my1 variable1; 它在此声明点出错。 在2.h文件中看起来my1未定义。 在文件1.h中我需要包含2.h,因此在文件2.h中我不能包含1.h,因为害怕递归包含。 我的问题是: – 在这种情况下,我需要声明什么才能解决编译错误? 这一切让我想到了有关头文件包含的更多问题。 如何包含头文件,按什么顺序,哪个头文件首先是哪一个? 递归包含头文件会导致错误一个文件包括其他包括其他包括第一个? 由于某些安全原因,无法发布实际的代码片段,如果这个问题在某种程度上会带来一些可读性问题,那就很抱歉。

Visual Studio代码包含在include目录中找不到的文件(Windows 10)

我试图在Visual Studio代码中获得intellisense。 我从市场上下载了C / C ++扩展: https : mingw32-base mingw32-gcc-c++ mingw32-base ,还安装了包含mingw32-base和mingw32-gcc-c++ MinGW。 我在环境变量中将MinGW bin文件夹添加到Path 。 当我在.c文件中添加任何include语句时,例如#include ,Visual Studio Code说: Include file not found in include directory 我没有正确配置? 如何获得C / C ++的智能感知?

C中的代码中间包含了什么?

拜托,您能告诉我下面的代码是做什么的吗? …code… #include file.h …code… 我曾经习惯于把每个文件包括起来。 我以前从未见过这个,也无法在互联网上找到任何东西。

在编译时将文件读入字符串

我想在文件中写一些东西(我们称之为foo.cpp )并在编译时将它作为字符串包含在我的程序中 ,类似于#include的方式。 现在我正在使用这个C预处理器#define : #define toString(src) #src 将一堆代码转换为字符串,如下例所示: const char* str = toString( int x; void main(){} ); 如果需要,您可以在那里阅读宏字符串化。 我想将该代码移动到外部文件,该文件将在编译时“链接”。 我不希望文件必须与程序一起分发,如果我在运行时读取它就是这种情况。 我尝试使用#include指令,如下所示,但编译器拒绝了它: const char* str = toString( #include “foo.cpp” ); g++似乎完全混淆了,但是clang++给了我这个错误: error: embedding a #include directive within macro arguments is not supported 有谁知道是否/如何做到这一点? 注意:我正在使用它来编写我的GLSL着色器,尽管我怀疑这些信息是否有用。 PS:在你告诉我这是一个重复的问题之前 ,把我的代码放在一个巨大的字符串中,或​​者使用外部工具(例如xxd )来转储它的hex表示对我来说不是“解决方案”,因为它们并不比我现在的方法更好(即更容易/更清洁)。 几年后更新: 我刚刚意识到我从来没有回答这个问题,因为它被重复关闭了。 当我看到这个提交时 ,我找到了我正在寻找的答案,它本身基于对本文的评论 ,并且从那时起一直在使用它。 简而言之,一个小的汇编文件包含您想要的文件并在给定的NAME下公开它们,使用三个变量NAME_begin , […]

#include 在ac程序中真的做了什么

我是c编程的新手,我编写了一些简单的程序“Hello world”风格。 在所有这些程序中,我把#include放在顶部,但我不确定这究竟是什么意思。 我用谷歌搜索它,我发现stdio.h是一个具有预处理器命令的文件,但什么是预处理器? 我想当我编写代码时,我编译它并且我的代码转换为“计算机”可以读取的forms然后我可以运行它。 有人可以向我解释这个命令的用法是什么吗?

在另一个头文件中包含标头

我在.h文件中定义了一个struct item 。 现在我在另一个.h中定义另​​一个struct tPCB ,它是同一个项目的一部分,我需要tPCB才能有一个item 。 我认为只是制作相同的TurboC项目的一部分将允许我在另一个头文件中使用item,但编译器会抛出“ undefined type: ite ”。 我想我不得不在第二个包含第一个标题,但是我已经看到了相同的代码,但没有这样做。 除了添加#include行以使其工作之外,还有其他方法吗?

“多重定义”,“此处首次定义”错误

我有3个项目: 服务器 , 客户端和共享 。 在Commons中创建头和源对不会导致任何问题,我可以从服务器和客户端免费访问这些function。 但是,由于某些原因,在服务器或客户端项目中创建其他源/头文件总是会导致multiple definition of (…)并且first defined here错误。 例: commands.h (在Client项目的根目录中) #ifndef COMMANDS_H_ #define COMMANDS_H_ #include “commands.c” void f123(); #endif /* COMMANDS_H_ */ commands.c (在Client项目的根目录中) void f123(){ } main.c (在Client项目的根目录中) #include “commands.h” int main(int argc, char** argv){ } 错误: make: *** [Client] Error 1 Client first defined here Client multiple definition […]

#include实际上做了什么?

在C(或基于C语言)中,人们可以愉快地使用这个语句: #include “hello.h”; 而且, hello.h每个函数和变量hello.h可自动使用的。 但它实际上做了什么? 我查看了编译器文档和教程并花了一些时间在线搜索,但我可以形成关于神奇的#include命令的唯一印象是它“复制粘贴” hello.h的内容而不是那行。 不仅如此,还有更多。

包含路径的预处理器并置

我有一组包含在远离目录中的包含,这意味着包含它们需要长包含,例如: #include “../../Path/to/my/file.h” 我有多个这样的东西变得有点不方便所以我想我可以使用#define作为目录路径,然后连接我需要的文件名,即 #define DIR “../../Path/to/my/” #define FILE1 “file.h” #define FILE2 “anotherFile.h” #include DIR FILE1 // should end up same as line in first example after pre-proc 然而,这不起作用…无论如何在C预处理器的工作中连接适合这个?

限制#define标签的范围

限制#define标签范围并避免不必要的令牌冲突的正确策略是什么? 在以下配置中: MAIN.C # include “Utility_1.h” # include “Utility_2.h” # include “Utility_3.h” VOID Main() { … } Utility_1.h # define ZERO “Zero” # define ONE “One” BOOL Utility_1(); // Uses- ZERO:”Zero” & ONE:”One” Utility_2.h # define ZERO ‘0’ # define ONE ‘1’ BOOL Utility_2(); // Uses- ZERO:’0′ & ONE:’1′ Utility_3.h const UINT ZERO = 0; […]