是否存在使用编译器指令宏的 itoa 替代方案

Posted

技术标签:

【中文标题】是否存在使用编译器指令宏的 itoa 替代方案【英文标题】:is itoa alternative exist using compiler directive macros 【发布时间】:2011-05-15 07:48:57 【问题描述】:

我想知道是否可以使用字符串化编译器指令对整数变量进行字符串化。 我尝试使用:

#define stringize(a) #a
#define h(a) stringize(a)
#define g(a,b) a##b
#define f(a,b) g(a,b) 

int main()

  int num = 1024;
  printf("%s=%s\n",stringize(h(f(1,2))), h(f(1,2)));  //1. h(f(1,2))=12
  printf("%s=%s\n",h(h(f(1,2))), h(f(1,2)));          //2. "12"=12
  printf("%s=%d\n", h(num),num);                      //num=1024
  return 0;

所以在字符串化宏(#1)中添加另一个级别将使替换首先发生,然后将其放入代码(#2)中,以类似的方式可以在编译时将变量替换为值。 我的意思是说如果 var = value;那么有什么办法可以 some_macro(var) --> 可以把它字符串化成“值”吗?

【问题讨论】:

【参考方案1】:

没有办法使用预处理器获取变量的值 - 预处理(顾名思义)发生在编译之前,并且在那个阶段变量不存在。

【讨论】:

【参考方案2】:

没有。预处理器作用于标记,它不知道变量及其值。如果值是从标准输入读取的,你想得到什么?

【讨论】:

以上是关于是否存在使用编译器指令宏的 itoa 替代方案的主要内容,如果未能解决你的问题,请参考以下文章

inline内联函数

itoa() 的 C++ 标准替代方案,用于将 int 转换为以 10 为底的 char*

_itoa 和 itoa 有啥区别?

是否有任何控制循环展开的预处理器指令?

C-宏定义, 预处理, 条件编译

替代Flex编译器