Visual C ++中的__PRETTY_FUNCTION__

时间:2018-02-18 23:52:13

标签: c++ visual-studio visual-c++ visual-studio-2017

在使用Visual Studio 2017中的Visual C ++(准确地说是15.5.6)时,我注意到来自GCC的class StudentUI{ int myHours; private string[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; public StudentUI() { } public void MainMethod(){ Student my = new Student(days.length); Console.WriteLine("Please enter your name:\t "); my.Name = Console.ReadLine(); Console.WriteLine("Please enter your student ID number:\t "); my.ID = int.Parse(Console.ReadLine()); FillHours(my); this.DisplayData(my); this.DisplayAverage(my); } public void FillHours(Student my){ for (int i = 0; i < this.days.Length; i++){ Console.Write("Enter the number of hours that you studied ITDEV-115 on {0}:\t ", this.days[i]); myHours = int.Parse(Console.ReadLine()); my.EnterHours(i, myHours); } } class Student{ private int id; private string name; private double[] hours; public student(int size) { hours = new double[size]; } public void EnterHours(int index, int myHours) { hours[index] = myHours; } 似乎有效! - 在某种程度上至少......

在输入时确实显示了建议: enter image description here

它的值也显示在工具提示中,符合预期: enter image description here

然后使用__PRETTY_FUNCTION__编译代码会导致错误:

__PRETTY_FUNCTION__

那么,有没有办法让它在Visual C ++中运行?有些可能包括?还是一些特殊的编译设置? (我想我使用默认的。)为什么它会在显示的示例中起作用,但在实际使用中却不起作用?!

请注意,我并不是在寻找error C2065: '__PRETTY_FUNCTION__': undeclared identifier 的Visual C ++替代品。我已经知道了。我对这里的行为感到惊讶和好奇。

2 个答案:

答案 0 :(得分:2)

  

那么,有没有办法让它在Visual C ++中运行?有些可能包括?还是一些特殊的编译设置? (我想我正在使用默认的。)为什么它会在显示的示例中有效,但在实际使用中却没有?!

没有

Visual Studio使用Edison Design Group C ++前端用于InteliSense,如Visual C ++团队博客的Rebuilding Intellisensehere中所述,而不是Microsoft C ++编译器。这意味着Intellisense可用的某些功能在编译时不可用。

EDG的C++ Front End documentation提到它支持某些GCC预定义,如第71页的__PRETTY_FUNCTION__ - “1.13预定义的宏”以及Microsoft的__FUNCSIG__

您甚至可以通过键入__EDG_VERSION__并将鼠标悬停在其上来查看EDG的版本。

答案 1 :(得分:1)

您可以通过将它放在一些通用头文件中来很好地模拟它(例如,您的预编译头文件,如果您正在使用它):

#if !defined(__PRETTY_FUNCTION__)
#define __PRETTY_FUNCTION__ __FUNCSIG__
#endif

它的计算结果与 PRETTY_FUNCTION 不完全相同,但它是具有参数类型的函数名称的人类可读表示。