标签: ifndef

为什么只定义一个宏,如果它还没有定义?

在我们的C代码库中,我看到每个宏都按以下方式定义:

#ifndef BEEPTRIM_PITCH_RATE_DEGPS
#define BEEPTRIM_PITCH_RATE_DEGPS                   0.2f
#endif

#ifndef BEEPTRIM_ROLL_RATE_DEGPS
#define BEEPTRIM_ROLL_RATE_DEGPS                    0.2f
#endif

#ifndef FORCETRIMRELEASE_HOLD_TIME_MS
#define FORCETRIMRELEASE_HOLD_TIME_MS               1000.0f
#endif

#ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS
#define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS       50.0f
#endif
Run Code Online (Sandbox Code Playgroud)

这些定义检查的理由是什么,而不仅仅是定义宏?

#define BEEPTRIM_PITCH_RATE_DEGPS                   0.2f
#define BEEPTRIM_ROLL_RATE_DEGPS                    0.2f
#define FORCETRIMRELEASE_HOLD_TIME_MS               1000.0f
#define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS       50.0f
Run Code Online (Sandbox Code Playgroud)

我无法在网络上的任何地方找到这种做法.

c macros c-preprocessor ifndef

92
推荐指数
5
解决办法
4721
查看次数

在Swift中有条件地排除代码

我试图为特定目标排除Swift文件的某些部分.然而,我没有找到#ifndef objective-c指令的替代品,而且如果我使用这种形式:

#if taxi_coops
func pippo(){
    println("pippo");
}
#else
func triggerActiveLocationUpdate(entering:Bool){}
#endif
Run Code Online (Sandbox Code Playgroud)

预处理器完全忽略该指令并尝试编译triggerActiveLocationUpdate.请注意#if taxi_coops指令在同一文件的其他部分中受到尊重.

有没有办法简单地在Swift中排除一些代码和/或为什么我的修复不起作用?

ifndef swift

9
推荐指数
2
解决办法
5307
查看次数

C和Delphi中的条件编译

下一个模式在C代码中很常见:

#ifndef SOMETHING
#define SOMETHING
#endif
Run Code Online (Sandbox Code Playgroud)

这种模式在Delphi代码中也是可能的:

{$IFNDEF SOMETHING}
{$DEFINE SOMETHING}
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

但这并不常见 - 我从来没有见过它.如果Delphi代码需要条件定义,它只是定义它而不IFNDEF检查.

为什么这样?C和Delphi之间条件编译的区别是什么ifndef,以便前者需要检查而后者不需要检查?

c delphi conditional-compilation ifndef

4
推荐指数
1
解决办法
1430
查看次数

如何在makefile构建中启用"#ifndef /#endif"块?

我正在尝试在MuPDF中启用调试选项.出于某种原因,他们使用了我想要使用的代码#ifndef NDEBUG并使其#endif变灰.我在整个图书馆搜索,但找不到任何地方定义的任何NDEBUG痕迹.我已经设法通过添加#undef NDEBUG标题来解决这个问题,但我想知道是否有更多非侵入性的方法来执行此操作.

那么,你能从makefile中启用"#ifndef /#endif"块吗?

另外,为什么你会使用#ifndef灰色代码?不应该是#ifdef NDEBUG吗?

c makefile mupdf ifndef

3
推荐指数
1
解决办法
8690
查看次数

我是否检查是否存在具有或不具有parens的宏功能?

在定义宏函数之前,我可以检查它是否已经存在
(这可以避免覆盖先前的定义).

我可以像这样实现检查和定义:

#ifndef MACRO(X)
#define MACRO(X) FUNCTION(X)
#endif
Run Code Online (Sandbox Code Playgroud)

或者像这样:

#ifndef MACRO
#define MACRO(X) FUNCTION(X)
#endif
Run Code Online (Sandbox Code Playgroud)

当函数已经定义时,两者似乎都有效.
那么,哪个是正确的?哪个更受欢迎?

c c++ macros c-preprocessor ifndef

3
推荐指数
1
解决办法
126
查看次数

命名空间::变量的多重定义,甚至使用 ifndef

我知道我在这里一定做错了什么。

等级.h

#ifndef RANK_H
#define RANK_H
namespace mmi {
int chunk;
void rank(int my_rank);
}
#endif
Run Code Online (Sandbox Code Playgroud)

排名.cpp

#include "rank.h"
namespace mmi {
//do something with chunk
}
Run Code Online (Sandbox Code Playgroud)

主程序

#include "rank.h"
int main() {
    mmi::chunk = 1;
}
Run Code Online (Sandbox Code Playgroud)

以及编译的输出;

g++ -g -Wall -std=gnu++11   -c -o main.o main.cpp
g++ -g -Wall -std=gnu++11   -c -o rank.o rank.cpp
mpic++ main.o rank.o  -o main
rank.o:(.bss+0x0): multiple definition of `mmi::chunk'
main.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
Makefile:12: recipe for target 'main' …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces c++11 ifndef

3
推荐指数
1
解决办法
1501
查看次数

#ifndef可以忽略方法或变量重复吗?

考虑一下代码.

#ifndef FOO_H
#define FOO_H
//Code
#endif
Run Code Online (Sandbox Code Playgroud)

代码可以是以下情况

// Case 1: 
#define foo 0
Run Code Online (Sandbox Code Playgroud)
// Case 2:
void foo_method(){};
Run Code Online (Sandbox Code Playgroud)
// Case 3:
int foo;
Run Code Online (Sandbox Code Playgroud)

foo.h包含在许多C文件中.当我只编译案例1没有错误时,其他情况会抛出重复错误.

为什么foo.h在编译时没有连接到C文件除外?

c conditional-compilation ifndef

2
推荐指数
1
解决办法
96
查看次数

预处理器参数和在 C 中编译 #ifndef #ifdef

编译文件时尝试在我的代码中应用默认值。

我需要在我的代码中将定义的关键字设置为某个值。

因此,当我编译代码并且它在编译器的参数中没有收到任何定义时,它将使用我的默认值。

我不确定如何做到这一点,但我有一点想法:

#ifndef MAXWORKLOAD
#define MAXWORKLOAD 10
#endif
Run Code Online (Sandbox Code Playgroud)

因此,如果我将其放入代码中并在参数中使用此命令行:

gcc -W -Wall 
Run Code Online (Sandbox Code Playgroud)

它会使用 10 有默认吗?

如果我在编译时使用这个命令行:

gcc -W -Wall -DMAXWORKLOAD=5
Run Code Online (Sandbox Code Playgroud)

它将使用 5 作为其新设置?

通过阅读有关此的文档,我不太清楚。

c conditional-compilation c-preprocessor ifndef

2
推荐指数
1
解决办法
1596
查看次数

为什么"已定义"?

请在这里建议我一个提示:

class UIClass
{
public:
    UIClass::UIClass();
};

#ifndef __PLATFORM__
#define __PLATFORM__
    UIClass Platform;
#else
    extern UIClass Platform;
#endif
Run Code Online (Sandbox Code Playgroud)

我包括这两次,得到:

LNK2005 - 已在.obj(MSVS13)中定义的平台.

你可以猜到,这个想法只是定义一次Platform.为什么#ifndef#define失败?我该怎么解决这个问题?

c++ c-preprocessor ifndef

1
推荐指数
1
解决办法
169
查看次数

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

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

#ifndef function_name
void function_name(const char *str, size_t len);
#endif
Run Code Online (Sandbox Code Playgroud)

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

#include <iostream>
using namespace std;

void func();    

#ifndef func
int a = 5;
#else
int a = 3;
#endif    

int main()
{
  cout << "a = " << a << endl;
}
Run Code Online (Sandbox Code Playgroud)

而在C语言中

#include <stdio.h>

void func();


#ifndef func
int a = 5;
#else
int a = 3;
#endif


int main()
{
    printf("Hello World");
    printf("a = %d\n", a);
    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c c++ ifndef

1
推荐指数
1
解决办法
4094
查看次数