如何从 c/c++ 中的以下函数获取所有参数?

发布于 2024-12-04 19:27:47 字数 413 浏览 2 评论 0原文

以下是我的方法函数的实现,

static VALUE myMethod(VALUE self, VALUE exc, const char* fmt, ...) { 
   // Need to get all the arguments passed to this function and print it 
}

调用方式如下:

myMethod(exception, ""Exception message: %s, Exception object %d",
          "Hi from Exception", 100);

您能否提供 myMethod() 的代码,该代码将访问所有参数并将其打印出来。

提前致谢。

following is the implementation of my method

static VALUE myMethod(VALUE self, VALUE exc, const char* fmt, ...) { 
   // Need to get all the arguments passed to this function and print it 
}

function is called as follows:

myMethod(exception, ""Exception message: %s, Exception object %d",
          "Hi from Exception", 100);

Can you provide the code for myMethod() that will access all the arguments and print them out.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

森林迷了鹿 2024-12-11 19:27:47

va_start 和 va_arg 宏用于获取函数中的变量参数。
可以在 Microsoft 网站上找到示例: http ://msdn.microsoft.com/en-us/library/kb57fad8(v=vs.71).aspx

在你的情况下,这有点棘手,因为你需要解析格式字符串以准确了解应给出多少个参数以及它们的类型。幸运的是,CRT 包含一个用于此目的的函数。 vfprintf 函数可以被赋予一个 va_list (从 va_start 获得)。 vfprintf 将使用这个来处理所有额外的参数。请参阅http://www.cplusplus.com/reference/clibrary/cstdio/vfprintf/< /a> 为例。

The va_start and va_arg macro's are used to get the variable arguments in a function.
An example can be found on the Microsoft site: http://msdn.microsoft.com/en-us/library/kb57fad8(v=vs.71).aspx

In your case it's a bit trickier, since you need to parse the format string to exactly know how many arguments should be given and of which type they are. Luckily, the CRT contains a function for that. The vfprintf function can be given a va_list (which you get from va_start). vfprintf will use this one to process all the extra arguments. See http://www.cplusplus.com/reference/clibrary/cstdio/vfprintf/ for an example.

兔小萌 2024-12-11 19:27:47

一种方法是使用 vsnprintf()。

示例代码:

char buf[256];
va_list args;

va_start(args, fmt);

if(vsnprintf(buf, sizeof(buf), fmt, args) > 0)
  fputs(buf, stderr);

va_end(args);

One way is to use vsnprintf().

Sample code:

char buf[256];
va_list args;

va_start(args, fmt);

if(vsnprintf(buf, sizeof(buf), fmt, args) > 0)
  fputs(buf, stderr);

va_end(args);
徒留西风 2024-12-11 19:27:47

您需要使用 va_start 和 va_arg 宏来获取参数。
你可以看看这个 - 它有一些例子。

http://www.go4expert.com/forums/showthread.php?t=17592

You need to use va_start and va_arg macros to get the arguments.
You can take a look at this - it has some examples.

http://www.go4expert.com/forums/showthread.php?t=17592

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文