เมื่อคุณทำ
#define _XOPEN_SOURCE <some number>
หรือ
cc -D_XOPEN_SOURCE=<some number>
มันบอกให้คอมไพเลอร์ของคุณรวมนิยามสำหรับฟังก์ชันพิเศษบางอย่างที่กำหนดไว้ในมาตรฐาน X / Open และ POSIX
สิ่งนี้จะให้ฟังก์ชันพิเศษบางอย่างที่มีอยู่ในระบบ UNIX / BSD / Linux ล่าสุด แต่อาจไม่มีอยู่ในระบบอื่นเช่น Windows
ตัวเลขอ้างอิงถึงเวอร์ชันต่างๆของมาตรฐาน
คุณสามารถบอกได้ว่าต้องการตัวใด (ถ้ามี) โดยดูที่หน้าคนสำหรับแต่ละฟังก์ชันที่คุณเรียกใช้
ตัวอย่างเช่นman strdup
พูดว่า:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
ซึ่งหมายความว่าคุณควรใส่อย่างใดอย่างหนึ่งต่อไปนี้:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
ที่ด้านบนของไฟล์ต้นฉบับของคุณก่อนที่จะทำใด ๆ#include
s strdup
ถ้าคุณต้องการใช้งาน
หรือคุณสามารถใส่
#define _GNU_SOURCE
ที่นั่นแทนซึ่งเปิดใช้งานฟังก์ชันทั้งหมดโดยมีข้อเสียคืออาจไม่สามารถรวบรวมบน Solaris, FreeBSD, Mac OS X เป็นต้น
มันเป็นความคิดที่ดีที่จะตรวจสอบหน้าแต่ละคนก่อนที่จะทำ#include
, #define
หรือใช้ฟังก์ชั่นใหม่เพราะบางครั้งพฤติกรรมของพวกเขามีการเปลี่ยนแปลงขึ้นอยู่กับตัวเลือกสิ่งที่และ#define
s คุณมีตัวอย่างเช่นกับbasename (3)
ดูสิ่งนี้ด้วย: