意外使用 C 风格无类型变量参数列表中的类是一个常见的错误源。
例子:
class MyString {
public:
char *pChars;
int Length;
MyString(char *pChars) {
this->pChars = pChars;
Length = strlen(pChars);
} };
int main() {
MyString s1("Bla1"), s2("Bla2");
printf("%s%s", s1, s2); // This does not but should give a compiler warning/error!
return 0; }
printf 调用按值接收两个 s 对象。这意味着它们的所有成员都只是内存复制。但它们被解释为简单的字符指针。结果当然是运行时错误。
我并不是要求解决这个问题,但我希望有一些可以添加到我的类中的东西,以便编译器警告我或给出错误。
已尝试声明但未实现复制构造函数。但似乎没有调用复制构造函数。 :-(
请仅回答标题中的问题。我不需要讨论为什么你不应该使用 printf 或这些变量参数列表 - 知道这一点。
谢谢你的时间。
体面的编译器(如 gcc)检查是否printf
参数与格式字符串中的格式说明符匹配。
只是不要忘记添加-Wformat
or -Wall
命令行选项。
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)