📄 cforthdf.h
字号:
#if defined(vmsFortran) || defined(CRAYFortran)#define JCF(TN,I)#else#define JCF(TN,I) STR_##TN(1,J,B##I, 0,0,0)#define JLOGICAL( B)#define JPLOGICAL(B)#define JSTRING( B) ,B.flen#define JPSTRING( B) ,B#define JSTRINGV JSTRING#define JPSTRINGV JSTRING#define JZTRINGV JSTRING#define JPZTRINGV JSTRING#endif#define WCF(TN,AN,I) STR_##TN(2,W,AN,B##I, 0,0)#define WLOGICAL( A,B)#define WPLOGICAL(A,B) *B=F2CLOGICAL(*B);#define WSTRING( A,B) (A[B.clen]!='\0'?A[B.clen]='\0':0); /* A?="constnt"*/#define WPSTRING( A,B) kill_trailing(A,' ');#ifdef vmsFortran#define WSTRINGV( A,B) free(B.dsc$a_pointer);#define WPSTRINGV(A,B) \ vkill_trailing(f2cstrv((char*)A, (char*)A, \ B.dsc$w_length+1, B.dsc$l_arsize+B.dsc$l_m[0]), \ B.dsc$w_length+1, B.dsc$l_arsize+B.dsc$l_m[0], ' ');#else#define WSTRINGV( A,B) free(B.s);#define WPSTRINGV(A,B) vkill_trailing( \ f2cstrv((char*)A,(char*)A,B.flen+1,B.sizeofA), B.flen+1,B.sizeofA,' ');#endif#define WZTRINGV WSTRINGV#define WPZTRINGV WPSTRINGV#define NCF(TN,I,C) _SEP_(TN,C,COMMA) _INT(2,N,TN,A##I,0) #define NNCF UUCF#define NNNCF(TN,I,C) _SEP_(TN,C,COLON) _INT(2,N,TN,A##I,0) #define NINT( T,A) typeP##T##VVVVVVV * A#define NINTV( T,A) typeP##T##VVVVVV * A#define NINTVV( T,A) typeP##T##VVVVV * A#define NINTVVV( T,A) typeP##T##VVVV * A#define NINTVVVV( T,A) typeP##T##VVV * A#define NINTVVVVV( T,A) typeP##T##VV * A#define NINTVVVVVV( T,A) typeP##T##V * A#define NINTVVVVVVV(T,A) typeP##T * A#define NPINT( T,A) type##T##VVVVVVV * A#define NPVOID( T,A) void * A#ifdef apolloFortran#define NROUTINE( T,A) void (**A)()#else#define NROUTINE( T,A) void ( *A)()#endif#ifdef vmsFortran#define NSTRING( T,A) fstring * A#define NSTRINGV( T,A) fstringvector * A#else#ifdef CRAYFortran#define NSTRING( T,A) _fcd A#define NSTRINGV( T,A) _fcd A#else#define NSTRING( T,A) char * A#define NSTRINGV( T,A) char * A#endif#endif#define NPSTRING( T,A) NSTRING(T,A) /* CRAY insists on arg.'s here. */#define NPNSTRING( T,A) NSTRING(T,A) /* CRAY insists on arg.'s here. */#define NPPSTRING( T,A) NSTRING(T,A) /* CRAY insists on arg.'s here. */#define NSTRVOID( T,A) NSTRING(T,A) /* CRAY insists on arg.'s here. */#define NPSTRINGV( T,A) NSTRINGV(T,A)#define NZTRINGV( T,A) NSTRINGV(T,A)#define NPZTRINGV( T,A) NPSTRINGV(T,A)/* Note: Prevent compiler warnings, null #define PROTOCCALLSFSUB14/20 after #include-ing cfortran.h if calling the FORTRAN wrapper within the same source code where the wrapper is created. */#ifndef __CF__KnR#define PROTOCCALLSFSUB0(UN,LN) extern void CFC_(UN,LN)();#define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \ extern void CFC_(UN,LN)(NCF(T1,1,0) NCF(T2,2,1) NCF(T3,3,1) NCF(T4,4,1) \ NCF(T5,5,1) NCF(T6,6,1) NCF(T7,7,1) NCF(T8,8,1) NCF(T9,9,1) NCF(TA,A,1) \ NCF(TB,B,1) NCF(TC,C,1) NCF(TD,D,1) NCF(TE,E,1) ,...);#define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)\ extern void CFC_(UN,LN)(NCF(T1,1,0) NCF(T2,2,1) NCF(T3,3,1) NCF(T4,4,1) \ NCF(T5,5,1) NCF(T6,6,1) NCF(T7,7,1) NCF(T8,8,1) NCF(T9,9,1) NCF(TA,A,1) \ NCF(TB,B,1) NCF(TC,C,1) NCF(TD,D,1) NCF(TE,E,1) NCF(TF,F,1) NCF(TG,G,1) \ NCF(TH,H,1) NCF(TI,I,1) NCF(TJ,J,1) NCF(TK,K,1) ,...);#else#define PROTOCCALLSFSUB0( UN,LN)#define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)#define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)#endif#ifdef OLD_VAXC /* Allow %CC-I-PARAMNOTUSED. */#pragma standard#endif/* do{...}while(FALSE) allows if(a==b) FORT(); else BORT(); */#define CCALLSFSUB0(UN,LN) \ do{PROTOCCALLSFSUB0(UN,LN) CFC_(UN,LN)();}while(FALSE)#define CCALLSFSUB1( UN,LN,T1, A1) \ CCALLSFSUB5 (UN,LN,T1,CF_0,CF_0,CF_0,CF_0,A1,0,0,0,0)#define CCALLSFSUB2( UN,LN,T1,T2, A1,A2) \ CCALLSFSUB5 (UN,LN,T1,T2,CF_0,CF_0,CF_0,A1,A2,0,0,0)#define CCALLSFSUB3( UN,LN,T1,T2,T3, A1,A2,A3) \ CCALLSFSUB5 (UN,LN,T1,T2,T3,CF_0,CF_0,A1,A2,A3,0,0)#define CCALLSFSUB4( UN,LN,T1,T2,T3,T4, A1,A2,A3,A4)\ CCALLSFSUB5 (UN,LN,T1,T2,T3,T4,CF_0,A1,A2,A3,A4,0)#define CCALLSFSUB5( UN,LN,T1,T2,T3,T4,T5, A1,A2,A3,A4,A5) \ CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,0,0,0,0,0)#define CCALLSFSUB6( UN,LN,T1,T2,T3,T4,T5,T6, A1,A2,A3,A4,A5,A6) \ CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,0,0,0,0)#define CCALLSFSUB7( UN,LN,T1,T2,T3,T4,T5,T6,T7, A1,A2,A3,A4,A5,A6,A7) \ CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,0,0,0)#define CCALLSFSUB8( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8, A1,A2,A3,A4,A5,A6,A7,A8) \ CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,0,0)#define CCALLSFSUB9( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,A1,A2,A3,A4,A5,A6,A7,A8,A9)\ CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,0)#define CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA)\ CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,0,0,0,0)#define CCALLSFSUB11(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB)\ CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,0,0,0)#define CCALLSFSUB12(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC)\ CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,0,0)#define CCALLSFSUB13(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD)\ CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,0)#define CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE)\do{VVCF(T1,A1,B1) VVCF(T2,A2,B2) VVCF(T3,A3,B3) VVCF(T4,A4,B4) VVCF(T5,A5,B5) \ VVCF(T6,A6,B6) VVCF(T7,A7,B7) VVCF(T8,A8,B8) VVCF(T9,A9,B9) VVCF(TA,AA,BA) \ VVCF(TB,AB,BB) VVCF(TC,AC,BC) VVCF(TD,AD,BD) VVCF(TE,AE,BE) \ PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \ ACF(LN,T1,A1,1) ACF(LN,T2,A2,2) ACF(LN,T3,A3,3) \ ACF(LN,T4,A4,4) ACF(LN,T5,A5,5) ACF(LN,T6,A6,6) ACF(LN,T7,A7,7) \ ACF(LN,T8,A8,8) ACF(LN,T9,A9,9) ACF(LN,TA,AA,A) ACF(LN,TB,AB,B) \ ACF(LN,TC,AC,C) ACF(LN,TD,AD,D) ACF(LN,TE,AE,E) \ CFC_(UN,LN)(AACF(T1,A1,1,0) AACF(T2,A2,2,1) AACF(T3,A3,3,1) \ AACF(T4,A4,4,1) AACF(T5,A5,5,1) AACF(T6,A6,6,1) AACF(T7,A7,7,1) \ AACF(T8,A8,8,1) AACF(T9,A9,9,1) AACF(TA,AA,A,1) AACF(TB,AB,B,1) \ AACF(TC,AC,C,1) AACF(TD,AD,D,1) AACF(TE,AE,E,1) \ JCF(T1,1) JCF(T2,2) JCF(T3,3) JCF(T4,4) JCF(T5,5) JCF(T6,6) JCF(T7,7) \ JCF(T8,8) JCF(T9,9) JCF(TA,A) JCF(TB,B) JCF(TC,C) JCF(TD,D) JCF(TE,E) );\ WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) \ WCF(T6,A6,6) WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,AA,A) \ WCF(TB,AB,B) WCF(TC,AC,C) WCF(TD,AD,D) WCF(TE,AE,E) }while(FALSE)/* Apollo 6.7, CRAY, Sun, VAX/Ultrix vcc/cc and HP can't hack more than 31 arg's */#if !(defined(VAXUltrix)&&!defined(__GNUC__)) && !defined(__CF__APOLLO67) && !defined(sun) && !defined(__hpux) && !defined(_CRAY)#define CCALLSFSUB15(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF)\ CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,CF_0,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,0,0,0,0,0)#define CCALLSFSUB16(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG)\ CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,0,0,0,0)#define CCALLSFSUB17(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH)\ CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,0,0,0)#define CCALLSFSUB18(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI)\ CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,0,0)#define CCALLSFSUB19(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ)\ CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,0)/* PROTOCCALLSFSUB20 is commented out, because it chokes the VAX VMS compiler. It isn't required since we so far only pass pointers and integers to FORTRAN routines and these arg.'s aren't promoted to anything else. */#define CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH, \ TI,TJ,TK, A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) \do{VVCF(T1,A1,B1) VVCF(T2,A2,B2) VVCF(T3,A3,B3) VVCF(T4,A4,B4) VVCF(T5,A5,B5) \ VVCF(T6,A6,B6) VVCF(T7,A7,B7) VVCF(T8,A8,B8) VVCF(T9,A9,B9) VVCF(TA,AA,BA) \ VVCF(TB,AB,BB) VVCF(TC,AC,BC) VVCF(TD,AD,BD) VVCF(TE,AE,BE) VVCF(TF,AF,BF) \ VVCF(TG,AG,BG) VVCF(TH,AH,BH) VVCF(TI,AI,BI) VVCF(TJ,AJ,BJ) VVCF(TK,AK,BK) \/* PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)*/\ ACF(LN,T1,A1,1) ACF(LN,T2,A2,2) ACF(LN,T3,A3,3) ACF(LN,T4,A4,4) \ ACF(LN,T5,A5,5) ACF(LN,T6,A6,6) ACF(LN,T7,A7,7) ACF(LN,T8,A8,8) \ ACF(LN,T9,A9,9) ACF(LN,TA,AA,A) ACF(LN,TB,AB,B) ACF(LN,TC,AC,C) \ ACF(LN,TD,AD,D) ACF(LN,TE,AE,E) ACF(LN,TF,AF,F) ACF(LN,TG,AG,G) \ ACF(LN,TH,AH,H) ACF(LN,TI,AI,I) ACF(LN,TJ,AJ,J) ACF(LN,TK,AK,K) \ CFC_(UN,LN)(AACF(T1,A1,1,0) AACF(T2,A2,2,1) AACF(T3,A3,3,1) AACF(T4,A4,4,1) \ AACF(T5,A5,5,1) AACF(T6,A6,6,1) AACF(T7,A7,7,1) AACF(T8,A8,8,1) \ AACF(T9,A9,9,1) AACF(TA,AA,A,1) AACF(TB,AB,B,1) AACF(TC,AC,C,1) \ AACF(TD,AD,D,1) AACF(TE,AE,E,1) AACF(TF,AF,F,1) AACF(TG,AG,G,1) \ AACF(TH,AH,H,1) AACF(TI,AI,I,1) AACF(TJ,AJ,J,1) AACF(TK,AK,K,1) \ JCF(T1,1) JCF(T2,2) JCF(T3,3) JCF(T4,4) JCF(T5,5) JCF(T6,6) JCF(T7,7) \ JCF(T8,8) JCF(T9,9) JCF(TA,A) JCF(TB,B) JCF(TC,C) JCF(TD,D) JCF(TE,E) \ JCF(TF,F) JCF(TG,G) JCF(TH,H) JCF(TI,I) JCF(TJ,J) JCF(TK,K) ); \ WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) WCF(T6,A6,6) \ WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,AA,A) WCF(TB,AB,B) WCF(TC,AC,C) \ WCF(TD,AD,D) WCF(TE,AE,E) WCF(TF,AF,F) WCF(TG,AG,G) WCF(TH,AH,H) WCF(TI,AI,I) \ WCF(TJ,AJ,J) WCF(TK,AK,K) }while(FALSE)#endif /* Apollo 6.7, CRAY, Sun and HP can't hack more than 31 arg.'s *//*-------------------------------------------------------------------------*//* UTILITIES FOR C TO CALL FORTRAN FUNCTIONS *//*N.B. PROTOCCALLSFFUNn(..) generates code, whether or not the FORTRAN function is called. Therefore, especially for creator's of C header files for large FORTRAN libraries which include many functions, to reduce compile time and object code size, it may be desirable to create preprocessor directives to allow users to create code for only those functions which they use. *//* The following defines the maximum length string that a function can return. Of course it may be undefine-d and re-define-d before individual PROTOCCALLSFFUNn(..) as required. It would also be nice to have this derived from the individual machines' limits. */#define MAX_LEN_FORTRAN_FUNCTION_STRING 0x4FE/* The following defines a character used by CFORTRAN.H to flag the end of a string coming out of a FORTRAN routine. */#define CFORTRAN_NON_CHAR 0x7F#ifdef OLD_VAXC /* Prevent %CC-I-PARAMNOTUSED. */#pragma nostandard#endif#define _SEP_(TN,C,COMMA) __SEP_##C(TN,COMMA)#define __SEP_0(TN,COMMA) #define __SEP_1(TN,COMMA) _INT(2,SEP_,TN,COMMA,0)#define SEP_INT(T,B) A##B#define SEP_INTV SEP_INT#define SEP_INTVV SEP_INT#define SEP_INTVVV SEP_INT#define SEP_INTVVVV SEP_INT#define SEP_INTVVVVV SEP_INT#define SEP_INTVVVVVV SEP_INT#define SEP_INTVVVVVVV SEP_INT#define SEP_PINT SEP_INT#define SEP_PVOID SEP_INT#define SEP_ROUTINE SEP_INT#define SEP_SIMPLE SEP_INT#define SEP_VOID SEP_INT /* Need for FORTRAN calls to C subroutines. */#define SEP_STRING SEP_INT#define SEP_STRINGV SEP_INT#define SEP_PSTRING SEP_INT#define SEP_PSTRINGV SEP_INT#define SEP_PNSTRING SEP_INT#define SEP_PPSTRING SEP_INT#define SEP_STRVOID SEP_INT#define SEP_ZTRINGV SEP_INT#define SEP_PZTRINGV SEP_INT #if defined(SIGNED_BYTE) || !defined(UNSIGNED_BYTE)#ifdef OLD_VAXC#define INTEGER_BYTE char /* Old VAXC barfs on 'signed char' */#else#define INTEGER_BYTE signed char /* default */#endif#else#define INTEGER_BYTE unsigned char#endif#define typePBYTEVVVVVVV INTEGER_BYTE#define typePDOUBLEVVVVVVV DOUBLE_PRECISION #define typePFLOATVVVVVVV float#define typePINTVVVVVVV int#define typePLOGICALVVVVVVV int#define typePLONGVVVVVVV long#define typePSHORTVVVVVVV short#define CFARGS0(A,T,W,X,Y,Z) A##T#define CFARGS1(A,T,W,X,Y,Z) A##T(W)#define CFARGS2(A,T,W,X,Y,Z) A##T(W,X)#define CFARGS3(A,T,W,X,Y,Z) A##T(W,X,Y)#define CFARGS4(A,T,W,X,Y,Z) A##T(W,X,Y,Z)#define _INT(N,T,I,Y,Z) INT_##I(N,T,I,Y,Z)#define INT_BYTE INT_DOUBLE#define INT_DOUBLE( N,A,B,Y,Z) CFARGS##N(A,INT,B,Y,Z,0)#define INT_FLOAT INT_DOUBLE#define INT_INT INT_DOUBLE#define INT_LOGICAL INT_DOUBLE#define INT_LONG INT_DOUBLE#define INT_SHORT INT_DOUBLE#define INT_PBYTE INT_PDOUBLE#define INT_PDOUBLE( N,A,B,Y,Z) CFARGS##N(A,PINT,B,Y,Z,0)#define INT_PFLOAT INT_PDOUBLE#define INT_PINT INT_PDOUBLE#define INT_PLOGICAL INT_PDOUBLE#define INT_PLONG INT_PDOUBLE#define INT_PSHORT INT_PDOUBLE#define INT_BYTEV INT_DOUBLEV#define INT_BYTEVV INT_DOUBLEVV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -