问题标签 [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.
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_H
is false = 跳过包含。
这里的最佳做法是什么?我刚刚读到,最佳做法是#include
在头文件中执行所有指令,但在这种情况下它看起来像一个问题。
编辑:好的,很抱歉误导你。这只是来自具有更多文件的更大项目的示例。
c++ - cpp - 为什么监护人不保护我免受多重定义的影响?
我更喜欢 JAVA,但是当 HI-Perf 在需求列表中时,C/C++ 必须出现在桌面上。它确实如此。而且,正如预期的那样,我偶然发现了一些我无法理解并且无法在 SO 中挖掘出来的东西。那么谁能解释一下为什么下面标题中的监护人不工作?
.
并且编译在上面指出的行上给了我一个多重定义错误。
我已经通过将该行移到 .cpp 源文件来使其工作,但我仍然想了解为什么监护人不保护我免于在这里开枪?
我希望我不必说这只是一个反映我所做的虚拟代码——而不是我正在编写的实际代码。
编辑
在多个 cpps 中包含相同的标头导致重复的多个定义错误不能解释为什么。我的意思是我没有从任何这些答案中得到图片——他们只是给出建议(我都不需要)。
当然,我可以深入阅读书籍,并可能了解所有这些如何使编译器在我的控制台中打喷嚏,但询问是否如此更快,并且很可能会帮助其他人理解。
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 文件
c - 如何使用#ifndef 只执行一次函数内的部分代码?
我只想在 if 块中执行一次代码行。
当然我知道如何通过不同的方式做到这一点(评论部分)。
但我想知道为什么我的代码不能按预期工作。
谢谢。
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
其他两个也一样...
所以我真的不知道为什么会这样。谢谢帮助
c++ - 如何将 ifndef win32 与 ifndef iOS 结合使用
我有一个 C++ 代码部分,我想将其排除在构建 iOS 之外。
我该怎么做?
跟进问题:
如果我已经有一个#ifndef WIN32
. 我想将排除WIN32
与iOS
是否可以做类似的事情#ifndef WIN32 & iOS
?
我应该如何将我的代码排除在一个子句中的Win32
& both 之上?iOS
PS:
我看到很多帖子解释如何#ifndef
退出iOS,但我如何将它与它结合起来#ifndef WIN32
是个问题。
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
c++ - 可以在函数名上使用#ifndef 吗?
我正在使用MicroPython,他们的头文件使用了大量的
使用在线 C 和 C++ 编译器,我尝试使用以下代码在 C++ 中进行测试
在 C 中
两次,我都明白了5
,这意味着#ifndef
在函数名上使用是行不通的。
问题
是否有一些特殊的编译器标志可以启用此功能,或者它们是否有错误?
c - 多个 #ifndef 语句 - 应用哪一个
假设我有五个文件:main.c, sample1.c, sample1.h, sample2.c
和sample2.h
,其中每个文件DEBUG_PRINTS
的定义如下:
并且代码是使用 gcc 编译的:
现在我将DEBUG_PRINTS
一个文件中的值更改为1
. 如果不打印到终端,您如何确定将应用哪个值?
此外,如何DEBUG_PRINTS
在每个文件本地定义 - 与使用static
关键字的变量相同?
c++ - 命名空间函数的多重定义
我只是无法理解为什么这不会编译。
我有三个文件:
主文件
表达式.h
和表达式.cpp
(Ofc 里面还有更多内容,但即使我评论了除了#include
out 之外的所有内容,它也不起作用)
我用它编译
这是我得到的错误:
问题是,它似乎解析expression.h
了两次。如果我只是使用main.cpp
OR编译它,expression.cpp
我不会得到错误。编译器只是忽略我的#ifndef 并继续......
有什么线索吗?