此问题:
Print template typename at compile time
关于如何在编译时获取典型的C ++编译器以打印类型名称的建议。但是,它们依赖于触发编译错误。
我的问题:我可以让C ++编译器打印类型的名称不带停止编译吗?
通常,答案是“可能不会”,因为可以将有效程序编译到其目标对象中,而无需在任何地方打印任何内容,因此,我要特别问一下GCC和clang,并可能使用预处理器指令,编译器内置函数或任何特定于编译器的技巧。
注意:
using/typedef
语句,模板参数值,可变参数模板等后面打印类型。如果该类型明确可用,则可以只使用#message "my type is unsigned long long"
之类的东西。您可以使用#pragma message <message_string>
。 GCC和CLANG都支持它。
从GCC docs:
GCC还提供了一种简单的机制,可以在编译。
#pragma message "string"
在编译时将字符串作为编译器消息打印。消息是仅供参考,既不是编译警告也不是错误。可以使用'\ n'转义符将换行符包含在字符串中顺序。
以及来自CLANG docs:
除了控制警告和错误编译器,可以生成自定义警告和错误消息通过以下实用程序:
// The following will produce warning messages #pragma message "some diagnostic message" #pragma GCC warning "TODO: replace deprecated feature" ``` // The following will produce an error message #pragma GCC error "Not supported"