gpt4 book ai didi

我可以使用字符串作为宏来在 C 中传递该宏的值吗?

转载 作者:行者123 更新时间:2023-11-30 18:44:45 25 4
gpt4 key购买 nike

我试图实现 C 将我的字符串解释为宏。

嘿,我们假设有一个定义的宏,

#define ABC 900

如果我定义;

char* s[] = "ABC" ; 

那么,

printf("%d",s) ; 

编译器有什么方法可以将“ABC”理解为宏 ABC 并将 900 整数值传递给 printf 吗?

#include<stdio.h>
#define abc 15

int main(void) {

char a[] = "abc" ;

printf("%d",a);


return 0;
}

当我尝试上面的代码时,我得到的不是我想要的输出 15 ,而是 6487568 ,我猜它是该字符串的整数。

编辑:这些是随机值或字符串地址。 (如下其他人所述)

最佳答案

不,你想做的事情是双重不可能的。您无法在运行时按名称访问变量(字符串 -> 变量),因为编译后的机器代码对 C 代码中的名称一无所知,并且您无法从编译器访问宏,因为编译器对宏一无所知(它们在编译器看到代码之前就被预处理器扩展)。

换句话说,编译/执行发生在多个阶段:

  1. C 源代码经过预处理(消除了 #include#define 等指令并扩展了宏)。
  2. 预处理后的 token 流被传递给编译器,编译器将其转换为机器代码(可运行的程序)。
  3. 程序终于运行了。

简化示例:

// original C code
#define FOO 42
...
int x = y + FOO;

预处理后:

...
int x = y + 42;

编译后:

movl %ecx, %eax
addl $42, %eax

第 2 步中没有任何 FOO 的痕迹,最终的代码对 xy 一无所知。

诸如字符串之类的变量值仅在运行时存在,即第 3 步中。您无法从那里返回到第 1 步。如果您想在运行时访问有关宏的信息,则必须将其显式保存在某种数据结构中,但这一切都不是自动的。

关于我可以使用字符串作为宏来在 C 中传递该宏的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56765872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com