IT-Swarm.Net

كيف يمكنني رؤية ملف مصدر C/C++ بعد المعالجة المسبقة في Visual Studio؟

دعنا نقول لدي ملف مصدر مع العديد من التوجيهات قبل المعالج. هل من الممكن أن نرى كيف يبدو بعد أن يتم المعالج الأولي معها؟

199
Geo

cl.exe ، واجهة سطر الأوامر لـ Microsoft Visual C++ ، لديها ثلاثة خيارات مختلفة لإخراج الملف preprocessed (ومن هنا التناقض في الاستجابات السابقة حول Visual C++):

إذا كنت ترغب في إجراء معالجة مسبقة لملف بدون توجيهات #line ، فضم خيارات /P و /EP.

144
bk1e

تحتوي معظم برامج التحويل البرمجي على خيار لتشغيل المعالج المسبق. على سبيل المثال ، يوفر gcc -E:

   -E  Stop after the preprocessing stage; do not run the compiler proper.  
       The output is in the form of preprocessed source code, which is sent
       to the standard output.

لذلك يمكنك فقط تشغيل:

gcc -E foo.c

إذا لم تتمكن من العثور على مثل هذا الخيار ، يمكنك أيضًا العثور على المعالج المسبق لـ C على جهازك. يطلق عليه عادة cpp وربما يكون بالفعل في طريقك. استدعاها مثل هذا:

cpp foo.c

إذا كانت هناك رؤوس تحتاج إلى تضمينها من الدلائل الأخرى ، فيمكنك تمرير -I/path/إلى/include/dir إلى أي من هذه ، تمامًا كما تفعل مع ترجمة منتظمة.

بالنسبة لنظام التشغيل Windows ، سأترك الأمر للملصقات الأخرى لتقديم إجابات لأنني لست خبيراً هناك.

118
Todd Gamblin

انقر بزر الماوس الأيمن على الملف في Solution Explorer ، goto Properties. تحت خصائص التكوين-> C/C++ -> Preprocessor ، "إنشاء ملف Preprocessed" هو ما تبحث عنه. ثم انقر بزر الماوس الأيمن على الملف في Solution Explorer واختر "ترجمة". يتم إنشاء الملف الذي تم تجهيزه مسبقًا في دليل المخرجات (مثل ، الإصدار Debug) بامتداد .i (بفضل Steed على تعليقه).

94
Jim Buck

تحتاج عادةً إلى القيام ببعض عمليات المعالجة اللاحقة على إخراج المعالج المسبق ، وإلا فإن كل وحدات الماكرو تتوسع فقط في بطانات واحدة ، والتي يصعب قراءتها وتصحيحها. بالنسبة إلى الشفرة C ، يكفي شيء مثل التالي:

gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c

بالنسبة لكود C++ ، يكون الأمر أصعب كثيرًا. ل GCC/g ++ ، لقد وجدت هذا بيرل النصي مفيدة.

18
ididak

جرب cl /EP إذا كنت تستخدم برنامج التحويل البرمجي C++ من Microsoft.

8
Atempcode

لا أعرف أي شيء عن برنامج التحويل البرمجي لـ Microsoft ، ولكن في دول مجلس التعاون الخليجي يمكنك استخدام هذا:

gcc -E -P -o result.c my_file.h

إذا كنت تريد مشاهدة التعليقات ، استخدم هذا:

gcc -E -C -P -o result.c my_file.h

المزيد من الخيارات المتاحة على هذه الصفحة .

8
dzav

في Visual Studio ، يمكنك ترجمة ملف (أو مشروع) باستخدام/P.

6
Andreas Magnusson

كما أجاب bk1e و Andreas M. ، فإن الخيار/P الخاص بالمترجم سوف يتسبب في تجهيز ملف مسبق. ومع ذلك ، في مشروعي باستخدام VS2005 و Platform Builder (لمعالج _ مضمن ARM) ، لم يقدم المشروع خيارًا في مربع الحوار (كما هو موضح بواسطة Jim B) لتمكين هذا الخيار.

يمكنني تشغيل CL يدويًا وإضافة/P ، لكنه فشل لأنني لم أكن أعرف كل خيارات سطر الأوامر المناسبة التي تم تنشيطها بشكل غير مرئي بواسطة Platform Builder أثناء الإنشاء الكامل. لذلك كنت بحاجة لمعرفة كل هذه الخيارات.

كان الحل الخاص بي هو البحث في ملف build.log ، والعثور على السطر الذي تم تنفيذه

CL blah-blah-blah myfile.c

لقد نسخت هذا الخط إلى الحافظة. الجزء "بلاه بلاه" يحتوي على خيارات البناء ، وكان ضخمًا.

مرة أخرى في IDE ، قمت بالنقر بزر الماوس الأيمن على myfile.c ، واخترت "Open Build Window" ، ثم في تلك النافذة ، قمت بلصق سطر أوامر build ، وأضفت "/ P".

CL /P blah-blah-blah myfile.c

فعله. تم إنتاج ملف myfile.i ، والذي تضمن إخراج المعالج المسبق.

5
Sam Pittman

CPIP هو معالج جديد لـ C/C++ مكتوب في بيثون. إذا كنت تريد عرضًا مرئيًا مفصلًا لملف مُجهز مسبقًا ، فقم بإعطائه لقطة.

CPIP عبارة عن معالج مسبق لـ C/C++ يتم تنفيذه في Python. يعتبر معظم المعالجات الأولية أن المعالجة المسبقة مهمة قذرة يجب القيام بها في أقرب وقت ممكن. هذا يمكن أن يجعل من الصعب للغاية تتبع العيوب الخفية في مرحلة ما قبل المعالجة حيث أن المعالجات الأولية تتخلص من الكثير من المعلومات المفيدة لصالح الحصول على النتيجة بأقل تكلفة ممكنة.

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

CPIP غير مصمم ليكون بديلاً لـ cpp (أو أي معالج تم إنشاؤه مسبقًا) ، بدلاً من ذلك يعتبر CPIP الوضوح والفهم أكثر أهمية من سرعة المعالجة.

2
thegreendroid

في نظام التشغيل Windows ، إجابة بسيطة بسطر واحد على هذا السؤال هي استخدام الأمر أدناه في موجه DOS لرؤية الملف الذي تم تجهيزه مسبقًا:

CL /P /C myprogram.c

سيؤدي هذا إلى إنشاء ملف يسمى myprogram.i . فتحه والبحث عن المعالجات الموسعة الخاصة بك.

2
manty