⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common

📁 su 的源代码库
💻
字号:
iff	AST_COMMONhdr	pthread,stdarg,stddef,typessys	typestyp	long.double,size_t,ssize_tmac	SF_APPEND,SF_CLOSE	sys/stat.h sys/socket.hdll	import note{ Microsoft import/export nonsense }end execute{	__declspec(dllimport) int foo;	int main() { return foo == 5 ? 0 : 1; }	int	bar = 5;	int*	_imp__foo = &bar;}endstd	proto note{ standard C prototypes ok }end compile{	extern int foo(int, int);	bar() { foo(1, 1); }}endtst	ptr_void note{ standard C void* ok }end compile{	extern void* foo();	void* bar() { return foo(); }}endcat{	/* disable non-standard linux/gnu inlines */	#ifdef __GNUC__		#	undef	__OPTIMIZE_SIZE__	#	define	__OPTIMIZE_SIZE__	1	#endif	/* __STD_C indicates that the language is ANSI-C or C++ */	#if !defined(__STD_C) && __STDC__	#	define	__STD_C		1	#endif	#if !defined(__STD_C) && (__cplusplus || c_plusplus)	#	define __STD_C		1	#endif	#if !defined(__STD_C) && _std_proto	#	define __STD_C		1	#endif	#if !defined(__STD_C)	#	define __STD_C		0	#endif	/* extern symbols must be protected against C++ name mangling */	#ifndef _BEGIN_EXTERNS_	#	if __cplusplus || c_plusplus	#		define _BEGIN_EXTERNS_	extern "C" {	#		define _END_EXTERNS_	}	#	else	#		define _BEGIN_EXTERNS_	#		define _END_EXTERNS_	#	endif	#endif	/* _ARG_ simplifies function prototyping among flavors of C */	#ifndef _ARG_	#	if __STD_C	#		define _ARG_(x)	x	#	else	#		define _ARG_(x)	()	#	endif	#endif	/* _NIL_ simplifies defining nil pointers to a given type */	#ifndef _NIL_	#	define _NIL_(x)	((x)0)	#endif	/* __INLINE__ is the inline keyword */	#if !defined(__INLINE__) && defined(__cplusplus)	#	define __INLINE__	inline	#endif	#if !defined(__INLINE__) && defined(_WIN32) && !defined(__GNUC__)	#	define __INLINE__	__inline	#endif	/* Void_t is defined so that Void_t* can address any type */	#ifndef Void_t	#	if __STD_C	#		define Void_t		void	#	else	#		define Void_t		char	#	endif	#endif	/* windows variants and veneers */	#if !defined(_WINIX) && (_UWIN || __CYGWIN__ || __EMX__)	#	define _WINIX		1	#endif	/* dynamic linked library external scope handling */	#ifdef __DYNAMIC__	#	undef	__DYNAMIC__	#	ifndef _DLL	#		define _DLL		1	#	endif	#endif	#if _dll_import	#	if _BLD_STATIC && !_BLD_DLL	#		undef	_DLL	#	else	#		if !_UWIN && !defined(_DLL)	#			define _DLL		1	#		endif	#	endif	#	if !defined(__EXPORT__) && _BLD_DLL	#		define __EXPORT__	__declspec(dllexport)	#	endif	#	if !defined(__IMPORT__) && ( _BLD_DLL || defined(_DLL) )	#		define __IMPORT__	__declspec(dllimport)	#	endif	#	if _BLD_DLL && _UWIN	#	define __DYNAMIC__(v)		(_ast_getdll()->_ast_ ## v)	#	endif	#endif	#if !defined(_astimport)	#	if defined(__IMPORT__) && defined(_DLL)	#		define _astimport	__IMPORT__	#	else	#		define _astimport	extern	#	endif	#endif	#if _dll_import && ( !_BLD_DLL || _WINIX && !_UWIN )	#	ifdef __STDC__	#	define __EXTERN__(T,obj)	extern T obj; T* _imp__ ## obj = &obj	#	define __DEFINE__(T,obj,val)	T obj = val; T* _imp__ ## obj = &obj	#	else	#	define __EXTERN__(T,obj)	extern T obj; T* _imp__/**/obj = &obj	#	define __DEFINE__(T,obj,val)	T obj = val; T* _imp__/**/obj = &obj	#	endif	#else	#	define __EXTERN__(T,obj)	extern T obj	#	define __DEFINE__(T,obj,val)	T obj = val	#endif}endtst	ast_LL note{ LL numeric suffix supported }end compile{	int i = 1LL;	unsigned int u = 1ULL; /* NOTE: some compilers choke on 1LLU */}endtst	- -DN=1 - -DN=2 - -DN=3 - -DN=4 - -DN=5 - -DN=6 - -DN=7 - -DN=8 - -DN=0 output{	#define _BYTESEX_H	#include <sys/types.h>	_BEGIN_EXTERNS_	extern int	sprintf _ARG_((const char*, ...));	extern int	strcmp _ARG_((const char*, const char*));	_END_EXTERNS_	#if _STD_	#if N == 1	#define _ast_int8_t	long	#define _ast_int8_str	"long"	#endif	#if N == 2	#define _ast_int8_t	__int64	#define _ast_int8_str	"__int64"	#endif	#if N == 3	#define _ast_int8_t	long long	#define _ast_int8_str	"long long"	#endif	#if N == 4	#define _ast_int8_t	__int64_t	#define _ast_int8_str	"__int64_t"	#endif	#if N == 5	#define _ast_int8_t	_int64_t	#define _ast_int8_str	"_int64_t"	#endif	#if N == 6	#define _ast_int8_t	int64_t	#define _ast_int8_str	"int64_t"	#endif	#if N == 7	#define _ast_int8_t	_int64	#define _ast_int8_str	"_int64"	#endif	#if N == 8	#define _ast_int8_t	int64	#define _ast_int8_str	"int64"	#endif	#endif	#define elementsof(x)	(sizeof(x)/sizeof(x[0]))		static char			i_char = 1;	static short			i_short = 1;	static int			i_int = 1;	static long			i_long = 1L;	#ifdef _ast_int8_t	#if _ast_LL	static _ast_int8_t		i_long_long = 1LL;	static unsigned _ast_int8_t	u_long_long = 18446744073709551615ULL;	#else	static _ast_int8_t		i_long_long = 1;	static unsigned _ast_int8_t	u_long_long = 18446744073709551615;	#endif	#endif		static struct	{		char*	name;		int	size;		char*	swap;	} int_type[] = 	{		"char",		sizeof(char),		(char*)&i_char,		"short",	sizeof(short),		(char*)&i_short,		"int",		sizeof(int),		(char*)&i_int,		"long",		sizeof(long),		(char*)&i_long,	#ifdef _ast_int8_t		_ast_int8_str,	sizeof(_ast_int8_t),	(char*)&i_long_long,	#endif	};		static int	int_size[] = { 1, 2, 4, 8 };		int	main()	{		register int	t;		register int	s;		register int	m = 1;		register int	b = 1;		register int	w = 0;		#ifdef _ast_int8_t		unsigned _ast_int8_t	p;		char			buf[64];		if (int_type[elementsof(int_type)-1].size <= 4)			return 1;		p = 0x12345678;		p <<= 32;		p |= 0x9abcdef0;		sprintf(buf, "0x%016llx", p);		if (strcmp(buf, "0x123456789abcdef0"))			return 1;	#endif		for (s = 0; s < elementsof(int_size); s++)		{			for (t = 0; t < elementsof(int_type) && int_type[t].size < int_size[s]; t++);			if (t < elementsof(int_type))			{				m = int_size[s];	#if __INTERIX				if (m == 8)				{					printf("#ifdef _MSC_VER\n");					printf("#define _ast_int8_t	__int64\n");					printf("#else\n");					printf("#define _ast_int8_t	long long\n");					printf("#endif\n");				}				else	#endif				printf("#define _ast_int%d_t		%s\n", m, int_type[t].name);				if (m > 1)				{					if (*int_type[t].swap)						w |= b;					b <<= 1;				}			}		}		printf("#define _ast_intmax_t		_ast_int%d_t\n", m);		if (m == sizeof(long))			printf("#define _ast_intmax_long		1\n");		printf("#define _ast_intswap		%d\n", w);		printf("\n");		return 0;	}}endtst	- -DN=1 - -DN=0 output{	#define _BYTESEX_H	#include <sys/types.h>	_BEGIN_EXTERNS_	extern int	sprintf _ARG_((const char*, ...));	extern int	strcmp _ARG_((const char*, const char*));	_END_EXTERNS_	#if !N || !_STD_	#undef	_typ_long_double	#endif	#define elementsof(x)	(sizeof(x)/sizeof(x[0]))		static struct	{		char*	name;		int	size;	} flt_type[] = 	{		"float",	sizeof(float),		"double",	sizeof(double),	#ifdef _typ_long_double		"long double",	sizeof(long double),	#endif	};		int	main()	{		register int	t;		register int	m = 1;		#ifdef _typ_long_double		long double	p;		char		buf[64];		if (flt_type[elementsof(flt_type)-1].size <= sizeof(double))			return 1;		p = 1.12345E-55;		sprintf(buf, "%1.5LE", p);		if (strcmp(buf, "1.12345E-55"))			return 1;	#endif		for (t = 0; t < elementsof(flt_type); t++)		{			while (t < (elementsof(flt_type) - 1) && flt_type[t].size == flt_type[t + 1].size)				t++;			m = flt_type[t].size;			printf("#define _ast_flt%d_t		%s\n", flt_type[t].size, flt_type[t].name);		}		printf("#define _ast_fltmax_t		_ast_flt%d_t\n", m);		if (m == sizeof(double))			printf("#define _ast_fltmax_double		1\n");		return 0;	}}endtst	- -DTRY=1 - -DTRY=1 -Dvoid=char - -DTRY=2 - -DTRY=3 - -DTRY=4 output{	#define printf	______printf	#if _STD_ && _hdr_stdarg	#include <stdarg.h>	static void	varyfunny(int* p, ...)	{		va_list	ap;		va_start(ap, p);	#if TRY == 1		*p = *ap++ != 0;	#endif /*TRY == 1*/	#if TRY == 2		*p = *ap != 0;	#endif /*TRY == 2*/	#if TRY == 3		*p = ap++ != 0;	#endif /*TRY == 3*/		va_end(ap);	}	#else	#include <varargs.h>	static void	varyfunny(va_alist)	va_dcl	{		va_list	ap;		int*	p;		va_start(ap);		p = va_arg(ap, int*);	#if TRY == 1		*p = *ap++ != 0;	#endif /*TRY == 1*/	#if TRY == 2		*p = *ap != 0;	#endif /*TRY == 2*/	#if TRY == 3		*p = ap++ != 0;	#endif /*TRY == 3*/		va_end(ap);	}	#endif	#undef	printf	int	main()	{		int	r;		printf("\n#ifndef va_listref\n");	#if TRY == 4		printf("#define va_listref(p) (&(p))\t");			printf("/* pass va_list to varargs function */\n");		printf("#define va_listval(p) (*(p))\t");			printf("/* retrieve va_list from va_arg(ap,va_listarg) */\n");		printf("#define va_listarg va_list*\t");			printf("/* va_arg() va_list type */\n");	#else		varyfunny(&r);		printf("#define va_listref(p) (p)\t");			printf("/* pass va_list to varargs function */\n");		if (sizeof(va_list) > sizeof(void*))			printf("#define va_listval(p) (*(p))\t");		else			printf("#define va_listval(p) (p)\t");			printf("/* retrieve va_list from va_arg(ap,va_listarg) */\n");	#if TRY == 2		printf("#define va_listarg va_list*\t");	#else		printf("#define va_listarg va_list\t");	#endif /*TRY == 2*/			printf("/* va_arg() va_list type */\n");	#endif /*TRY == 4*/		#if !defined(va_copy)	#if defined(__va_copy)		printf("#ifndef va_copy\n");		printf("#define va_copy(to,fr) __va_copy(to,fr)\t");			printf("/* copy va_list fr -> to */\n");		printf("#endif\n");	#else	#if TRY == 2		printf("#ifndef va_copy\n");		printf("#define va_copy(to,fr) memcpy(to,fr,sizeof(va_list))\t");			printf("/* copy va_list fr -> to */\n");		printf("#endif\n");	#else		printf("#ifndef va_copy\n");		printf("#define va_copy(to,fr) ((to)=(fr))\t");			printf("/* copy va_list fr -> to */\n");		printf("#endif\n");	#endif	#endif	#endif			r = 1;		printf("#undef	_ast_va_list\n");		printf("#ifdef	va_start\n");		printf("#define _ast_va_list va_list\n");		printf("#else\n");	#if TRY == 1 || TRY == 2		printf("#define _ast_va_list void*");	#else	#if TRY == 3		if (sizeof(va_list) == sizeof(long))			printf("#define _ast_va_list long");		else if (sizeof(va_list) == sizeof(short))			printf("#define _ast_va_list short");		else			printf("#define _ast_va_list int");	#else	#if defined(_M_ALPHA) && defined(_VA_LIST_DEFINED)		printf("typedef struct { char *a0; int offset; } _ast_va_list_t;\n");		printf("#define _ast_va_list _ast_va_list_t");	#else		printf("#if __STD_C\n");		printf("#include <stdarg.h>\n");		printf("#else\n");		printf("#include <varargs.h>\n");		printf("#endif\n");		printf("#define _ast_va_list va_list\n");		r = 0;	#endif	#endif	#endif		if (r)			printf("\t/* va_list that avoids #include */\n");		printf("#endif\n");		printf("#endif\n");		return 0;	}}endcat{	#ifndef _AST_STD_H	#	if __STD_C && _hdr_stddef	#	include	<stddef.h>	#	endif	#	if _sys_types	#	include	<sys/types.h>	#	endif	#endif	#if !_typ_size_t	#	define _typ_size_t	1		typedef int size_t;	#endif	#if !_typ_ssize_t	#	define _typ_ssize_t	1		typedef int ssize_t;	#endif}end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -