下面这段是MSDN上的小例子,请问为什么这段程序输出func, 
那个i是什么作用,
__FUNCTION__在哪里定义了吗,
printf_s与printf到底啥区别啊?本人入门者,见笑了。#include <stdio.h>void func(int i) {
    printf_s("%s\n", __FUNCTION__);
}int main()
{
    __int8 i8 = 100;
    func(i8);   // no void func(__int8 i8) function
                // __int8 will be promoted to int
}

解决方案 »

  1.   

    i是参数,没有用到
    __FUNCTION__被编译器赋值为当前函数名
    printf_s是printf的更安全的版本
      

  2.   

    抱歉,还是有点confused...主要是不明白程序怎么运行的,为什么会输出func这几个字符,i没用到吗,这个本来是MSDN示范__int8使用的示例?其次__FUNCTION__是VC中特有的吗,有什么用?再者printf_s更安全?不是流处理,有什么不安全的方面?
      

  3.   


    i是函数的参数,在里面有没有用到一目了然啊,你把func定义为无参数的结果也是输出func..__FUNCTION__我前面说了呀,被编译器复制为当前函数名,如果疑惑可以修改函数名看看是不是输出对应的,VC还有其他类似的宏,比如__FILE__就是当前所在文件的路径,这都是由编译器赋值的,
    至于printf_s,后面加s的是更安全的版本,你可以参看MSDN,说的很清楚了The main difference between printf_s and printf is that printf_s checks the format string for valid formatting characters, whereas printf only checks if the format string is a null pointer. If either check fails, an invalid parameter handler is invoked, as described in Parameter Validation.