相关疑难解决方法(0)

x86_64 va_list结构的格式是什么?

任何人都有参考va_listx86_64 ABI(在Linux上使用的那个)的表示?我正在尝试调试一些代码,其中堆栈或参数似乎已损坏,这将真正有助于理解我应该看到的内容......

c linux x86-64 abi variadic-functions

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

printf("%d",x) 如何工作/解释?

我想知道具体printf("%d",x)是如何解释的。我只知道编译器保留一个内存来放置'%', '%d''\0'并将其地址返回到,然后根据我们指定的格式说明符printf打印第二个参数。x

那么,如果我使用 example int x=5; char *p="%d"; printf(p,x),它与 是一样的吗printf("%d",x)

c c++ printf

4
推荐指数
1
解决办法
1470
查看次数

vprintf是如何实现的?

如果想在C中编写一个函数,将一个变量参数列表传递给printf一个必须使用该vprintf版本的函数.如何为自定义函数实现此机制?

换句话说,如何是什么套的精髓vprintf除了printf在符合标准的C语言实现?

c variadic-functions

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

Variadic函数在Win32中有效,但在Win64中无效

我已经使用了以下功能很长一段时间了:

void AddRow(int iNumOfColumns,...)
{
    int* pValuePerColumn = (int*)&iNumOfColumns+1;

    for (int i=0; i<iNumOfColumns; i++)
    {
        // Do something with pValuePerColumn[i]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在事实证明它在Win64上为我们的一个客户崩溃了.

我手头没有64位平台,但我假设原因是:

调用该函数时,参数将作为64位值推入堆栈.

在这个假设下,我认为,更换int*size_t*应解决的问题.


我的问题是:

  • 我的分析是否正确?
  • 我的解决方案是否正确
  • 是否有更"常规"的解决方法?

c 64-bit variadic-functions

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

标签 统计

c ×4

variadic-functions ×3

64-bit ×1

abi ×1

c++ ×1

linux ×1

printf ×1

x86-64 ×1