我有一个简单的测试代码,t.c
:
#include <stdio.h>
#include <math.h>
int main(){
printf("%f\n", M_LN10);
}
在我的某个系统上(OS X 10.8.4,GCC 4.8.1),这个程序可以成功编译。但是奇怪的是,在另一个系统(Ubuntu 12.04.2 LTS,GCC 4.6.3)中,使用 gcc t.c
可以成功编译,但如果我使用 gcc -std=c99 t.c
编译就会出现以下错误:
t.c: In function ‘main’:
t.c:5:18: error: ‘M_LN10’ undeclared (first use in this function)
t.c:5:18: note: each undeclared identifier is reported only once
for each function it appears in
我不明白为什么GCC在默认的C标准下可以找到并接受math.h
中的M_LN10
,但如果强制使用C99则不能。你知道这是怎么回事吗?
gnu90
,即“1990年C标准加上GNU扩展”。在没有设置_XOPEN_SOURCE的情况下使用XSI math.h定义是GNU扩展,在指定实际标准时不可用。 - rici-std=c99
添加 扩展,而不是去除它们。 - Douglas B. Staple