จาก C ++ 11 Standard (เน้นของฉัน):
ส่วนหัวของไลบรารีมาตรฐาน D.5 C [depr.c.headers]
- สำหรับความเข้ากันได้กับไลบรารีมาตรฐาน C ...
- ทุกส่วนหัวของ C ซึ่งแต่ละส่วนมีชื่อของฟอร์มname.hจะทำงานเหมือนกับว่าแต่ละชื่อที่อยู่ในเนมสเปซไลบรารีมาตรฐานโดยส่วนหัวcname ที่เกี่ยวข้องจะถูกวางไว้ภายในขอบเขตเนมสเปซส่วนกลาง มันเป็นไม่ได้ระบุว่าชื่อเหล่านี้ได้รับการประกาศครั้งแรกหรือที่กำหนดไว้ภายในขอบเขต namespace (3.3.6) ของการ namespace มาตรฐานและได้รับการฉีดเข้าไปในขอบเขต namespace โลกโดยชัดเจนโดยใช้-ประกาศ (7.3.3)
- ตัวอย่าง:ส่วนหัว
<cstdlib>
แน่นอนให้ประกาศและคำจำกัดความของมันที่อยู่ในการ
std
namespace นอกจากนี้ยังอาจระบุชื่อเหล่านี้ภายในเนมสเปซส่วนกลาง <stdlib.h>
แน่นอนว่าส่วนหัวจะให้การประกาศและคำจำกัดความเดียวกันภายในเนมสเปซส่วนกลางเช่นเดียวกับในมาตรฐาน C นอกจากนี้ยังอาจระบุชื่อเหล่านี้ภายในการ std
namespace
การใช้ส่วนหัว« name.h »เลิกใช้งานแล้วพวกเขาถูกระบุว่าเป็นผู้สมัครที่จะนำออกจากการแก้ไขในอนาคต
ดังนั้นฉันขอแนะนำให้รวมส่วนหัว« cname »และใช้การประกาศและคำจำกัดความจากstd
เนมสเปซ
หากคุณต้องใช้ส่วนหัว« name.h »ด้วยเหตุผลบางประการ (เลิกใช้แล้วดูด้านบน) ฉันขอแนะนำให้ใช้การประกาศและคำจำกัดความจากเนมสเปซส่วนกลาง
กล่าวอีกนัยหนึ่ง: ชอบ
#include <cstdio>
int main() {
std::printf("Hello world\n");
}
เกิน
#include <stdio.h>
int main() {
printf("Hello world\n");
}
C
สัญลักษณ์ไลบรารีลงในเนมสเปซส่วนกลางฉันชอบใช้std::
เวอร์ชันที่มีคุณสมบัติ (ฉันหวังว่าพวกเขาจะทำผิดกฎหมาย)