Mem*_*lox 3 c string c-preprocessor
是否可以仅使用预处理器宏用空格(或任何字符)填充字符串?如果是这样,如何?
例子:
#define SOME_STR "v1.1"
#define STR_PAD(str, len) // <-- padding defined string
#define SOME_STR_PADDED STR_PAD(SOME_STR, 10) // evaluates to "v1.1 "
Run Code Online (Sandbox Code Playgroud)
我知道在运行时有简单的解决方案,但我的问题是如何在编译时填充字符串。
非常有趣的问题!在str和len都未知的一般情况下,以及str单独未知的情况下,这似乎是不可能的。如果 的长度str已知并且len受某个合理的固定值限制,则可以生成编译为单个字符串常量的复合三元表达式。
这是一个插图:
// compile time padding: str must be a string constant and len <= 4 + strlen(str)
#define STR_PAD(str, len) (((len) + 1 <= sizeof str) ? str : \
((len) == sizeof str) ? str " " : \
((len) == sizeof str + 1) ? str " " : \
((len) == sizeof str + 2) ? str " " : \
str " ")
Run Code Online (Sandbox Code Playgroud)