C++ 如果使用#define时没有任何赋值,它会做什么?

C++ 如果使用#define时没有任何赋值,它会做什么?,c++,C++,#定义TML_ID-没有为TML_ID赋值。编译或构建可执行文件时没有问题。这会将任何默认值(如null)分配给TML_ID还是TML_ID会被视为未定义?这只是说宏已定义,因此您可以在main或任何其他函数中执行此操作: #ifdef TML_ID printf("Defined!\n"); #else printf("Undefined!\n"); #endif #define不为宏赋值。事实上,它被认为是一个标志,告诉编译器已经定义了一个特定的宏 您可以想象它就像您在不指定任何值的情况下

#定义TML_ID
-没有为TML_ID赋值。编译或构建可执行文件时没有问题。这会将任何默认值(如null)分配给TML_ID还是TML_ID会被视为未定义?

这只是说宏已定义,因此您可以在
main
或任何其他函数中执行此操作:

#ifdef TML_ID
printf("Defined!\n");
#else
printf("Undefined!\n");
#endif
#define
不为宏赋值。事实上,它被认为是一个标志,告诉编译器已经定义了一个特定的宏


您可以想象它就像您在不指定任何值的情况下声明变量一样。它将有一个垃圾值,但会在内存中保留一个空间。但对于宏,定义不会保留空间。只有编译器的提示

在没有指定值的情况下,这种方式的宏通常用于防止多次包含相同的.h文件,这种方式:

#ifndef _FILENAME
#define _FILENAME

//declaration code

#endif
#if defined(MACRO)
例如,如果某个.cpp文件包含两个不同的.h文件,这两个文件都包含我们的.h文件,那么.cpp将只有一个声明代码副本,因为将定义第二次_FILENAME宏,并且将跳过声明代码

#define MACRO

定义名为macro的宏。它没有内容,所以如果你写了一些像
std::cout这样的东西,你怎么知道它没有值呢?一个空字符串怎么样?C++中的同样答案。<代码>现在编辑,谢谢。是的,即使没有给它赋值,它也被认为是已定义的。感谢您的解释。没有任何替换文本的宏没有垃圾值。@PeteBecker这是正确的,这就是我使用术语“标志”的原因。这也是定义的less宏和未使用的变量之间的区别。以下划线开头,后跟大写字母(
\u FILENAME
)的名称和包含两个连续下划线的名称保留供实现使用。不要在代码中使用它们。
#ifdef MACRO
    // code for one branch
#else
    // code for other branch
#endif
#if defined(MACRO)
#if MACRO
    // code for one branch
#else
    // code for other branch
#endif
#if MACRO + 1 > 0
    // code for one branch
#else
    // code for other branch
#endif