extern
做用1:讓編譯器按C規則編譯函數名和變量名(保持名稱原樣,c++因爲能夠重載因此名稱先後會添加符號)
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef __cplusplus
}
#endif
做用2:在頭文件中 extern int a; 聲明全局變量或函數。其餘編譯單元能夠包含頭文件後定義或使用,在頭文件中最好不要寫成 extern int a = 1;
static
extern和static不能同時修飾一個變量,static聲明瞭全局變量後,該變量同時也被定義了。static修飾的全局變量的做用域只能是自己的編譯單元。
定義static全局變量時,通常把它放在原文件中而不是頭文件。
// test.h
#ifndef TEST1_H
#define TEST1_H
static char str[] = "123456";
void func1();
#endif
// test1.cpp
#include "test1.h"
void func1()
{
str[0] = 'a';
cout << str << endl;
}
// test2.cpp
#include "test.h"
void func2()
{
cout << str << endl;
}
// main.cpp
int main()
{
func1(); // "a23456"
func2(); // "123456" 內存中存在兩份拷貝給兩個編譯單元使用
return 0;
}
uint8_t[] 轉 QString
uint8_t DevName[32] = {0};
QString devNameStr = (char*)DevName;