سؤال

أتساءل كيف يمكن للمجمعين على Mac OS X و Windows و Linux معرفة مكان العثور على ملفات رأس C.

على وجه التحديد أنا أتساءل كيف يعرف أين تجد #include مع <> اقواس.

#include "/Users/Brock/Desktop/Myfile.h"    // absolute reference
#include <stdio.h>                         // system relative reference?

أفترض أن هناك ملف نصي على النظام الذي يستشيره. كيف يعرف أين تبحث عن الرؤوس؟ هل من الممكن تعديل هذا الملف، إذا كان الأمر كذلك فأين يقيم هذا الملف في نظام التشغيل؟

هل كانت مفيدة؟

المحلول

عندما يتم بناء المحول البرمجي، فإنه يعرف عن بعض المواقع القياسية للبحث عن ملف الرأس. البعض منهم مستقلون عن المكان الذي يتم تثبيت المحول البرمجي (مثل / USR / تشمل و / USR / Local / Inclication، وما إلى ذلك) وبعضها يعتمد على مكان تثبيت التحويل البرمجي (الذي لا يسيطر عليه من أجل دول مجلس التعاون الخليجي، بواسطة - خيار PREFIX عند تشغيل تكوين).

مواقع مثل / USR / تشمل معروفة جيدا و "المعرفة" من هذا الموقع بنيت في دول مجلس التعاون الخليجي. لا تعتبر المواقع مثل / usr / local / include معيارا تماما ويمكن تعيينها عند إنشاء دول مجلس التعاون الخليجي مع خيار البادئة المحلي-المحلية للتكوين.

ومع ذلك، يمكنك إضافة أدلة جديدة إلى حيث يمكنك البحث عن الملفات التي تستخدم خيار سطر الأوامر من برنامج التحويل البرمجي. عند محاولة تضمين ملف، سينظر في الدلائل المحددة مع علامة -i قبل الدلائل التي تحدثت عنها في الفقرة الأولى.

نصائح أخرى

لا يعرف نظام التشغيل أينما بحثا عن هذه الملفات - يقوم برنامج التحويل البرمجي (أو أكثر بدقة، Preprocessor). يحتوي على مجموعة من مسارات البحث حيث تعرف أن تبحث عن رؤوس، مثل قذيفة أمرك تحتوي على مجموعة من الأماكن التي ستبحث فيها عن برامج لتنفيذها عند كتابة اسم. وثائق دول مجلس التعاون الخليجي تشرح كيف يقوم هذا التحويل البرمجي به وكيف يمكن تغيير مسارات البحث هذه.

موقع الملف يعتمد عليه النظام. في الواقع، قد يكون الملف precompiled., ، أو قد لا يكون حتى الآن - قد يكون للمترجم ك "مدمج". على macbook الخاص بي، أرى أن هناك مثل هذا الملف في /usr/include/c++/4.2.1/iostream, ، ولكن يجب أن لا تعتمد عليه، وهذا بالتأكيد فكرة سيئة لتحريره.

في Visual Studio، إما في إعدادات المشروع إذا كنت تستخدم IDE، أو في %INCLUDE% متغير البيئة إذا كنت تستخدم سطر الأوامر.

إذا كنت تستخدم G ++، فيمكنك فعل شيء من هذا القبيل لمعرفة ما تم تفتيش المسارات التي تم البحث فيها:

touch empty.cpp
g++ -v empty.cpp

لا أعرف إذا كان هناك ما يعادل XCode. ربما هذا سيعمل منذ Xcode يعتمد على دول مجلس التعاون الخليجي؟

يجب تجنب # تشمل الملفات الداخلية باستخدام المسارات المطلقة. يبحث المحول البرمجي عن الملفات الموجودة في الأدلة المختلفة ويتضمن الملفات، بدءا من كل دليل. علي سبيل المثال؛

#include <boost/tokenizer.hpp>

يعمل لأن دليل جذر التعزيز يحتوي على مجلد يسمى "Boost" وهذا المجلد إما في المسار الافتراضي الخاص بك أو فعلت شيئا مثل.

g++ -I$BOOST_ROOT {blah,  blah}

إنه C و C ++ القياسي الذي سيعمل فيه فاصل UNIX "/" بنفس الطريقة لجميع الأنظمة، بغض النظر عن ما يستخدمه النظام المضيف بالفعل للإشارة إلى الدلائل. كما البعض الآخر المذكورة، في بعض الأحيان #include لا يشمل بالفعل ملف حقيقي على الإطلاق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top