Path: utzoo!utgpu!water!watmath!clyde!rutgers!gatech!mcnc!uvaarpa!umd5!cvl!elsie!ado From: ado@elsie.UUCP (Arthur David Olson) Newsgroups: comp.lang.c Subject: Re: Macro parameters getting substituted into strings Message-ID: <8035@elsie.UUCP> Date: 27 Mar 88 21:00:50 GMT References: <11879@brl-adm.ARPA> <4099@hoptoad.uucp> <7309@brl-smoke.ARPA> <4253@hoptoad.uucp> Organization: NIH-LEC, Bethesda, MD Lines: 74 In article <4253@hoptoad.uucp>, gnu@hoptoad.uucp (John Gilmore) writes: > I am not saying that I like the idea of macro parameter names being > replaced even inside strings. My complaint is that an ANSI C compiler > does not have a capability that Unix C compilers have, and which many > Unix programs depend upon. This is the capability to turn a single- > character argument into a character constant. MOVING TO ANSI C REQUIRES > CHANGING ALL THE **USES**, AS WELL AS ALL THE **DEFINITIONS**, OF MACROS > THAT NEED THIS CAPABILITY! Here's an example (taken from "/usr/include/sys/ttychars.h") of how we coped with the problem here at elsie; this avoids the need to change *most* uses; you'll get complaints about the ones that do need special attention. #if !defined __STDC__ && !defined __DECUS_CPP__ #define CTRL(c) ('c'&037) #else /* defined __STDC__ || defined __DECUS_CPP__ */ #ifndef LETR_a #define LETR_a 'a' #define LETR_b 'b' #define LETR_c 'c' #define LETR_d 'd' #define LETR_e 'e' #define LETR_f 'f' #define LETR_g 'g' #define LETR_h 'h' #define LETR_i 'i' #define LETR_j 'j' #define LETR_k 'k' #define LETR_l 'l' #define LETR_m 'm' #define LETR_n 'n' #define LETR_o 'o' #define LETR_p 'p' #define LETR_q 'q' #define LETR_r 'r' #define LETR_s 's' #define LETR_t 't' #define LETR_u 'u' #define LETR_v 'v' #define LETR_w 'w' #define LETR_x 'x' #define LETR_y 'y' #define LETR_z 'z' #define LETR_A 'A' #define LETR_B 'B' #define LETR_C 'C' #define LETR_D 'D' #define LETR_E 'E' #define LETR_F 'F' #define LETR_G 'G' #define LETR_H 'H' #define LETR_I 'I' #define LETR_J 'J' #define LETR_K 'K' #define LETR_L 'L' #define LETR_M 'M' #define LETR_N 'N' #define LETR_O 'O' #define LETR_P 'P' #define LETR_Q 'Q' #define LETR_R 'R' #define LETR_S 'S' #define LETR_T 'T' #define LETR_U 'U' #define LETR_V 'V' #define LETR_W 'W' #define LETR_X 'X' #define LETR_Y 'Y' #define LETR_Z 'Z' #endif /* !LETR_a */ #define CTRL(c) ((LETR_ ## c) & 037) #endif /* defined __STDC__ || defined __DECUS_CPP__ */ -- olson@ncifcrf.gov ". . .that lucky ol' Sun ain't got nothin' to do. . ."