gpt4 book ai didi

c++ - g++ 对 printf 的特殊处理

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:24 25 4
gpt4 key购买 nike

有人知道为什么下面的代码在 g++ 4.7.2 下可以工作吗?如果我将名称 printf 更改为另一个名称,例如 f,它会出现编译器错误,指出 constexpr 不能包含非常量函数调用(我认为这是正确的行为).

[hidden]$ cat d.cpp 
extern "C" { extern int printf(const char* s, ...); }
constexpr int g() { return printf(""), 0; }
template <int N> struct X { const static int value = N; };
int n = X<g()>::value;
[hidden]$ g++ -std=c++11 -c d.cpp
[hidden]$ g++ -v |& tail -1
gcc version 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)

注意我没有包含任何头文件。

最佳答案

printf() 在许多情况下被 GCC/g++ 作为内置函数处理(尽管我认为这种行为仍然是一个错误)。来自 http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html :

The ISO C90 functions ... printf ... are all recognized as built-in functions unless -fno-builtin is specified (or -fno-builtin-function is specified for an individual function)

如果您使用 -fno-builtin 选项,您将获得正确的诊断。

该错误似乎已在 4.8.0 中修复。

关于c++ - g++ 对 printf 的特殊处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16617807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com