在使用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;
}
似乎有效! - 在某种程度上至少......
然后使用__PRETTY_FUNCTION__
编译代码会导致错误:
__PRETTY_FUNCTION__
那么,有没有办法让它在Visual C ++中运行?有些可能包括?还是一些特殊的编译设置? (我想我使用默认的。)为什么它会在显示的示例中起作用,但在实际使用中却不起作用?!
请注意,我并不是在寻找error C2065: '__PRETTY_FUNCTION__': undeclared identifier
的Visual C ++替代品。我已经知道了。我对这里的行为感到惊讶和好奇。
答案 0 :(得分:2)
那么,有没有办法让它在Visual C ++中运行?有些可能包括?还是一些特殊的编译设置? (我想我正在使用默认的。)为什么它会在显示的示例中有效,但在实际使用中却没有?!
没有
Visual Studio使用Edison Design Group C ++前端用于InteliSense,如Visual C ++团队博客的Rebuilding Intellisense和here中所述,而不是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 不完全相同,但它是具有参数类型的函数名称的人类可读表示。