Visual Studio是否支持无符号/有符号类型转换的编译警告?
Visual Studio 无 GCC
-Wsign-conversion 的直接等效警告选项 GCC的-Wsign-conversion选项可检测有符号/无符号类型间的隐式转换风险,但Visual Studio中没有完全对等的选项——即便启用所有相关的有符号/无符号警告,也无法触发类似GCC的检测逻辑。
以下是一段32位示例程序,将32位无符号类型size_t赋值给32位有符号类型int时,VS不会触发警告:
#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma warning(3:4365) #pragma warning(3:4388) #pragma warning(3:4389) #pragma warning(3:4287) int main(int argc, char *argv[]) { int x; x = strlen(argv[1]) + strlen(argv[2]); // strlen返回无符号size_t,赋值给有符号int printf("%d\n", x); return 0; }
VS编译表现
使用cl /W3 a.c、/W4或/Wall编译上述代码,均不会输出相关警告。即使显式启用4365(有符号/无符号赋值不匹配)、4388(有符号/无符号比较不匹配)、4389(有符号/无符号相等比较不匹配)、4287(无符号值作为循环计数器)这些相关警告编号,也无法触发对应转换警告。
GCC编译表现
使用GCC的-Wsign-conversion选项编译时,会明确触发转换风险警告:
$ gcc -Wsign-conversion -o a a.c a.c: In function 'main': a.c:13:23: warning: conversion to 'int' from 'size_t' may change the sign of the result [-Wsign-conversion]
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

