Tôi đang cố gắng biên dịch chương trình C trên hệ thống Linux. Tôi có một tuyên bố #include
cho stdlib.h
.Can -std = c99 có ngăn chặn #includes của tôi hoạt động bình thường không?
Khi tôi biên dịch chương trình với gcc
như sau:
gcc -std=c99 -g -o progfoo progfoo.c progbar.c
tôi nhận được cảnh báo về Implicit declaration of function [srand48, drand48, bzero, or close]
.
Biên soạn thay vì như:
gcc -g -o progfoo progfoo.c progbar.c
không cho tôi những lời cảnh báo, nhưng nó la lên về việc sử dụng của tôi for
vòng (đó là lý do cho việc thêm -std=c99
ở nơi đầu tiên).
Cho rằng man srand48
đề cập bao gồm <stdlib.h>
, tôi có, tôi không chắc chắn vấn đề khác có thể là gì. Các vòng for
không cần thiết cho bất kỳ thứ gì (chúng chỉ tiết kiệm thời gian khi khởi tạo mảng) vì vậy tôi không có vấn đề gì trong việc loại bỏ chúng, nhưng trước khi tôi muốn xác nhận xem tiêu chuẩn c99
có thay thế một số khía cạnh của #include
của tôi hay không các câu lệnh.
Tôi đang sử dụng gcc 4.1.2-50 (Red Hat)
.
+1, nhưng thực ra chúng là macro, chứ không phải biến. –
Điểm tốt, @Matteo, tôi có xu hướng nghĩ về _macros_ như những thứ mà _do_ thứ, như '#define halfOf (x) ((x)/2)', trái với chỉ "cờ" để điều khiển biên dịch. Nhưng bạn là chính xác và việc sử dụng "biến" công việc của bản thân mình là apt để dẫn đến nhầm lẫn với các biến thực. Vì vậy, tôi đã thay đổi nó theo đề xuất của bạn. – paxdiablo
Phải. Nó có thể hữu ích khi biết rằng khi bạn biên dịch không có '-std =' flag, bạn đang yêu cầu '-std = gnu89', là C89 cộng với phần mở rộng GNU - vì vậy C99 tương đương với chế độ này là' -std = gnu99 '. – caf