小编zer*_*ola的帖子

printf编译器优化?在堆栈中的gdb中找不到"%s"字符

当我的程序在gdb中被反汇编时,我可以看到buf的地址被压入堆栈,但是我没有看到格式字符串被压到它上面.这是什么原因?它是一个聪明的编译器优化?

我已经尝试编译一些printf语句的不同变体,看看我是否可以模仿"%s"字符串(或它的地址)没有被压入堆栈,但我无法做到.

这是程序代码:

int main(int argc, char **argv) {

    char buf[128];
    if(argc < 2) return 1;

    strcpy(buf, argv[1]);

    printf("%s\n", buf);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用gcc 4.5.2编译,32位linux

compiler-construction printf gcc gdb

3
推荐指数
1
解决办法
383
查看次数

函数指针赋值

为什么我能够分配一个函数,该函数返回一个没有为函数指针指定参数的int,该函数指针返回一个int但是接受一个int参数?

例如,当我这样做时:

int f()
{ return 0;}

int (*ptr)(int) = f;
Run Code Online (Sandbox Code Playgroud)

编译器没有给我任何警告

c pointers function

2
推荐指数
1
解决办法
292
查看次数

标签 统计

c ×1

compiler-construction ×1

function ×1

gcc ×1

gdb ×1

pointers ×1

printf ×1