问题标签 [ifndef]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1375 浏览

c - C 头文件#ifndef #include 错误

我试图弄清楚如何将 C 头文件与#ifndef 和#include 一起使用。假设我有这两个头文件:

标头A.h:

标头B.h

标头A.c

标头B.c

编译 headerB.c 时,它说

我认为,这是因为在headerB.h编译时,它定义了HEADERB_H,然后,当headerA.h想要包含headerB.h时,#ifndef HEADERA_His false = 跳过包含。

这里的最佳做法是什么?我刚刚读到,最佳做法是#include在头文件中执行所有指令,但在这种情况下它看起来像一个问题。

编辑:好的,很抱歉误导你。这只是来自具有更多文件的更大项目的示例。

0 投票
1 回答
308 浏览

c++ - cpp - 为什么监护人不保护我免受多重定义的影响?

我更喜欢 JAVA,但是当 HI-Perf 在需求列表中时,C/C++ 必须出现在桌面上。它确实如此。而且,正如预期的那样,我偶然发现了一些我无法理解并且无法在 SO 中挖掘出来的东西。那么谁能解释一下为什么下面标题中的监护人不工作?

.

并且编译在上面指出的行上给了我一个多重定义错误。

我已经通过将该行移到 .cpp 源文件来使其工作,但我仍然想了解为什么监护人不保护我免于在这里开枪?

我希望我不必说这只是一个反映我所做的虚拟代码——而不是我正在编写的实际代码。

编辑

在多个 cpps 中包含相同的标头导致重复的多个定义错误不能解释为什么。我的意思是我没有从任何这些答案中得到图片——他们只是给出建议(我都不需要)。

当然,我可以深入阅读书籍,并可能了解所有这些如何使编译器在我的控制台中打喷嚏,但询问是否如此更快,并且很可能会帮助其他人理解。

0 投票
2 回答
435 浏览

c++ - 意外的 #ifndef,没有匹配的函数调用(链表 C++)

嗨,我目前正在做一个链表项目,但在这样做时收到一些错误,我似乎无法解决。我得到的第一个错误是未确定的 #ifndef。我感到困惑的是我没有在标题中#include 源文件。

我遇到的第二个错误是在我的 main.cpp 中,我收到一个错误消息“没有对 'List::AddNode(double, double, double,etc) 的匹配函数调用”。

我已经发布了我的所有三个文件,希望有人帮助我找出我收到的这些错误,谢谢。

编辑:感谢那些帮助我的人,这已经解决了我的问题,但现在我收到新错误,说
“未定义对 List::List() 的引用”,

未定义对 List::AddNode(double, double, double, double, double, double, double, double)' 的引用,

未定义对“List::PrintList()”的引用。

主要的

头文件

CPP 文件

0 投票
2 回答
529 浏览

c - 如何使用#ifndef 只执行一次函数内的部分代码?

我只想在 if 块中执行一次代码行。

当然我知道如何通过不同的方式做到这一点(评论部分)。

但我想知道为什么我的代码不能按预期工作。

谢谢。

0 投票
1 回答
1443 浏览

c - 使用 #ifndef 指令在多个 c 代码中重新定义符号

我有一个愚蠢的问题,我不知道它来自哪里。我注意使用#ifndef 指令来确保我所有的#include 都没有被重新定义。可悲的是,他们中的三个正在发生这种情况。这是我的多个文件拱门:

t_include.h

t_function.h

现在 c 文件只包含 t_function.h :

t_function.c

和 t_main_function.c

它应该可以工作,但是在此处链接期间出现错误:

因此,错误仅来自三个符号 sp_complex_convolution_A_output、sp_complex_convolution_A_input1 和 sp_complex_convolution_A_input2,它们在自己的 .h 中定义,也受 #ifndef 指令保护:

ti_sp_complex_convolution_A_input1.h

其他两个也一样...

所以我真的不知道为什么会这样。谢谢帮助

0 投票
1 回答
336 浏览

c++ - 如何将 ifndef win32 与 ifndef iOS 结合使用

我有一个 C++ 代码部分,我想将其排除在构建 iOS 之外。

我该怎么做?

跟进问题:
如果我已经有一个#ifndef WIN32. 我想将排除WIN32iOS是否可以做类似的事情#ifndef WIN32 & iOS
我应该如何将我的代码排除在一个子句中的Win32& both 之上?iOS

PS:
我看到很多帖子解释如何#ifndef退出iOS,但我如何将它与它结合起来#ifndef WIN32是个问题。

0 投票
1 回答
64 浏览

c - Confusion with Preprocessor Directives

I have three files

File "grandparent.h"

File "parent.h"

File "child.c"

Wiki says

Here, the first inclusion of "grandparent.h" causes the macro GRANDPARENT_H to be defined. Then, when "child.c" includes "grandparent.h" the second time, the #ifndef test returns false, and the preprocessor skips down to the #endif, thus avoiding the second definition of struct foo. The program compiles correctly.

q1. "the first inclusion of "grandparent.h" causes the macro GRANDPARENT_H to be defined", So what i understand i its basically defining a macro named GRANDPARENT_H but what i dont understand is that how will the content of that macro (i.e GRANDPARENT_H) would be included in the child.c.

We are just defining the macro GRANDPARENT_H i.e

but how will its content i.e

be included in the child.c

0 投票
1 回答
2563 浏览

c++ - 可以在函数名上使用#ifndef 吗?

我正在使用MicroPython,他们的头文件使用了大量的

使用在线 C 和 C++ 编译器,我尝试使用以下代码在 C++ 中进行测试

在 C 中

两次,我都明白了5,这意味着#ifndef在函数名上使用是行不通的。

问题

是否有一些特殊的编译器标志可以启用此功能,或者它们是否有错误?

0 投票
2 回答
337 浏览

c - 多个 #ifndef 语句 - 应用哪一个

假设我有五个文件:main.c, sample1.c, sample1.h, sample2.csample2.h,其中每个文件DEBUG_PRINTS的定义如下:

并且代码是使用 gcc 编译的:

现在我将DEBUG_PRINTS一个文件中的值更改为1. 如果不打印到终端,您如何确定将应用哪个值?

此外,如何DEBUG_PRINTS在每个文件本地定义 - 与使用static关键字的变量相同?

0 投票
1 回答
2468 浏览

c++ - 命名空间函数的多重定义

我只是无法理解为什么这不会编译。

我有三个文件:

主文件

表达式.h

和表达式.cpp

(Ofc 里面还有更多内容,但即使我评论了除了#includeout 之外的所有内容,它也不起作用)

我用它编译

这是我得到的错误:

问题是,它似乎解析expression.h了两次。如果我只是使用main.cppOR编译它,expression.cpp我不会得到错误。编译器只是忽略我的#ifndef 并继续......

有什么线索吗?