如何连接三个定义类型:string + number + string?

时间:2017-08-23 10:03:31

标签: c macros

我想使用定义

来构思以下字符串
#define LOG_FLOAT_MARKER "%s%d.%010d"

到目前为止我已经

  #define EXP (10)
  #define LOG_FLOAT "%s%d.%0"
  #define D "d"

我正在尝试创建一个像这样的字符串

#define LOG_FLOAT_MARKER LOG_FLOAT EXP D 

但没有得到预期的输出,有些提示?

2 个答案:

答案 0 :(得分:4)

(10)您不能拥有EXP,因为您不希望括号成为结果的一部分。

你必须使用字符串化和一些跳跃:

#define EXP 10

#define JOIN(a, b, c)      a #b c
#define JOIN2(a, b, c)     JOIN(a, b, c)
#define LOG_FLOAT_MARKER   JOIN2(LOG_FLOAT, EXP, D)

另外,我认为使用名为D的预处理程序符号会遇到麻烦。

答案 1 :(得分:1)

我不确定我是否理解你要做的事情。您可能正在寻找viewController说明符:

*

有关printf( "%s%d.%0*d", "string", 1, 1, 1 ); // output: string1.1 printf( "%s%d.%0*d", "string", 1, 2, 2 ); // output: string1.02 printf( "%s%d.%0*d", "string", 1, 3, 3 ); // output: string1.003 的完整说明,请参阅this