errno
是乙個全域性的變數,在
errno.h
中有它的定義:
#if(defined(_mt) || defined(_dll)) && !defined(_mac)
_crtimp
extern
int* __cdecl _errno(
void
);#define
errno (*_errno())
#else
/* ndef _mt && ndef _dll */
_crtimp
extern
interrno;
#endif
/* _mt || _dll */
實際上,
errno
是乙個指向函式的指標,在
linux/unix
環境下,
errno
是多執行緒安全的
。但是在
windows
下使用就會有很大的麻煩。
今天在vc 6.0
下寫了乙個簡單的程式來使用一下:
gao2.h
#ifndef _gao2_h_
#define _gao2_h_
#include
_declspec (dllexport) int add(int a,int b);
#endif //_gao2_h_
gao2.def
exports
add@1
gao2.cpp
#include
#include "gao2.h"
_declspec (dllexport)
int add(int a,int b)
另寫了乙個測試程式,來測試這個
dll,
#include
#include
#include
#include "gao2.h"
void main() }
但是,返回的
errno
卻不是einval,
總覺得這是
2個不同的執行緒,兩個
errno
不是同乙個位址,後來經過修改了兩個程式的
project
àsetting
àc/c++
àcategory
àcodegeneration
àmultithread dll
,才得以通過。
這個好像和
linux
下使用有些不同
,大家也可以試試,
關於errno與perror,strerror函式
為什麼,要強調errno看起來好像是乙個整形變數呢?因為有的標準 如iso c 只規定了errno的作用,而沒有規定它的實現方式,它可能被定義成乙個變數,也有可能被定義成乙個巨集,這個具體要看編譯器自己的實現。早些時候,posix.1曾把errno定義成extern int errno這種形式,但現...
關於errno與perror,strerror函式
為什麼,要強調errno看起來好像是乙個整形變數呢?因為有的標準 如iso c 只規定了errno的作用,而沒有規定它的實現方式,它可能被定義成乙個變數,也有可能被定義成乙個巨集,這個具體要看編譯器自己的實現。早些時候,posix.1曾把errno定義成extern int errno這種形式,但現...
關於errno標頭檔案
看見網上很多地方都用到這個標頭檔案,一直不理解,今天找了一些資料,可以方便自己理解 errno是乙個巨集,它定義在對應的標頭檔案裡面,這個在上面的鏈結裡也有說到 errno是乙個全域性變數,它儲存了最近一次的錯誤。我常看見的乙個 是 errno eexisteexist的中文翻譯是錯誤已經存在 也就...