浏览代码

refactor & fix: 修复MSVC编译警告问题

SongZihuan 3 年之前
父节点
当前提交
cc80a44339
共有 12 个文件被更改,包括 37 次插入69 次删除
  1. 4 4
      CMakeLists.txt
  2. 2 2
      include/tool/dlc.h
  3. 5 4
      include/tool/md5.h
  4. 0 2
      include/tool/str.h
  5. 4 4
      src/core/code.cpp
  6. 3 3
      src/core/inter.cpp
  7. 5 3
      src/interface/it-reader.cpp
  8. 1 1
      src/main-run.cpp
  9. 3 2
      src/main.cpp
  10. 2 2
      src/tool/md5.cpp
  11. 7 41
      src/tool/string.cpp
  12. 1 1
      test/CMakeLists.txt

+ 4 - 4
CMakeLists.txt

@@ -43,11 +43,11 @@ unset(fpic_enable)
 
 if (MSVC)
     if(CMAKE_BUILD_TYPE EQUAL Debug)
-        set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4")
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4")
+        set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4 /wd4251 /wd4275")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4 /wd4251 /wd4275")
     else()
-        set(CMAKE_C_FLAGS "/DWIN32 /D_WINDOWS /Wall")
-        set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS /GR /EHsc /Wall")
+        set(CMAKE_C_FLAGS "/DWIN32 /D_WINDOWS /W4 /wd4251 /wd4275")
+        set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS /GR /EHsc /W4 /wd4251 /wd4275")
     endif()
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")

+ 2 - 2
include/tool/dlc.h

@@ -87,8 +87,8 @@ namespace aFuntool {
         private:
             void *handle_;
             int link_;  // 引用计数
-            struct Handle *next_;
-            struct Handle *prev_;
+            class Handle *next_;
+            class Handle *prev_;
         };
 
     private:

+ 5 - 4
include/tool/md5.h

@@ -1,14 +1,15 @@
 #ifndef AFUN_MD5_H
 #define AFUN_MD5_H
 #include "aFunToolExport.h"
+#include "macro.h"
 
 /* md5计算工具 */
 
 namespace aFuntool {
-    const int READ_DATA_SIZE = 1024;
-    const int MD5_SIZE = 16;
-    const int MD5_STR_LEN = MD5_SIZE * 2;
-    const int MD5_STRING = MD5_STR_LEN + 1;
+    AFUN_STATIC const size_t READ_DATA_SIZE = 1024;
+    AFUN_STATIC const size_t MD5_SIZE = 16;
+    AFUN_STATIC const size_t MD5_STR_LEN = MD5_SIZE * 2;
+    AFUN_STATIC const size_t MD5_STRING = MD5_STR_LEN + 1;
 
     typedef struct MD5_CTX MD5_CTX;
 

+ 0 - 2
include/tool/str.h

@@ -10,8 +10,6 @@ namespace aFuntool {
     AFUN_TOOL_EXPORT char *charToStr(char ch);
     AFUN_TOOL_EXPORT char *strCopy(const char *str);
     AFUN_TOOL_EXPORT char *strJoin(const char *first, const char *second, bool free_first, bool free_last);
-    AFUN_TOOL_EXPORT wchar_t *convertToWstr(const char *str, bool free_old);
-    AFUN_TOOL_EXPORT char *convertToStr(const wchar_t *wstr, bool free_old);
 }
 
 #endif //AFUN_STR_H

+ 4 - 4
src/core/code.cpp

@@ -173,7 +173,7 @@ RETURN:
         const Code::ByteCode *tmp = code;
         while (tmp != nullptr) {
             std::string code_md5 = tmp->getMD5_v1();
-            MD5Update(md5, (unsigned char *) code_md5.c_str(), code_md5.size());
+            MD5Update(md5, (unsigned char *) code_md5.c_str(), (unsigned int)code_md5.size());
 
             if (tmp->type == ByteCode::code_block && tmp->data.block.son != nullptr) {
                 tmp = tmp->data.block.son;
@@ -510,12 +510,12 @@ if(!(write)){           \
             head[1] = '-';
         if (type == code_block) {
             head[2] = data.block.son == nullptr ? 'n' : 's';
-            head[3] = data.block.block_type;
+            head[3] = (char)data.block.block_type;
         }
 
-        MD5Update(md5, (unsigned char *) head, strlen((char *) head));
+        MD5Update(md5, (unsigned char *) head, (unsigned int)strlen((char *) head));
         if (type == code_element)
-            MD5Update(md5, (unsigned char *) data.element, strlen((char *) data.element));
+            MD5Update(md5, (unsigned char *) data.element, (unsigned int)strlen((char *) data.element));
         else if (type == code_block)
             MD5Update(md5, (unsigned char *) "block", 5);
         else

+ 3 - 3
src/core/inter.cpp

@@ -119,7 +119,7 @@ namespace aFuncore {
                 if (i.rg.match(element) != 1)
                     continue;
                 return true;
-            } catch (aFuntool::RegexException &e) {
+            } catch (aFuntool::RegexException &) {
                 continue;
             }
         }
@@ -144,7 +144,7 @@ namespace aFuncore {
                 literaler = i.literaler;
                 in_protect = i.in_protect;
                 return true;
-            } catch (aFuntool::RegexException &e) {
+            } catch (aFuntool::RegexException &) {
                 continue;
             }
         }
@@ -154,7 +154,7 @@ namespace aFuncore {
     bool Inter::pushLiteral(const std::string &pattern, const std::string &literaler, bool in_protect){
         try {
             literal.push_front({aFuntool::Regex(pattern), pattern, literaler, in_protect});
-        } catch (aFuntool::RegexException &e) {
+        } catch (aFuntool::RegexException &) {
             return false;
         }
         return true;

+ 5 - 3
src/interface/it-reader.cpp

@@ -25,10 +25,12 @@ namespace aFunit {
                 return 0;
             }
 
-            if (ch == (char)0xEF) {
+            if ((unsigned char)ch == (unsigned char)0xEF) {
                 /* 处理BOM编码 */
-                char ch_[2];
-                if (fread(ch_, sizeof(char), 2, file) != 2 || ch_[0] != (char)0xBB || ch_[1] != (char)0xBF) {
+                unsigned char ch_[2];
+                if (fread(ch_, sizeof(unsigned char), 2, file) != 2
+                    || ch_[0] != (unsigned char)0xBB
+                    || ch_[1] != (unsigned char)0xBF) {
                     mode = read_mode_error;
                     return 0;
                 }

+ 1 - 1
src/main-run.cpp

@@ -52,7 +52,7 @@ int mainRun(ff_FFlags *ff) {
             auto env = aFun::Environment(argc - 1, argv + 1);
             auto inter = aFun::Inter(env);
             return runCode(code, env, inter);
-        } catch (aFun::readerFileOpenError &e) {
+        } catch (aFun::readerFileOpenError &) {  // TODO: szh readerFileOpenError包含文件名
             aFun::cout << "Cannot open file: " << argv[0] << "\n";
             return EXIT_FAILURE;
         }

+ 3 - 2
src/main.cpp

@@ -34,12 +34,13 @@ int main(int argc, char **argv_ansi) {
     aFun::aFunAtExit(convertArgsFree, nullptr);
 
     char **argv = argv_s;
+    tty_stdin = _isatty(_fileno(stdin));
 #else
 #include "unistd.h"
 
-    int main(int argc, char **argv) {
-#endif
+int main(int argc, char **argv) {
     tty_stdin = isatty(fileno(stdin));
+#endif
     home_path = aFun::getHomePath();
     if (home_path.empty()) {
         aFun::cerr << "aFunlang init error.";

+ 2 - 2
src/tool/md5.cpp

@@ -196,7 +196,7 @@ namespace aFuntool {
     T getFileMd5(T &path) noexcept(false) {
         FILE *fd;
 
-        unsigned long ret;
+        size_t ret;
         unsigned char data[READ_DATA_SIZE];
         unsigned char md5_value[MD5_SIZE];
 
@@ -207,7 +207,7 @@ namespace aFuntool {
         MD5_CTX *md5 = MD5Init();
         while (true) {
             ret = fread(data, 1, READ_DATA_SIZE, fd);
-            MD5Update(md5, data, ret);
+            MD5Update(md5, data, (unsigned int)ret);
             if (ret < READ_DATA_SIZE)
                 break;
         }

+ 7 - 41
src/tool/string.cpp

@@ -8,14 +8,8 @@
 #include "tool-type.h"
 #include "str.h"
 
-#define EQ_STR(str1, str2) (!strcmp((str1), (str2)))
-#define EQ_WSTR(wid1, wid2) (!wcscmp((wid1), (wid2)))
-
 #define NEW_STR(size) safeCalloc<char>((size) + 1)
-#define NEW_WSTR(size) safeCalloc<wchar_t>((size) + 1)
-
 #define STR_LEN(p) (((p) == NULL) ? 0 : strlen((p)))
-#define WSTR_LEN(p) (((p) == NULL) ? 0 : wcslen((p)))
 
 namespace aFuntool {
     char *charToStr(char ch){
@@ -28,8 +22,9 @@ namespace aFuntool {
 
     char *strCopy(const char *str){
         if (str != nullptr) {
-            char *tmp = NEW_STR(STR_LEN(str));
-            strcpy(tmp, str);
+            auto size = STR_LEN(str);
+            char *tmp = NEW_STR(size);
+            strcpy_s(tmp, size + 1, str);
             return tmp;
         }
         return nullptr;
@@ -48,10 +43,11 @@ namespace aFuntool {
             free_last = false;
         }
 
-        char *new_str = NEW_STR(STR_LEN(first) + STR_LEN(second));
-        strcat(new_str, first);
+        auto size = STR_LEN(first) + STR_LEN(second);
+        char *new_str = NEW_STR(size);
+        strcat_s(new_str, size + 1, first);
         if (second != nullptr)
-            strcat(new_str, second);
+            strcat_s(new_str, size + 1, second);
 
         if (free_first) {
             auto free_ = const_cast<char *>(first);
@@ -64,34 +60,4 @@ namespace aFuntool {
         }
         return new_str;
     }
-
-    /**
-     * char *转换为wchar_t *
-     */
-    wchar_t *convertToWstr(const char *str, bool free_old){
-        size_t len = STR_LEN(str);
-        auto tmp = NEW_WSTR(len);
-        mbstowcs(tmp, str, len);
-
-        if (free_old) {
-            auto free_ = const_cast<char *>(str);
-            safeFree(free_);
-        }
-        return tmp;
-    }
-
-    /**
-     * wchar_t *转换为char *
-     */
-    char *convertToStr(const wchar_t *wstr, bool free_old){
-        size_t len = WSTR_LEN(wstr);
-        auto tmp = NEW_STR(len);
-        wcstombs(tmp, wstr, len);
-
-        if (free_old) {
-            auto free_ = const_cast<wchar_t *>(wstr);
-            safeFree(free_);
-        }
-        return tmp;
-    }
 }

+ 1 - 1
test/CMakeLists.txt

@@ -2,7 +2,7 @@
 include(function)
 
 if (_build_test)
-    message(STATUS "Build test")
+    message(STATUS "Build CTest")
     add_subdirectory(lib)
     add_subdirectory(src)
 endif()