问题有点多哈。。。
1、老师,您在2分的时候说 mingw是在MSVC上套个壳是啥意思,这俩不应该是两套实现完全不一致的编译器吗?
2、wsl的gcc和mingw的gcc有啥区别吗?
3、老师,我查了一下,#define __STDC_WANT_LIB_EXT1__ 1
这个宏的解释:
’’‘
开启标准库对于一些函数的更安全的版本(比如 strcpy_s memset_s 之类的)的支持。
’’'
但我发现不写#define __STDC_WANT_LIB_EXT1__ 1
,mingw也可以运行strcpy_s
这个函数,那#define __STDC_WANT_LIB_EXT1__ 1
这个宏有啥用呢?还是说写了#define __STDC_WANT_LIB_EXT1__ 1
这个宏,支持安全版函数的编译器才会定义__STDC_LIB_EXT1__
这个宏,进而通过__STDC_LIB_EXT1__
这个宏是否定义来判断是否要用这些安全版本的函数呢?
4、
老师,类似于__STDC_WANT_LIB_EXT1__
这种宏的定义一般都去哪找呢?我用 ctrl+鼠标左键
点不动啊
5、
#define __STDC_WANT_LIB_EXT1__ 1
#include <io_utils.h>
#include <string.h>
#include <stdlib.h>
int main() {
#ifdef __STDC_LIB_EXT1__
puts("support C11 safe version.");
#else
puts("No support for C11 safe version.");
#endif
char dst[2];
int error_no = strcpy_s(dst, 2, "Too long!");
PRINT_INT(error_no); // 34
if (error_no) {
perror("strcpy_s returns: "); // strcpy_s returns: : Result too large
}
return 0;
}
老师mingw和MSVC最后都会输出No support for C11 safe version.
,那说明__STDC_LIB_EXT1__
这个宏未定义啊,这是为啥呢?另外MSVC运行上面的代码会报错,如下图。。。