小编Ada*_*rsh的帖子

Void**一个通用指针?

void *是一个通用指针,但是呢void **?是void **也一个通用的指针?

我们可以强制转换void **int **,char **等等.

我会感谢堆栈溢出系列的任何信息.

c c++

20
推荐指数
3
解决办法
4471
查看次数

理解C中的堆栈帧

我试图理解C中的堆栈帧,所以我写了一个简单的C代码来分析堆栈帧.

  • 首先,fun1()返回一个局部变量的地址,该地址变量被初始化为10到ptr,这会导致警告但是没关系...如果我打印*ptr的值现在它打印10,即使这很好.. .

  • 接下来fun2()返回一个甚至没有初始化的局部变量的地址,如果我尝试打印*ptr的值,现在它打印10,无论我是否返回a或b的地址...

  • 为了理解这里发生了什么,我使用了gdb.使用gdb,我开始一步一步调试,当我到达fun2()中的" return&a " 行时,我试图打印b的地址,打印&b但是打印 不能取"b"的地址不是一个左值.

我不明白,当我尝试打印a的地址,打印和打印绝对精细,然后为什么不b的地址.*为什么a不是一个左值?

# include <stdio.h>

int * fun1() {
    int a = 10; 
    return &a; 
}

int * fun2()
{
    int a;
    int b;
    return &a;           // return &b;
}

int main ()  
{
    int *ptr;
    ptr = fun1();
    ptr = fun2();
    printf ("*ptr = %d, fun2() called...\n", *ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c gcc gdb memory-layout

6
推荐指数
1
解决办法
779
查看次数

带有 C 预处理器指令的 Shell 脚本

我想将 C 预处理器指令与 shell 脚本一起使用。由于C预处理阶段不编译整个脚本。因此应该可以使用 C 预处理器指令,因为它将被视为脚本的注释。在项目中维护一个包含宏下合并的多个更改的副本也会很有帮助。

这是我为说明而编写的示例代码:

#ifdef HELLO
foo="Hello"
#else
foo="World"
#endif
echo $foo
Run Code Online (Sandbox Code Playgroud)

现在我将此文件另存为testScript.c并使用 gcc 进行编译

gcc -E testScript.c -o testScript.sh -DHELLO
Run Code Online (Sandbox Code Playgroud)

现在我testScript.sh和我在一起了。如果我运行这个脚本,我得到的结果是

#ifdef HELLO
foo="Hello"
#else
foo="World"
#endif
echo $foo
Run Code Online (Sandbox Code Playgroud)

c shell gcc

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

标签 统计

c ×3

gcc ×2

c++ ×1

gdb ×1

memory-layout ×1

shell ×1