معمای تبدیل سریع Zig و C

Summarize this content to 400 words in Persian Lang
مقدمه
پیشینه من بیشتر در زبان C است و از آنجایی که هنوز در زیگ جدید هستم، برخی از تبدیلهای نوع مورد نیاز برای مکالمه C و Zig در ابتدا واضح نبود. اکنون آنها را درک می کنم و خلاصه ای سریع ارائه می کنم تا امیدوارم به هرکس دیگری که به آن نیاز دارد کمک کنم.
C انواع رشته
بیایید با اینکه نوع رشته C در Zig چیست شروع کنیم. 2 توصیه وجود دارد1 روش های نشان دادن رشته C
// Sentinel slice of unknown amount
[*:0]const u8
// Slice of unknown amount
[*]const u8
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اگر می توانید انتظار داشته باشید که رشته به صورت تهی پایان یابد، اولین گزینه را می خواهید که می تواند به یک برش Zig تبدیل شود. std.mem.span تابع در غیر این صورت، شما گزینه دوم را می خواهید که معمولاً به a نیاز دارید length پارامتر به تابع صادر شده شما منتقل می شود تا بتوانید یک قطعه به طول دریافت کنید.
مثال ها:
export pub fn test_c_string(str: [*:0]const u8) void {
const local_slice: []const u8 = std.mem.span(str);
// rest of function
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
export pub fn test_c_string(str: [*]const u8, len: usize) void {
const local_slice: []const u8 = str[0..len];
// rest of the function
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این واقعاً تمام چیزی است که برای نیازهای رشته C خود باید بدانید. بقیه رشتههای Zig میتوانند به راحتی و بدون دخالت زیاد بین انواع برش/آرایه Zig تبدیل شوند.
یکی از انواعی که در ابتدا من را گیج کرد انواع آرایه نگهبان بود (یعنی [5:0]const u8) چون فرض کردم شبیه به [*:0]const u8 اما تفاوت در طول زمان محاسبه است (یعنی 5) که این برش را به a تبدیل می کند شناخته شده است طول، بنابراین Zig می تواند تبدیل آن را بین انواع مشابه به راحتی انجام دهد.
شما همچنین می توانید انجام دهید [*c] نشانگر C را نشان می دهد، اما ذکر شده است که این فقط باید در کدهای خود تولید شده استفاده شود.
مقدمه
پیشینه من بیشتر در زبان C است و از آنجایی که هنوز در زیگ جدید هستم، برخی از تبدیلهای نوع مورد نیاز برای مکالمه C و Zig در ابتدا واضح نبود. اکنون آنها را درک می کنم و خلاصه ای سریع ارائه می کنم تا امیدوارم به هرکس دیگری که به آن نیاز دارد کمک کنم.
C انواع رشته
بیایید با اینکه نوع رشته C در Zig چیست شروع کنیم. 2 توصیه وجود دارد1 روش های نشان دادن رشته C
// Sentinel slice of unknown amount
[*:0]const u8
// Slice of unknown amount
[*]const u8
اگر می توانید انتظار داشته باشید که رشته به صورت تهی پایان یابد، اولین گزینه را می خواهید که می تواند به یک برش Zig تبدیل شود. std.mem.span
تابع در غیر این صورت، شما گزینه دوم را می خواهید که معمولاً به a نیاز دارید length
پارامتر به تابع صادر شده شما منتقل می شود تا بتوانید یک قطعه به طول دریافت کنید.
مثال ها:
export pub fn test_c_string(str: [*:0]const u8) void {
const local_slice: []const u8 = std.mem.span(str);
// rest of function
}
export pub fn test_c_string(str: [*]const u8, len: usize) void {
const local_slice: []const u8 = str[0..len];
// rest of the function
}
این واقعاً تمام چیزی است که برای نیازهای رشته C خود باید بدانید. بقیه رشتههای Zig میتوانند به راحتی و بدون دخالت زیاد بین انواع برش/آرایه Zig تبدیل شوند.
یکی از انواعی که در ابتدا من را گیج کرد انواع آرایه نگهبان بود (یعنی [5:0]const u8
) چون فرض کردم شبیه به [*:0]const u8
اما تفاوت در طول زمان محاسبه است (یعنی 5
) که این برش را به a تبدیل می کند شناخته شده است طول، بنابراین Zig می تواند تبدیل آن را بین انواع مشابه به راحتی انجام دهد.
- شما همچنین می توانید انجام دهید
[*c]
نشانگر C را نشان می دهد، اما ذکر شده است که این فقط باید در کدهای خود تولید شده استفاده شود.