Вот моя программа.Почему strerror_r ведет себя по-разному при компиляции с помощью стандартов gnu90 и c90?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
int main()
{
char errbuf[256];
errno = 0;
strtoul("99999999999999999999999999999999999999999999", NULL, 0);
strerror_r(errno, errbuf, sizeof errbuf);
printf("strerror_r: %s\n", errbuf);
return 0;
}
Когда я скомпилировать его с -std=gnu90
или -std=gnu99
, я получаю ожидаемый выход.
[email protected]:~/lab/linux$ rm -f a.out && gcc -std=gnu90 -Wall -Wextra -pedantic foo.c && ./a.out
strerror_r: Numerical result out of range
[email protected]:~/lab/linux$ rm -f a.out && gcc -std=gnu99 -Wall -Wextra -pedantic foo.c && ./a.out
strerror_r: Numerical result out of range
Но когда я скомпилировать его с -std=c90
или -std=c99
, я получаю предупреждение, и я не вижу strerror_r
положить строку в errbuf
.
[email protected]:~/lab/linux$ rm -f a.out && gcc -std=c90 -Wall -Wextra -pedantic foo.c && ./a.out
foo.c: In function ‘main’:
foo.c:12:2: warning: implicit declaration of function ‘strerror_r’ [-Wimplicit-function-declaration]
strerror_r(errno, errbuf, sizeof errbuf);
^
strerror_r:
[email protected]:~/lab/linux$ rm -f a.out && gcc -std=c99 -Wall -Wextra -pedantic foo.c && ./a.out
foo.c: In function ‘main’:
foo.c:12:2: warning: implicit declaration of function ‘strerror_r’ [-Wimplicit-function-declaration]
strerror_r(errno, errbuf, sizeof errbuf);
^
strerror_r:
Что происходит неправильно, когда я использую -std=c90
или -std=c99
?
В [N1256] не найдено определения 'strerror_r' (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf). – MikeCAT