استدعاء دول مجلس التعاون الخليجي ك "CC" مقابل "دول مجلس التعاون الخليجي"

StackOverflow https://stackoverflow.com/questions/939989

سؤال

إنني أدرك أنه في معظم أنظمة جنو / Linux، يمكن استدعاء دول مجلس التعاون الخليجي باسم "CC" من سطر الأوامر (بدلا من "دول مجلس التعاون الخليجي"). هل هناك أي اختلاف في سلوك دول مجلس التعاون الخليجي عند الاحتجاج بطريقة واحدة مقابل الآخر؟

على سبيل المثال، أعرف أن تم استدعاء دول مجلس التعاون الخليجي من خلال اسم "g ++" بدلا من "دول مجلس التعاون الخليجي" يتسبب في التصرف على دول مجلس التعاون الخليجي بشكل مختلف (يعالج ملفات .C كمصدر C ++ وروابط في مكتبة C ++ القياسية). هل هناك أي فرق مماثل في السلوك بين "دول مجلس التعاون الخليجي" مقابل "CC"؟

تعديل: لم يتم استلام أي من الإجابات حتى الآن نهائي "نعم" أو "لا" فيما إذا كانت دول مجلس التعاون الخليجي سوف تتصرف بشكل مختلف إذا استدعت بطريقة واحدة مقابل الآخر. ومع ذلك، فإن الفكرة المقدمة للغوص في المصدر للتحقق من سلوكها تقودني إلى هذا المسار. بناء على ما وجدته هناك، أعتقد الآن أن الإجابة هي:

لا. دول مجلس التعاون الخليجي يتصرف نفسه بغض النظر عما إذا كان يسمى عبر "دول مجلس التعاون الخليجي" أو "CC".

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

المحلول

للأورام، أنا فقط تتبعت كيف argv[0] يستخدم من داخل دول مجلس التعاون الخليجي (main.c -> top_lev.c -> opts.c -> langhooks.c) ويبدو أنه argv[0] يستخدم حاليا لا شيء أكثر من العطاء malloc شيء للإبلاغ عنه عندما يفشل. لا يبدو أن هناك أي تغيير سلوك إذا argv[0] هل أي شيء آخر غير gcc.

نصائح أخرى

يبدو لي ذلك cc (رابط لبعض المواصفات القديمة SUS) يهدف إلى أن يكون واجهة البائع المحايدة لمجموعة التحويل البرمجي للنظام. تتميز بمثابة إرث:

توفر الأداة المساعدة C89 واجهة إلى معيار ISO C، لكن الأداة المساعدة CC تقبل لهجة غير محددة من اللغة C: قد تكون القياسية C أو الاستخدام المشترك C أو بعض البديل الآخر. يجب كتابة برامج C المحمولة للتوافق مع معيار ISO C وتجميعها مع C89.

بوسيكس لديه فائدة تسمى c99 التي أعتقد أنها خليفة c89. وبعد انها تقول

تعتمد الأداة المساعدة C99 على الأداة المساعدة C89 التي تم تقديمها في الأصل في معيار ISO POSIX-2: 1993. تتضمن بعض التغييرات من C89 تعديل محتويات قسم المكتبات القياسية لحساب الرؤوس والخيارات الجديدة؛ على سبيل المثال، إضافة إلى المعامل RT -L، وأضاف معامل Trace L -L لوظائف التتبع.

أنا لست مألوفا حقا في كل تلك المعايير المختلفة، ولكن يبدو أن SUSV3 الأكثر حداثة (بوسيكس: 2004.) وأكثر حداثة بوسيكس: 2008. (لا يبدو أن لديك رقم SUS حتى الآن) لا تحدد أداة مساعدة cc بعد الآن، ولكن فقط الفائدة تسمى c99. وبعد بالمناسبة، نظام بلدي لينكس (Arch_linux.) يحتوي على manpage من c99 لكن لا c89, ، ولكن يحتوي فقط على فائدة تسمى cc, ، ولكن لا c89 ولا c99. وبعد الكثير من الارتباك في هناك :)

على بلدي ماك من man gcc:

في إصدار Apple من دول مجلس التعاون الخليجي، يكون كل من CC و GCC روابط رمزية فعلا إلى مترجم يدعى مثل GCC-Version. وبالمثل، فإن C ++ و G ++ هي روابط إلى مترجم يدعى مثل نسخة G ++.

بناء على ذلك أود أن أفترض أن CC و GCC تتصرف بنفس الطريقة.

كان لدي نفس الشك اليوم وحاولت العثور عليه بمفردي:

$ which cc
 /usr/bin/ccc

$file /usr/bin/cc
 /usr/bin/cc: symbolic link to '/etc/alternatives/cc'

$file /etc/alternatives/cc
 /etc/alternatives/cc: symbolic link to '/usr/bin/gcc'

$which gcc
 /usr/bin/gcc

لذلك، أساسا. cc نقاط ل gcc.

يمكنك أيضا التحقق من استخدام cc -v و gcc -v. وبعد إذا قاموا بطباعة نفس الشيء، فهذا يعني أنها هي نفسها بالضبط.

حتى إذا كانت دول مجلس التعاون الخليجي تعمل نفس قيمة Argv [0]، فلن تعمل جميع البرامج نفس الشيء بغض النظر عنها تحددها كمبرمج.

عند بناء ZLIB 1.2.5 في RHEL 5.5 (GCC 4.1.2):

$ md5sum $(which cc)
69a67d3029b8ad50d41abab8d778e799  /usr/bin/cc
$ md5sum $(which gcc)
69a67d3029b8ad50d41abab8d778e799  /usr/bin/gcc

ولكن:

$ CC=$(which cc) ./configure
Checking for shared library support...
Tested /usr/bin/cc -w -c -O ztest20557.c
Tested cc -shared -O -o ztest20557.so ztest20557.o
/usr/bin/ld: ztest20557.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
ztest20557.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
No shared library support; try without defining CC and CFLAGS
Building static library libz.a version 1.2.5 with /usr/bin/cc.
Checking for off64_t... Yes.
Checking for fseeko... Yes.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.

و:

$ CC=$(which gcc) ./configure
Checking for shared library support...
Building shared library libz.so.1.2.5 with /usr/bin/gcc.
Checking for off64_t... Yes.
Checking for fseeko... Yes.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for attribute(visibility) support... Yes.

لا يعتبر البرنامج النصي التكوين إمكانية أن تكون CC على نظام Linux قد تكون دولية دولية. لذلك، كن حذرا إلى أي مدى تأخذ افتراضاتك.

CC هي مجرد طريقة UNIX لاستدعاء المحول البرمجي، وسوف تعمل على جميع أيهن.

قد يكون هذا الخيط قديما ولكني أريد أن أضيف شيئا ما (ربما سيجده شخص ما في المستقبل).

إذا قمت بتجميع هذا البرنامج

#include <stdio.h>
#include <stdlib.h>

void
myFunction(char *args)
{
   char buff1[12];
   char buff2[4] = "ABC";

   strcpy(buff1,args);

   printf("Inhalt Buffer2: %s",buff2);

}

int main(int argc, char *argv[])
{

   if(argc > 1)
   {
      myFunction(argv[1]);
   }
   else
      printf("no arguments sir daimler benz");

   getchar();

   return 0;
}

مع "دول مجلس التعاون الخليجي"، وأنت تمريرها "AAAAAAAAAAAAAAAAAAAAAAA" كحجة، لن تفيض في Buffer2، بينما تقوم بذلك إذا قمت بتجميعها مع "CC"، والتي بالنسبة لي هي تلميح أنه إذا كنت تستخدم "دول مجلس التعاون الخليجي"، فإن إدارة الذاكرة يعمل مختلفا، ربما عن طريق وضع المساحة بين قطاعات الذاكرة من الحقول Buff1 & Buff2؟

ربما شخص لديه المزيد من التجارب يمكن أن يضع الضوء في الظلام هنا.

لا شيء في وثائق دول مجلس التعاون الخليجي يشير إلى أن دول مجلس التعاون الخليجي ستصرف بشكل مختلف إذا لم يكن اسمه القابل للتنفيذ مجلس التعاون الخليجي لكن نسخة. وبعد مترجم غنو فورتران حتى يذكر ذلك:

إصدار من الأمر GCC (الذي قد يتم تثبيته أيضا كأمر CC في النظام)

"لا يوجد رقم مجلس التعاون الخليجي يتصرف نفسه بغض النظر عما إذا كان يسمى عبر" دول مجلس التعاون الخليجي "أو" CC ".

نقلت من المشاركة الأصلية

بناء على ذوي الخبرة في Ubuntu 14.04، لم يكن هذا هو الحال.

عندما أرسم برنامجي باستخدام:

gcc -finstrument-functions test.c

لا أحصل على أي تغيير في سلوك التعليمات البرمجية الخاصة بي. ولكن عندما تجميع باستخدام

cc -finstrument-functions test.c

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

بالنظر إلى أن هذا يأتي من UNIX، أود أن أقول أن "CC" هو الاسم العام و "دول مجلس التعاون الخليجي" هو التحويل البرمجي الفعلي. أي "دول مجلس التعاون الخليجي" يوفر "CC" لذا فإن البرنامج الذي يبحث عن "CC" ستجد واستخدام "CC"، جاهل بسعادة للمترجم الفعلي المستخدم.

أيضا، يجب أن تكون برامج يونيكس جاهلة الاسم الفعلي المستخدم للاتصال بهم (أعتقد اختصارات Windows Desktop - فهذا لا معنى للتحقق من ما يسمى الاختصار)، لذلك، لا، "دول مجلس التعاون الخليجي" و "CC" القيام به نفس الشيء إذا "CC" هو رابط إلى "دول مجلس التعاون الخليجي".

ما لم يكن، بالطبع، "CC" ليس هياكل ولكن استدعاء CHEALSCRIPT.

لنظام التشغيل الخاص بي (Ubuntu 14.04) cc لا يسمح بإكمال علامة التبويب، في حين gcc هل.

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