pretty4.c

来自「this is a gcc file, you can download it 」· C语言 代码 · 共 85 行

C
85
字号
// Copyright (C) 2000 Free Software Foundation, Inc.// Contributed by Nathan Sidwell 3 Mar 2000 <nathan@codesourcery.com>// __PRETTY_FUNCTION__, __FUNCTION__ and __function__ should have the// type char const [X], where X is the right value for that particular functionstatic void const *strings[4];static void const *tpls[4];static unsigned pos = 0;static int fail;static void const *ptr = 0;void unover (char const (*)[5]) {}void foo (char const (*)[5]) {}void foo (void *) {fail = 1;}void foo (void const *) {fail = 1;}void baz (char const (&)[5]) {}template<unsigned I> void PV (char const (&objRef)[I]){  strings[pos] = objRef;  tpls[pos] = __PRETTY_FUNCTION__;  pos++;}void fn (){  PV (__FUNCTION__);  PV (__func__);  PV (__PRETTY_FUNCTION__);  PV ("wibble");}void baz (){  ptr = __FUNCTION__;  // there should be no string const merging  if (ptr == "baz")    fail = 1;  // but all uses should be the same.  if (ptr != __FUNCTION__)    fail = 1;}int baz (int){  return ptr == __FUNCTION__;}int main (){  // make sure we actually emit the VAR_DECL when needed, and things have the  // expected type.  foo (&__FUNCTION__);  baz (__FUNCTION__);  unover (&__FUNCTION__);  if (fail)    return 1;    // __FUNCTION__ should be unique across functions with the same base name  // (it's a local static, _not_ a string).  baz ();  if (fail)    return 1;  if (baz (1))    return 1;  fn ();    // Check the names of fn. They should all be distinct strings (though two  // will have the same value).  if (strings[0] == strings[1])    return 1;  if (strings[0] == strings[2])    return 1;  if (strings[1] == strings[2])    return 1;  // check the names of the template functions so invoked  if (tpls[0] != tpls[1])    return 1;  if (tpls[0] == tpls[2])    return 1;    return 0;}

⌨️ 快捷键说明

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