- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当使用 C 级变量参数时:
void example( size_t length, ... )
{
va_list list;
T x;
va_start( list, length );
//...
x = va_arg( list, T );
//...
va_end( list );
}
某些类型在通过“...
”时会发生变化。例如,float
变成了 double
。如果 T
是这样的类型,我是应该将原始类型还是损坏的类型放入 va_arg
?
如果 C 和 C++ 和/或标准修订版的答案不同,请指出。
(快速浏览这里表明应该使用损坏的类型。我希望不会,因为它被破坏了,因为它需要用户计算类型,如果原始类型在类型别名后面,这会很痛苦,尤其是没有通用原件的别名,例如 size_t
。希望我的帖子标题更易于搜索。)
(经过深思熟虑,我意识到目标变量必须使用经过修饰的类型进行声明。因此,在 va_arg
中使用经过修饰的类型(如果为真)并没有我想象的那么愚蠢。我明白了有时会被 C++11 的 auto
宠坏。)
最佳答案
If T is such a type, am I supposed to put the original type or the mangled one into
va_arg
?
如果T
是一个需要提升的类型,那么你应该放入转换后的类型,否则程序有未定义的行为。
If the answer differs for C and C++ and/or Standard revisions, please indicate that.
据我所知,C 和 C++ 都需要这个。
With more thought, I realize that the destination variable has to be declared with the mangled type
不,这不是必须的。因为可以保证对 va_arg()
的“调用”宏将是您指定为其第二个参数的类型,然后是类似
float f = va_arg(args, double);
会很好,因为va_arg(...)
求值为 double
类型的表达式, 然后将隐式转换为 float
.
编辑:一些标准引语。
我。 C99,7.15.1.1.2:
[...] If there is no actual next argument, or if type is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined [...].
二。 C++11 工作草案,18.10.3:
The restrictions that ISO C places on the second parameter to the
va_start()
macro in header<stdarg.h>
are different in this International Standard. The parameterparmN
is the identifier of the rightmost parameter in the variable parameter list of the function definition (the one just before the ...). If the parameterparmN
is declared with a function, array, or reference type, or with a type that is not compatible with the type that results when passing an argument for which there is no parameter, the behavior is undefined.
对我来说,上面的 (C++) 引述似乎与默认促销行为无关;但是,我认为说“限制不同”意味着它们是相同的,除了以下 [above] 条款。
关于c++ - va_arg 是否使用 pre- 或 post-mangled 类型作为它的第二个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19876414/
内的和
看似不可能完成的任务。我有一个服务器输出,其中包含 内的转储。不幸的是,我碰巧转储了一个包含一些 html 标签的文件。我需要转换任何内部 HTML 实体,以便当我将数据附加到 DOM 时结构不会
标签之间的所有内容
我正在读取 .html 文件: const htmlin = String(fs.readFileSync(inputHtml) || ''); const splitted = htmlin.spl
我在 中输入了一些文本, 我输入了一些换行符、空格等。故意。但是,在提交文本并在 内呈现之后, 换行符,空格消失了,它们被类似 \r\n\r\n 的东西所取代, 怎么了?如何保持原始格式? 我
我在里面有很多内容我正在打印的标签。我正在对打印样式使用媒体查询。一切都很好,只是第一页的最后一行被剪切了。其中一半保留在第一页,另一半显示在下一页。我不知道如何将溢出转移到下一页。 最佳答案 我想通
并用括起来是否安全?
一些用户生成的文本(可能包含脚本/代码)将向公众展示。如果我过滤掉所有 和标记并用 将结果文本括起来和 ,用户提交的脚本有机会被执行吗? 请给我一个如何破解这个保护方案的例子。 最佳答案 Is it
标签中移除
我制作了简单的 BBCode 脚本,它运行良好。但后来我使用 javascript 库来美化我在 中的代码. 现在我面临的唯一问题是 中每行代码后的标签标签。 所以问题是我怎样才能删除 在
`中删除 ``?
Markdown 中的三个反引号渲染为 ... 。更具体地说, # in markdown ```java ``` # render as ... # my expecting result
标签内的方括号 (<>) 替换除标签内的换行符
我使用 question 中提供的答案替换了 pre 标签外的所有换行符. \n(?![^) 它工作正常,直到 pre 标签中的内容有 括号。 例如,输入: Test contennt for re
标签中获取选定的文本和文本索引,其中偏移量是 pre 的开始
所以我有一个像这样的前置标签: Some content, more content. Coloured content. Some more content 我想做的是使用绑定(bind) mou
我正在开发一个 android 项目,我们在其中使用 ant 构建我们的版本。在更改代码中的 versionName 和其他一些标志时,我们使用 Android-ant 目标 -pre-compile
"); ..... 回显 (""); ?> 是什么意思?
问题是标签 我看过我正在编写的一个脚本,并使用了它: echo (""); ........ echo (""); 它到底做了什么? 它是 Html 标签还是 PHP? 我在 Google 上进行了
我想知道哪些语言和工具(调试器、IDE、分析器、库等)可供想要为 Palm Pre 开发的人使用。 另外,我想知道存在哪些必须注意的技术限制。 最佳答案 有一个 JavaScript 函数库,用于与基
我目前有一个简单的 pre-commit 钩子(Hook)用于我的项目(在 R 中,虽然这是这个问题的附带),它运行单元测试: #!/bin/sh a=$(Rscript tests/testthat
我目前有一个简单的 pre-commit 钩子(Hook)用于我的项目(在 R 中,虽然这是这个问题的附带),它运行单元测试: #!/bin/sh a=$(Rscript tests/testthat
标签中的文本的空白缩进,不包括文档中标签的当前缩进级别?
我试图在网站上显示我的代码,但在正确保留空格缩进时遇到问题。 例如给定以下片段: Here is my code: def some_funtion ret
"的快捷方式 ;print_r($myarray);echo "";
是否有快捷方式 echo ""; print_r($myarray); echo ""; 为了获得数组的可读格式而键入这些内容真的很烦人。 最佳答案 这是最短的: echo '',print_r
我有一个简单的 python 项目,目前只有一个文件。它存在于我的项目的 static/cgi-bin 文件夹中。目前,在我的目录的底部,我有一个 .pre-commit-config.yaml 文件
Moses Tokenizer是广泛应用于机器翻译和自然语言处理实验的分词器。 有一行正则表达式检查: if (($pre =~ /\./ && $pre =~ /\p{IsAlpha}/) ||
在我的一个 PHP 网站上,我需要为我的用户提供选择某些行以从网站上的所有搜索结果(查询)中排除的功能。 我应该采取哪种方式来处理排除,我应该: 1) 每当用户登录(或通过查询更新它)时,预编译排除行
考虑以下代码段。 <p class="text-centre"> </bHello World></b> </p> 然后我有另一个div如下 正如您在第一个 div 中
我是一名优秀的程序员,十分优秀!