Errno.h এ, এই পরিবর্তনশীলটিকে বহিরাগত ইন্টের্নো হিসাবে ঘোষণা করা হয়;
সি স্ট্যান্ডার্ড যা বলে তা এখানে:
ম্যাক্রোর errno
কোনও বস্তুর শনাক্তকারী হওয়া প্রয়োজন be এটি কোনও ফাংশন কল (উদাহরণস্বরূপ *errno()
) এর ফলে পরিবর্তিতযোগ্য লভ্যালুতে প্রসারিত হতে পারে ।
সাধারণত, errno
একটি ম্যাক্রো যা বর্তমান থ্রেডের জন্য ত্রুটি নম্বরটির ঠিকানা ফিরিয়ে ফাংশনকে কল করে, তারপরে এটিকে অবহেলা করে।
লিনাক্সে আমার যা আছে তা এখানে /usr/incolve/bit/errno.h এ:
/* Function to get address of global `errno' variable. */
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
শেষ পর্যন্ত, এটি এই ধরণের কোড উত্পন্ন করে:
> cat essai.c
#include <errno.h>
int
main(void)
{
errno = 0;
return 0;
}
> gcc -c -Wall -Wextra -pedantic essai.c
> objdump -d -M intel essai.o
essai.o: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
0: 55 push ebp
1: 89 e5 mov ebp,esp
3: 83 e4 f0 and esp,0xfffffff0
6: e8 fc ff ff ff call 7 <main+0x7> ; get address of errno in EAX
b: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 ; store 0 in errno
11: b8 00 00 00 00 mov eax,0x0
16: 89 ec mov esp,ebp
18: 5d pop ebp
19: c3 ret