VS17中字面值字符串问题
引言
之前在windows中写const
的总结, 在vs17中测试代码, 结果在测试字符串面值时出现了意料之外的错误.
问题
char *str = "vs2017";
这行代码在gcc中能够通过编译, 只是有一个警告 : warning: ISO C++ forbids converting a string constant to char* [-Wwrite-strings]
但是在vs中却不能通过编译, 错误 :
所以同样我在做const
与typedef
的问题上, vs已无法编译通过, 例子如下 :
typedef char * type;
const type str = "str2017";
错误的结果也是一样, 然而gcc同样能够通过编译.
解决
一种办法是换一个编译器试试, 还有一种可以用vs自带的中断工具编译就可以, 但是肯定有人愿意直接使用编译软件本身, 解决办法微软官方也是有写. 这里简单的修改方法写出.
以上问题在于软件设置编译时命令行默认参数.
右键文件, 选择文件属性, 你就可以看到这样的界面, 再选择命令行就可以看到这样的命令行参数, 问题就在/permissive- : 就是禁止像字面值转为普通指针这样不安全的隐患.
所以最终删除/permissive
就行, 选中语言->符号模式->否. OK! 问题解决.
参考
/permissive- (Standards conformance)