کلنگ (کامپایلر)

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از کلنگ (مترجم رایانه))
پرش به: ناوبری، جستجو
کلنگ
LLVM Logo.svg
نویسنده(های) اصلی کریس لاتنر و دیگران
توسعه‌دهنده(ها) اپل و گوگل و دیگران
وضعیت توسعه در جریان
نوشته‌شده به سی++
سیستم‌عامل شبه یونیکس
سکو چند سکویی
گونه کامپایلر
پروانه پروانه متن‌باز دانشگاه ایلینوی/ان‌سی‌اس‌ای
وب‌گاه clang.llvm.org

کلَنگ (به انگلیسی: Clang) یک مترجم روبه جلو برای زبان‌های برنامه نویسی C و ++C و Objective-C و ++Objective-C می‌باشد که از LLVM بعنوان زیر ساخت روبه عقب استفاده می‌کند. آرمان کلنگ این است که جایگزین کامپایلر جی‌سی‌سی شود. کلنگ بصورت کاملا متن باز توسعه میابد و توسط کمپانی‌های بزرگی مانند گوگل و اپل پشتیبانی می‌شود. کلنگ تحت پروانه متن باز دانشگاه ایلینوی ارائه می‌گردد. در توسعه کلنگ سعی شده تا حد امکان با جی‌سی‌سی سازگار باشد. بیشتر گزینه‌ها و پارامتر‌های خط فرمانی مشابه جی‌سی‌سی هستند. توسعه‌دهندگان پروژه فری‌بی‌اس‌دی به دلیل مشکلات حقوقی با پروانه جی‌پی‌ال، قصد دارند کلنگ را با جی‌سی‌سی جایگزین کنند.

مثال از پیام‌های خطا و هشدار‌ها[ویرایش]

کد زیر دارای یک خطای منطقی است. چرا که پارامتر اول تابع fgets باید اشاره گری به یک رشته باشد ولی در عوض آرگومانی از نوع اشاره‌گری به اشاره‌گر به رشته به آن ارسال شده. این مسئله باعث می‌ود تا کامپایلر یک هشدار چاپ کند.

#include <stdio.h>

int main(void)
{
        char *msg;

        fgets(&msg, BUFSIZ, stdin);

        return 0;
}

هشدار چاپ شده توسط کلنگ:


 clang -o test.o test.c 
 test.c:7:8: warning: incompatible pointer types passing 'char **' to parameter of type 'char *'; remove & [-Wincompatible-pointer-types]
         fgets(&msg, BUFSIZ, stdin);
               ^~~~
 /usr/include/stdio.h:241:30: note: passing argument to parameter here
 char    *fgets(char * __restrict, int, FILE * __restrict);
                                 ^
 1 warning generated.

همانطور که می‌بینید کلنگ دقیقا محل وقوع خطا را تشخیص داده و اعلام می‌کند که چگونه باید برطرف شود.

قابل توجه[ویرایش]

لینک به بیرون[ویرایش]