Viewing file: strify2.c (1.42 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Copyright (C) 2000 Free Software Foundation, Inc. */
/* { dg-do run } */ /* { dg-options "-std=c99 -pedantic-errors" } */
/* Tests a whole bunch of things are correctly stringified. */
extern int strcmp (const char *, const char *); extern int puts (const char *); extern void abort (void); #define err(str) do { puts(str); abort(); } while (0)
#define str(x) #x #define xstr(x) str(x) #define strvar(...) #__VA_ARGS__
#define glibc_str(x) glibc_str2 (w, x) #define glibc_str2(w, x) #x #define ver GLIBC_2.2
int main (int argc, char *argv[]) { str (\); /* { dg-warning "valid string" "str(\\)" } */ str (\\); /* OK. */ str (\\\); /* { dg-warning "valid string" "str(\\\\\\)" } */
/* This also serves as a useful test of the value of __INCLUDE_LEVEL. */ if (strcmp (xstr (__INCLUDE_LEVEL__), "0")) err ("macro expansion");
if (strcmp(str (__INCLUDE_LEVEL__), "__INCLUDE_LEVEL__")) err ("macro name");
if (strcmp(str(), "") || strcmp(str( ), "")) err ("empty string");
if (strcmp(str ("s\n"), "\"s\\n\"")) err ("quoted string");
if (strcmp (str (a € b), "a \200 b")) err ("unprintable char");
if (strcmp (str ( a b@ c ), "a b@ c")) err ("internal whitespace");
if (strcmp (str(a \n), "a \n")) err ("backslash token");
if (strcmp (strvar (foo, bar), "foo, bar")) err ("variable arguments");
if (strcmp (glibc_str (ver), "GLIBC_2.2")) err ("whitespace");
return 0; }
|