αλε*_*λυτ 4 c++ gcc clang built-in visual-c++
考虑以下代码:
#include <iostream>
#include <math.h>
double log(double) { return 42; }
int main() {
std::cout << log(1) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
构建调试版本时所有使用的编译器(msvc,gcc,clang)打印42.
但是当我在发布模式下尝试构建(并运行)时,我得到了:
error C2169: 'log' : intrinsic function, cannot be defined;42gcc;0为铿锵打印.为什么同一编译器的发布/调试结果不同?
为什么在发布模式下为不同的编译器获得不同的结果?
您正在定义已<math.h>使用外部链接声明的函数.
C11标准,§7.12.6.7:
Run Code Online (Sandbox Code Playgroud)#include <math.h> double log(double x);
§7.1.2:
任何库函数声明都应具有外部链接.
[extern.names]/3:
使用外部链接声明的标准C库中的每个名称都保留给实现,以用作名称空间
std和全局命名空间中具有extern"C"链接的名称.
根据[reserved.names]/2,行为未定义; 因此,实现可以做它想要的,包括发布无意义的错误消息.
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |