C U的用例
有些C编译器在命令行上提供-D来定义宏,并提供-U来取消定义宏(内置或用-D定义)C U的用例,c,c-preprocessor,C,C Preprocessor,有些C编译器在命令行上提供-D来定义宏,并提供-U来取消定义宏(内置或用-D定义) 我已经使用了-D,但我对-U很好奇。在实践中它有用的情况有哪些?我只能想到两种情况: 如果您的代码中有一个#ifdef MY_宏或#ifndef MY_宏,并且定义了MY_宏(可能是内置的,否则您可以直接删除它),并且您希望在不使用此宏的情况下编译(以更改#ifdef的行为) 或者,如果您想用不同的定义重新定义宏,您“应该”首先取消定义(我写“应该”,因为如果您不这样做编译器会抱怨,但无论如何一切都可以正常工作)
我已经使用了-D,但我对-U很好奇。在实践中它有用的情况有哪些?我只能想到两种情况:
#ifdef MY_宏
或#ifndef MY_宏
,并且定义了MY_宏(可能是内置的,否则您可以直接删除它),并且您希望在不使用此宏的情况下编译(以更改#ifdef
的行为)-U
和-D
可能是设置这些标志的唯一方法
现实世界的例子:默认情况下,输出一个大型C函数,而不是许多单独的函数,这(根据文档)使C编译器更容易优化最终代码。实际上,无论哪种方式,它都输出相同的C,使用\uu单主机
宏切换行为。但是,在旧机器上编译一个巨大的函数可能会花费很长时间(或者只是失败),因此需要有一种方法来关闭这种行为-U_uusingle_HOST
作为传递给C编译器的参数之一,可以在旧计算机上实际编译Gambit项目,同时仍能享受一定程度的优化
在这种情况下,\u SINGLE\u HOST
的行为可以由Gambit编译器来处理,但这并不是绝对必要的,它给了设计第一个编译器的人更多的自由。这总是好的
这个答案更普遍的版本是,
-U
在构建系统传递一组-D
参数时非常有用,而您不需要所有参数;在系统设置默认定义后,它可以取消设置它们。在(哎哟)30年的C编程中,我几乎没有使用过-U
。它的用例很少。