کلنگ (کامپایلر)
کلَنگ (به انگلیسی: Clang) یک مترجم روبه جلو برای زبانهای برنامهنویسی C و ++C و Objective-C و ++Objective-C میباشد که از LLVM به عنوان زیر ساخت روبه عقب استفاده میکند. آرمان کلنگ این است که جایگزین کامپایلر جیسیسی شود. کلنگ به صورت کاملاً متن باز توسعه میابد و توسط کمپانیهای بزرگی مانند گوگل و اپل پشتیبانی میشود. کلنگ تحت پروانه متن باز دانشگاه ایلینوی ارائه میگردد. در توسعه کلنگ سعی شده تا حد امکان با جیسیسی سازگار باشد. بیشتر گزینهها و پارامترهای خط فرمانی مشابه جیسیسی هستند. توسعهدهندگان پروژه فریبیاسدی به دلیل مشکلات حقوقی با پروانه جیپیال، قصد دارند کلنگ را با جیسیسی جایگزین کنند.
نویسنده(های) اصلی | کریس لاتنر و دیگران |
---|---|
توسعهدهنده(ها) | اپل و گوگل و دیگران |
انتشار پایدار | ۱۰.۰.۰
۲۴ مارس ۲۰۲۰ |
مخزن | |
نوشتهشده با | سی++ |
سیستمعامل | شبه یونیکس |
بنسازه رایانش | چند سکویی |
گونه | کامپایلر |
پروانه | پروانه متنباز دانشگاه ایلینوی - UIUC (پروانههای بیاسدی) |
وبگاه |
مثال از پیامهای خطا و هشدارها
کد زیر دارای یک خطای منطقی است. چرا که پارامتر اول تابع 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.
همانطور که میبینید کلنگ دقیقاً محل وقوع خطا را تشخیص داده و اعلام میکند که چگونه باید برطرف شود.