printf函数中的点和const

时间:2015-08-12 07:09:08

标签: c++

我在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关键字?

1 个答案:

答案 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的符号,它可以接受可变数量的参数。