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

时间:2018-02-05 23:15:21

标签: c++ c ifndef

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

#ifndef function_name
void function_name(const char *str, size_t len);
#endif

使用在线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;
}

在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;
}

并且两次都得到5,这意味着在函数名称上使用#ifndef并不起作用。

问题

是否有一些特殊的编译器标志启用此功能或是否有错误?

1 个答案:

答案 0 :(得分:3)

#ifndef X检查是否已定义名为X。函数名称和宏名称属于不同的名称空间。函数X的存在与否不会影响#ifndef X