visualstudio-C编程

visualstudio-C编程,c,visual-studio,ide,C,Visual Studio,Ide,这里没有人。 我注意到在Visual Studio下,常见的C命令有点不同, 我现在能想到的唯一一个例子是VS坚持使用scanf_s而不是scanf,但我确信还有其他的怪癖 我想问的是,我应该学习,或者甚至在VS上使用C语言,为什么 谢谢MSVC不会坚持,只会发出警告,促使您使用自己的非标准功能。MSVC发出的警告消息告诉您要做什么: 警告C4996:“scanf”:此函数或变量可能不安全。考虑使用SncFis代替。要禁用弃用,请使用 _CRT\u安全\u无警告 这意味着在任何#包含文件之前放置

这里没有人。 我注意到在Visual Studio下,常见的C命令有点不同, 我现在能想到的唯一一个例子是VS坚持使用scanf_s而不是scanf,但我确信还有其他的怪癖

我想问的是,我应该学习,或者甚至在VS上使用C语言,为什么


谢谢

MSVC不会坚持,只会发出警告,促使您使用自己的非标准功能。MSVC发出的警告消息告诉您要做什么:

警告C4996:“scanf”:此函数或变量可能不安全。考虑使用SncFis代替。要禁用弃用,请使用 _CRT\u安全\u无警告

这意味着在任何
#包含
文件之前放置
#定义"CRT"安全"无警告

我在任何
#include

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE  
#define _CRT_NONSTDC_NO_DEPRECATE
#define _USE_MATH_DEFINES

#include <stdio.h>      // etcetera
\define\u CRT\u SECURE\u NO\u警告
#定义\u CRT\u SECURE\u NO\u弃用
#定义CRT非DC不反对
#定义使用数学定义
#包括//等等

无论如何,MSVC不符合C标准。

如果你想学习C,我建议不要使用VS。微软并不真正正确地支持C标准。已经将近20年了,仍然不符合C99。VS缺少一些头文件,但我不知道有任何合法的C结构是VS无法编译的。VS不鼓励在C标准库中使用不安全的API,这是一个特性,而不是一个bug。@jwdonahue MSVC不能编译可变长度数组(VLA),即使在C99中是强制性的,尽管在C11中是可选的。我不能举出任何消息来源,但我的理解是,微软影响了标准委员会,使他们从未实施过的VLA成为可选的。啊,是的,我知道这一点。确实很烦人。谢谢提醒。@jwdonahue MSVC的一些被认为更安全的功能并不比原来的更好,例如
scanf_s
family,它们比原来的更难使用。没错,但它们不太可能被利用,这就是他们劝阻人们使用它们的全部目的。