我在c ++中编写了以下代码:
int printf(const char *p,...);
int main()
{
printf("Stack Overflow\n");
return 0;
}
它返回了一个错误:
/home/tWi2Su/ccnhXznj.o: In function `main':
prog.cpp:(.text.startup+0x17): undefined reference to `printf(char const*, ...)'
collect2: error: ld returned 1 exit status
但是当我删除const
时,我收到以下错误:
prog.cpp: In function 'int main()':
prog.cpp:4:27: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
printf("Stack Overflow\n");
^
/home/a5vnrT/cclz99Yy.o: In function `main':
prog.cpp:(.text.startup+0x17): undefined reference to `printf(char*, ...)'
collect2: error: ld returned 1 exit status
如果删除dots
,我会收到以下错误:
/home/3jQpK8/cc01lRrz.o: In function `main':
prog.cpp:(.text.startup+0x17): undefined reference to `printf(char const*)'
collect2: error: ld returned 1 exit status
Compilation error time: 0 memory: 0 signal:0
prog.cpp: In function 'int main()':
prog.cpp:4:27: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
printf("Stack Overflow\n");
^
/home/a5vnrT/cclz99Yy.o: In function `main':
prog.cpp:(.text.startup+0x17): undefined reference to `printf(char*, ...)'
collect2: error: ld returned 1 exit status
为什么有必要在我声明这个功能的时候给这些点(而不是预先设定它)。此外,当我们将字符串传递给c ++中的函数时,我们不需要提及const
。那么为什么有必要在这里提供const
关键字?
答案 0 :(得分:7)
在你的情况下,
int printf(const char *p, ...);
int main()
{
printf("Stack Overflow\n");
return 0;
}
您只有声明,没有printf()
的定义。 Linker正在喊叫。
关于(缺失)const
类型限定符,在C++
中,字符串文字(窄字符串文字)的类型为“n const char
数组”, 当您尝试将其传递给char *
时,会发生类型不匹配。
也就是说,这些点...
被用作variadic function的符号,它可以接受可变数量的参数。