當前位置:首頁 » 編程軟體 » qt條件編譯

qt條件編譯

發布時間: 2023-02-03 03:50:25

Ⅰ 宏名是什麼

問題一:EXCEL 宏的名稱怎麼設置? 按鈕的本質就是一個宏,所以在製作按鈕之前,我們先來錄制一個宏,把宏都准備好了,就可以製作按鈕了。先打開一個表格如圖所示,選中大標題,接下來我們在菜單欄上執行:開發工具--宏
設置宏名稱為【大標題】,保存位置為【個人宏工作簿】,這樣打開任意的excel就能看到這個宏,如果保存在【當前工作簿】就只能在這個excel文件中看到該宏了。
右鍵單擊已經選中的單元格,在打開的右鍵菜單中,選擇【設置單元格格式】
在打開的單元格格式對話框中,切換到對齊選項下,然後設置水平對齊、垂直對齊、合並單元格。
切換到字體選項下,然後設置字形和字型大小,最後點擊確定按鈕。字形和字型大小的設置要符合大標題醒目的要求。
設置好了大標題的格式以後,我們就點擊開發工具下的【停止錄制】
接下來再錄制一個宏,這回是設置小標題的格式,設置流暢圖我已經貼在下面了,由於和上面的步驟一樣,這里就不講解了。
錄制好宏以後,我們在菜單欄上執行:開發工具--插入,在打開的列表中選擇按鈕。
拖動滑鼠就可以繪制出一個按鈕,同時會打開一個指定宏的對話框,選擇【大標題】這個宏,然後點擊確定按鈕。
將按鈕上的文字設置成為:設置大標題格式。如果你對按鈕上的文字要求更高,要設置他的字體和大小,還可以右鍵單擊按鈕,選擇設置空間格式,對文字進行更具體的設置。
同樣的方法我們再添加一個按鈕2,指定的宏為小標題。
最後我們換一種方式來插入按鈕,前面所講的按鈕都是先建立宏,然後再添加按鈕,現在先插入一個按鈕,再建立宏,如圖所示,先選中一個要設定格式的單元格,然後再菜單欄上執行開發工具--插入,插入一個按鈕。
拖動滑鼠繪制一個按鈕,然後就自動打開這個對話框,設置宏名為【設置列標題】,然後點擊右側的【錄制】
打開錄制宏對話框,設置宏名,然後點擊確定。下面就開始對單元格的格式進行設置,所有的設置都會記錄在宏里。
單元格設置完成了以後,再執行:開發工具--停止錄制
將該按鈕的文字設置為:設置列標題格式,這樣就完成了按鈕的製作。

問題二:宏名是什麼c語言宏是什麼意思 有的時候為了程序的通用性,可以使用#define預處理宏定義命令,它的具體作用,就是方便程序段的定義和修改。
舉個例子吧,如果說你在做一個項目,這個項目的代碼很長,有5000多行,而且基本上Y面的同一個常量N就佔了3000多行,如果說今後你要是想對這個常量N的值進行修改,如果在程序的開始沒有定義一個#define N,那麼改起來不是很麻煩,3000多行啊,那不是要暈過去了~如果你事先定義了一個#define N 『常量值』,那麼當你要修改程序內部的常量值時,只要修改N後面的常量值就等於把程序內部的要修改的相同常量值都改了,那就很方便了

問題三:c語言中宏名是什麼類型? 樓上的基本對。不過:
不是什麼都有類型的,宏根本不是C編譯器看得到的東西。
類型是編譯器決定的,類型是編譯器對變數、函數等分析的結果。
你說關鍵字「sizeof」是什麼類型?
那些東西不是變數、也不是常量、不能引用、哪裡有類型?
一般的,有類型的東西至少要是一個表示時間含義的常量、變數、函數等。
------------------------------------------------------------
#define MAX 10
int a = MAX;這里就MAX替換為10,這時10為整形
char s = MAX;這里就MAX替換為10,這時10自動轉為字元型
在這里:10在任何時候都是整型,因為詞法分析的時候,常量的類型就已經確定。
char s= int (10),但是s是char型,會自動轉換。
C語言里表現不明顯,畢竟是一個弱類型語言。
C++裡面重載後,你看看會調用那個函數!

問題四:取名帶宏是什麼意思 主要字義:宏字的主要含義是表示廣大和廣博。用在人名中主要有宏材大略、宏偉、博大、功德廣博等義。「宏」字是一個水木五行皆有的姓名用字。

問題五:類聲明時,類名前面加宏名是什麼意思 類聲明時,類名前面加宏名是什麼意思
#if !defined(QWEBKIT_EXPORT) 如果沒定義QWEBKIT_EXPORT
# if defined(QT_SHARED) 如果定義了QT_SHARED
# define Q_DECL_EXPORT Q_DECL_EXPORT 將Q_DECL_EXPORT 定義成 Q_DECL_EXPORT
# else
# define QWEBKIT_EXPORT 將QWEBKIT_EXPORT 定義為空
# endif
#endif
而Q_DECL_EXPORT 也是一個宏,它結果有幾個,如__declspec(dllexport)
__attribute__((visibility(default))) 等

問題六:Excel 宏的名稱定義有什麼要求 不能是數字開頭,不能有特殊符號。

問題七:真宏名字是什麼意思 ???????

問題八:取名字宏字後面加什麼字好聽 宏斌
宏磊
宏陶
最好說下姓什麼?得搭配姓氏才知道加什麼好聽

問題九:c語言中的「宏」是指什麼? 簡單來說:宏定義又稱為宏代換、宏替換,簡稱「宏」。是C提供的三種預處理功能的其中一種。
復雜的請看下面,講的很全。下面的帶參宏定義,多行宏定義,在linux內核源碼中很多。另外sizeof也是一個宏定義。
宏定義
宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯
1. 不帶參數的宏定義:
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式: #define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握宏概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例: #define PI 3.1415926 把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義可以嵌套
(8)字元串 中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
2. 帶參數的宏定義:
除了一般的字元串替換,還要做參數代換
格式: #define 宏名(參數表) 字元串
例如:#define S(a,b) a*b
area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;
類似於函數調用,有一個啞實結合的過程:
(1)實參如果是表達式容易出問題
#define S(r) r*r
area=S(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b;
正確的宏定義是#define S(r) ((r)*(r))
(2)宏名和參數的括弧間不能有空格
(3)宏替換只作替換,不做計算,不做表達式求解
(4)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存
(5)宏的啞實結合不存在類型,也沒有類型轉換。
(6)函數只有一個返回值,利用宏則可以設法得到多個值
(7)宏展開使源程序變長,函數調用不會
(8)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)
3. 宏定義其他冷門、重點知識
#define用法
1、 用無參宏定義一個簡單的常量
#define LEN 12
這個是最常見的用法,但也會出錯。
比如下面幾個知識點你會嗎?可以看下:
(1) #define NAME zhangyuncong
程序中有NAME則,它會不會被替換呢?
......>>

問題十:宏字頭取什麼名字 宏偉公司,這個名字我覺得特別特別特別特別特別特別的好,我覺得取這個名字以後,公司是你們公司的發展也會越來越好。

Ⅱ 我在windows下用QT寫了個程序,把這個源代碼直接在linux下編譯可以嗎

可以,只要你不調用Windows的API函數就可以。 還有你在不同的系統可以使用條件編譯那樣就不存在任何問題了

Ⅲ #error "This file was generated using the moc from 4.6.2. It"

#error
人為的產生一個error並中斷編譯
一般用作環境判斷 放在條件編譯中
當若干條件被滿足或者不滿足時 停止程序編譯 並列印錯誤輸出

類似的還有#warning 產生一個警告信息 但不中斷編譯
對於#error/#waring的輸出 不同編譯器有不同做法 有的輸出其後的字元串 有的輸出所有(包括#xxx)
對於你這個代碼 如果Q_MOC_OUTPUT_REVISION沒有被定義
那麼編譯的時候會輸出類似
<filename> <line number> <col_number> error: #error "The header file 'processimage.h' doesn't include <QObject>."
錯誤
如果Q_MOC_OUTPUT_REVISION 值不是59 會輸出
<filename> <line number> <col_number> error: #error "This file was generated using the moc from 4.6.2. It"
<filename> <line number> <col_number> error: #error "cannot be used with the include files from this version of Qt."
<filename> <line number> <col_number> #error "(The moc has changed too much.)"

是否有問題? 有問題請追問 沒問題請採納

Ⅳ 如何在QT中讀取串口數據

一、文件下載

文件下載地址:

也可以下載我上傳到網盤上的:

二、文件內容介紹

1.下載到的文件為qextserialport-1.2win-alpha ,解壓並打開後其內容如下。

(點擊圖片可以查看清晰大圖)

下面分別介紹:

(1)doc文件夾中的文件內容是QextSerialPort類和QextBaseType的簡單的說明,我們可以使用記事本程序將它們打開。

(2)examples文件夾中是幾個例子程序,可以看一下它的源碼,不過想運行它們好像會出很多問題啊。

(3)html文件夾中是QextSerialPort類的使用文檔。

(4)然後就是剩下的幾個文件了。其中qextserialenumerator.cpp及qextserialenumerator.h文件中定
義的QextSerialEnumerator類是用來獲取平台上可用的串口信息的。不過,這個類好像並不怎麼好用,而且它不是我們關注的重點,所以下面
就不再介紹它了。

(5)qextserialbase.cpp和qextserialbase.h文件定義了一個QextSerialBase
類,win_qextserialport.cpp和win_qextserialport.h文件定義了一個Win_QextSerialPort
類,posix_qextserialport.cpp和posix_qextserialport.h文件定義了一個
Posix_QextSerialPort類,qextserialport.cpp和qextserialport.h文件定義了一個
QextSerialPort類。這個QextSerialPort類就是我們上面所說的那個,它是所有這些類的子類,是最高的抽象,它屏蔽了平台特徵,
使得在任何平台上都可以使用它。

2.幾個類的簡單介紹。

下面是這幾個類的關系圖。

可以看到它們都繼承自QIODevice類,所以該類的一些函數我們也可以直接來使用。圖中還有一個QextBaseType類,其實它只是一個標
識,沒有具體的內容,它用來表示Win_QextSerialPort或Posix_QextSerialPort
中的一個類,因為在QextSerialPort類中使用了條件編譯,所以QextSerialPort類既可以繼承自
Win_QextSerialPort類,也可以繼承自Posix_QextSerialPort類,所以使用了QextBaseType來表示。這一點
我們可以在qextserialport.h文件中看到。再說QextSerialPort類,其實它只是為了方便程序的跨平台編譯,使用它可以在不同的
平台上,根據不同的條件編譯繼承不同的類。所以它只是一個抽象,提供了幾個構造函數而已,並沒有具體的內容。在qextserialport.h文件中的
條件編譯內容如下:

#ifdef_TTY_POSIX_

#include「posix_qextserialport.h」

#define QextBaseTypePosix_QextSerialPort

#else

#include「win_qextserialport.h」

#define QextBaseTypeWin_QextSerialPort

#endif

所以,其實我們沒有必要使用這個類,直接使用Win_QextSerialPort或Posix_QextSerialPort就可以了。當然如果
你想使用這個類,實現同樣的源程序可以直接在Windows和Linux下編譯運行,那麼一定要注意在Linux下這里需要添加
#define _TTY_POSIX_ 。而我們這里為了使得程序更明了,所以沒有使用該類,下面也就不再介紹它了。

QextSerialBase類繼承自QIODevice類,它提供了操作串口所必需的一些變數和函數等,而
Win_QextSerialPort和Posix_QextSerialPort均繼承自QextSerialBase
類,Win_QextSerialPort類添加了Windows平台下操作串口的一些功能,Posix_QextSerialPort類添加了
Linux平台下操作串口的一些功能。所以說,在Windows下我們使用Win_QextSerialPort類,在Linux下我們使用
Posix_QextSerialPort類。

3.在QextSerialBase類中還涉及到了一個枚舉變數QueryMode。

它有兩個值Polling和EventDriven
。QueryMode指的是讀取串口的方式,下面我們稱為查詢模式,我們將Polling稱為查詢方式Polling,將EventDriven稱為事件驅動方式。

事件驅動方式EventDriven就是使用事件處理串口的讀取,一旦有數據到來,就會發出readyRead()信號,我們可以關聯該信號來讀取串口的數據。在事件驅動的方式下,串口的讀寫是非同步的,調用讀寫函數會立即返回,它們不會凍結調用線程。

而查詢方式Polling則不同,讀寫函數是同步執行的,信號不能工作在這種模式下,而且有些功能也無法實現。但是這種模式下的開銷較小。我們需要自己建立定時器來讀取串口的數據。

在Windows下支持以上兩種模式,而在Linux下只支持Polling模式。

三、小結。

這里講了這么多,最後要說的只是,我們在Qt中使用這個類編寫串口程序,根據平台的不同只需要分別使用四個文件。

在Windows下是:

qextserialbase.cpp和qextserialbase.h
以及win_qextserialport.cpp和win_qextserialport.h

在Linux下是:

qextserialbase.cpp和qextserialbase.h
以及posix_qextserialport.cpp和posix_qextserialport.h

而在Windows下我們可以使用事件驅動EventDriven方式,也可以使用查詢Polling方式,但是在Linux下我們只能使用查詢Polling方式。

第二部分 在Windows下編寫串口通信程序

我們的環境是Windowsxp,Qt4.6.3及Qt Creator2.0。

第一,下面我們首先使用事件驅動來實現串口通信。

1.新建工程。

我們在QtCreator中新建Qt Gui工程,命名為myCom,Base Class選擇QWidget。

2.添加文件。

我們將那四個文件添加到工程文件夾中。如下圖。

然後我們將這四個文件添加到工程中,在Qt
Creator的工程列表中的工程文件夾上點擊滑鼠右鍵,在彈出的菜單中選擇「AddExisting Files」菜單。如下圖。

我們在彈出的對話框中選中四個文件,按下「打開」按鈕即可,如下圖。

最終工程文件列表如下圖。

3.更改界面。

我們將界面設計如下。

其中的TextBrowser 部件用來顯示接收到的數據,Line Edit部件用來輸入要發送的數據,Push
Button按鈕用來發送數據。我們保持各部件的屬性為默認值即可。

4. 我們在widget.h文件中進行對象及函數聲明。

添加頭文件包含:#include「win_qextserialport.h」

然後在private中聲明對象:Win_QextSerialPort *myCom;

聲明私有槽函數:

private slots:

voidon_pushButton_clicked(); //」發送數據」按鈕槽函數

void readMyCom(); //讀取串口

5.在widget.cpp文件中進行更改。

在構造函數中添加代碼,完成後,構造函數內容如下:

Widget::Widget(QWidget*parent) :

QWidget(parent),

ui(newUi::Widget)

{

ui->setupUi(this);

myCom=
new Win_QextSerialPort(「COM1″,QextSerialBase::EventDriven);

//定義串口對象,指定串口名和查詢模式,這里使用事件驅動EventDriven

myCom->open(QIODevice::ReadWrite);

//以讀寫方式打開串口

myCom->setBaudRate(BAUD9600);

//波特率設置,我們設置為9600

myCom->setDataBits(DATA_8);

//數據位設置,我們設置為8位數據位

myCom->setParity(PAR_NONE);

//奇偶校驗設置,我們設置為無校驗

myCom->setStopBits(STOP_1);

//停止位設置,我們設置為1位停止位

myCom->setFlowControl(FLOW_OFF);

//數據流控制設置,我們設置為無數據流控制

myCom->setTimeout(500);

//延時設置,我們設置為延時500ms,這個在Windows下好像不起作用

connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));

//信號和槽函數關聯,當串口緩沖區有數據時,進行讀串口操作

}

實現槽函數:

void Widget::readMyCom()//讀取串口數據並顯示出來

{

QByteArray
temp = myCom->readAll();

//讀取串口緩沖區的所有數據給臨時變數temp

ui->textBrowser->insertPlainText(temp);

//將串口的數據顯示在窗口的文本瀏覽器中

}

voidWidget::on_pushButton_clicked() //發送數據

{

myCom->write(ui->lineEdit->text().toAscii());

//以ASCII碼形式將數據寫入串口

}

6.此時,我們運行程序,效果如下。

可以看到,已經成功完成通信了。

(註:我們這里下位機使用的是單片機,它使用串口與計算機的COM1相連。單片機上運行的程序的功能是,接收到一個字元便向上位機發送一個字元串然後發送接收到的字元。)

兩個重要問題的講解:

一、關於數據接收。

我們想在程序中對接收的數據進行控制,但是readyRead()信號是一旦有數據到來就發射的,不過我們可以使用bytesAvailable()函數來檢查已經獲得的位元組數,從而對數據接收進行控制。

(1)我們在widget.cpp中添加頭文件包含:#include

然後在讀串口函數中添加一行代碼,如下:

void Widget::readMyCom() //讀取串口數據並顯示出來

{

qDebug()
<< 「read:
「<<myCom->bytesAvailable()<<」bytes」;

//我們輸出每次獲得的位元組數

QByteArray
temp = myCom->readAll();

ui->textBrowser->insertPlainText(temp);

}

運行程序,效果如下:

可以看到,我們獲取的數據並不是一次獲得的。

(2)利用上面的結論,我們可以讓串口緩沖區擁有了一定的數據後再讀取。

void Widget::readMyCom()

{

if(myCom->bytesAvailable()>=8 )

//如果可用數據大於或等於8位元組再讀取

{

qDebug()
<< 「read:
「<<myCom->bytesAvailable()<<」bytes」;

QByteArray
temp = myCom->readAll();

ui->textBrowser->insertPlainText(temp);

}

}

運行程序,效果如下:

我們發送了兩次數據,可以看到,這樣實現了每8個位元組讀取一次,而最後剩餘的不夠8個位元組的數據將會和後面的數據一起讀出。

然後我們將8改為3,發送一次數據,效果如下:

改為7,發送兩次數據,效果如下:

改為11,發送兩次數據,效果如下:

改為17,發送三次數據,效果如下:

重要結論:我們發送一次數據,應該獲得37位元組的數據,然後我們對比上面的結果,發現了什麼?是的,其實串口每次讀取8位元組的數據放到緩沖區,只有
數據總數小於8位元組時,才會讀取小於8位元組的數據。為了再次驗證我們的結論,我們可以將上面程序中的「>=」改為「==」,那麼只有8的倍數才能讀
取數據(當然這里37也可以),你可以測試一下。

關於接收數據方面,可以根據你自己的需要再去進行研究和改進,這里只是拋磚引玉。

二、關於發送數據。

我們也可以使用函數獲取要發送的數據的大小,這里有個bytesToWrite()可以獲取要發送的位元組數。例如將發送數據更改如下:

voidWidget::on_pushButton_clicked() //發送數據

{

myCom->write(ui->lineEdit->text().toAscii());

qDebug()
<< 「write:
「<<myCom->bytesToWrite()<<」bytes」;

//輸出要發送的位元組數

}

運行後效果如下:

當然,對於要發送的數據的大小我們不是很關心,而且它還有很多方法可以實現,這個還有個bytesWritten()信號函數來獲取已經發送的數據的大小,不過好像它不是很好用。這里將它們提出來,只是供大家參考而已。

第二,使用查詢方式Polling來實現串口通信。

這里再次說明,Polling方式是不能使用readyRead()信號的,所以我們需要自己設置定時器,來不斷地讀取緩沖區的數據。

1.我們在widget.h中聲明一個定時器對象。

添加頭文件包含:#include

添加private變數:QTimer *readTimer;

2.我們在widget.cpp文件中的構造函數中更改。

(1)將串口定義更改為:

myCom =
newWin_QextSerialPort(「COM1″,QextSerialBase::Polling);

//定義串口對象,指定串口名和查詢模式,這里使用Polling

(2)定義定時器,並將以前的關聯更改為定時器的關聯。

readTimer = newQTimer(this);

readTimer->start(100);

//設置延時為100ms

connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));

//信號和槽函數關聯,延時一段時間,進行讀串口操作

3.此時運行程序,便可以正常收發數據了。

重點:關於延時問題。

上面的程序中可以進行數據的接收了,但是好像中間的延時有點長,要等一會兒才能收到數據,而且即便我們將定時器改為10ms
也不行。問題在哪裡呢?其實真正控制串口讀寫時間的不是我們的定時器,而是延時timeout。我們在構造函數中設置了延時:

myCom->setTimeout(500);

//延時設置,我們設置為延時500ms

我們前面說延時並不起作用,那是因為是在事件驅動的情況下,一旦有數據到來就會觸發readyRead()信號,所以延時不起作用。但是現在,真正
控制串口讀寫數據間隔的就是這個函數。這里值得注意,我們現在所說的串口讀寫是指底層的串口讀寫,從上面的程序中我們也可以看到,我們每隔100ms去讀
串口,確切地說,應該是去讀串口緩沖區。而timeout才是正真的讀取串口數據,將讀到的數據放入串口緩沖區。所以如果timeout時間很長,即便我
們的定時器時間再短,也是讀不到數據的。所以我們這里需要將timeout設置為較小的值,比如10。我們更改代碼:

myCom->setTimeout(10);

這樣再運行程序,我們就可以很快地獲得數據了。

關於數據接收:事件驅動那裡的結論依然有用,不過這里更多的是靠讀取的時間間隔來控制。

關於發送數據:這時bytesToWrite()函數就不再那麼好用了。

第三部分 在Linux下編寫串口通信程序

我這里的環境是Ubuntu10.04,Qt 4.6.3和Qt Creator2.0
。上面已經提到,在Linux下只能使用Polling的方式讀取串口數據,所以我們將上面Windows下的應用Polling的程序在Linux下重
新編譯。我們使用Qt Creator打開該工程,然後進行下面的操作。

1.文件替換。

將工程中的win_qextserialport.cpp和win_qextserialport.h文件替換成posix_qextserialport.cpp和posix_qextserialport.h文件。

(1)我們先刪除工程中的win_qextserialport.cpp和win_qextserialport.h文件。

在工程列表中用滑鼠右擊win_qextserialport.h,然後選擇「Remove File」選項。如下圖。

在彈出的對話框中我們選中「Deletefile permanently」選項,確保刪除了工程文件夾中的文件。如下圖。

然後我們使用同樣的方法刪除win_qextserialport.cpp文件。

(2)我們按照Windows下添加文件的方法,向工程中添加posix_qextserialport.cpp和posix_qextserialport.h文件。最終工程文件列表如下。

2.設置編碼。

(這是因為兩個系統使用的默認編碼不同造成的,如果你那裡沒有該問題,可以跳過這一步)

現在我們打開widget.cpp文件,發現中文出現亂碼,而且無法編輯。在編輯器最上面有一個黃色提示條和一個「Select
Encoding」按鈕,我們點擊該按鈕。如下圖。

在彈出的對話框中我們選擇「GB2312」。按下「Reload with Encoding」按鈕,中文就可以正常顯示了。

3.更改程序。

在widget.h文件中:

將以前的#include「win_qextserialport.h」更改為#include「posix_qextserialport.h」

將以前的Win_QextSerialPort*myCom;更改為Posix_QextSerialPort*myCom;

在widget.cpp文件中:

將以前的myCom= new
Win_QextSerialPort(「COM1″,QextSerialBase::Polling);

更改為:myCom= new
Posix_QextSerialPort(「/dev/ttyS0″,QextSerialBase::Polling);

(這里一定要注意串口名稱的寫法。)

4.下面我們運行程序。

這時可能會出現以下提示。

錯誤是說一個函數的調用出現了問題。我們點擊該錯誤,定位到出錯的位置,然後將那個函數中的第一個參數刪除即可。如下圖。

5.再次運行程序,這時已經可以正常運行了。

6.小結

可以看到將Windows下的串口程序在Linux下重新編譯是很簡單的,我們只需要替換那兩個文件,然後更改一下頭文件包含,對象定義和串口名即可。

Ⅳ Linux C編程從初學到精通的目 錄

第1部分 基礎篇
第1章 Linux系統概述 1
1.1 什麼是Linux 2
1.2 Linux系統特點及主要功能 2
1.2.1 Linux系統特點 3
1.2.2 Linux系統的主要功能 3
1.3 Linux的內核版本和發行版本 5
1.4 系統的安裝 6
1.4.1 系統安裝前的准備工作 6
1.4.2 從光碟安裝Linux 6
1.4.3 從硬碟安裝Linux 22
1.4.4 在虛擬機下安裝Linux 22
1.5 Shell的使用 27
1.5.1 Shell簡介 27
1.5.2 常見Shell的種類 28
1.5.3 Shell的簡單使用 29
1.5.4 通配符 30
1.5.5 引號 31
1.5.6 注釋符 33
1.6 Linux常用命令 33
1.6.1 與目錄相關的命令 33
1.6.2 與文件相關的命令 34
1.6.3 與網路服務相關的命令 35
1.7 本章小結 35
實戰演練 36
第2章 C語言編程基礎 37
2.1 C語言的歷史背景 38
2.2 C語言的特點 38
2.3 C語言的基本數據類型 39
2.3.1 整型 39
2.3.2 實型 40
2.3.3 字元型 41
2.4 運算符與表達式 43
2.4.1 算術運算符與算術表達式 43
2.4.2 賦值運算符與賦值表達式 44
2.4.3 逗號運算符與逗號表達式 45
2.5 C程序的3種基本結構 46
2.5.1 順序結構 46
2.5.2 選擇結構 47
2.5.3 循環結構 51
2.6 C語言中的數據輸入與輸出 54
2.6.1 字元輸出函數putchar 54
2.6.2 字元輸入函數getchar 54
2.6.3 格式輸出函數printf 54
2.6.4 格式輸入函數scanf 56
2.7 函數 57
2.7.1 函數的定義 57
2.7.2 函數的調用 58
2.7.3 變數的存儲類別 59
2.8 數組 62
2.8.1 一維數組的定義和使用 63
2.8.2 二維數組的定義和使用 64
2.8.3 字元數組和字元串 65
2.8.4 常用字元串處理函數 66
2.9 指針 69
2.9.1 地址和指針 69
2.9.2 指針的定義和使用 70
2.9.3 數組與指針 71
2.9.4 字元串與指針 72
2.9.5 指向函數的指針 72
2.10 結構體和共用體 73
2.10.1 定義和引用結構體 73
2.10.2 結構體數組 74
2.10.3 指向結構體的指針 74
2.10.4 共用體 75
2.10.5 使用typedef定義類型 77
2.11 鏈表 77
2.11.1 鏈表概述 77
2.11.2 建立動態單向鏈表 78
2.11.3 單向鏈表的輸出 80
2.11.4 對單向鏈表的刪除操作 80
2.11.5 對單向鏈表的插入操作 81
2.11.6 循環鏈表 82
2.11.7 雙向鏈表 82
2.12 位運算符和位運算 83
2.12.1 「按位與」運算符(&) 84
2.12.2 「按位或」運算符(|) 84
2.12.3 「取反」運算符(~) 84
2.12.4 「異或」運算符(^) 84
2.12.5 移位運算符(<<和>>) 85
2.12.6 位域 85
2.13 C語言預處理命令 86
2.13.1 宏定義 86
2.13.2 文件包含 87
2.13.3 條件編譯 88
2.13.4 #error等其他常用預處理命令 89
2.14 本章小結 89
實戰演練 89
第3章 vi與Emacs編輯器 91
3.1 vi的使用 92
3.1.1 啟動與退出vi 92
3.1.2 vi的命令行模式 93
3.1.3 vi的插入模式 96
3.1.4 vi的底行模式 96
3.2 vi使用實例 97
3.3 Emacs的使用 100
3.3.1 啟動與退出Emacs 101
3.3.2 Emacs下的基本操作 102
3.4 Emacs使用實例 107
3.5 本章小結 109
實戰演練 109
第4章 gcc編譯器與gdb調試器 110
4.1 gcc編譯器簡介 111
4.2 如何使用gcc 112
4.2.1 gcc編譯初步 112
4.2.2 警告提示功能 114
4.2.3 優化gcc 116
4.2.4 連接庫 119
4.2.5 同時編譯多個源程序 120
4.2.6 管道 120
4.2.7 調試選項 121
4.3 gdb調試器 122
4.3.1 gdb簡介 122
4.3.2 gdb常用命令 123
4.3.3 gdb調試初步 124
4.4 gdb的使用詳解 126
4.4.1 調用gdb 127
4.4.2 使用斷點 127
4.4.3 查看運行時數據 129
4.4.4 查看源程序 133
4.4.5 改變程序的執行 135
4.5 xxgdb調試器簡介 138
4.6 本章小結 139
實戰演練 139
第5章 make的使用和Makefile的編寫 141
5.1 什麼是make 142
5.1.1 make機制概述 142
5.1.2 make與Makefile的關系 144
5.2 Makefile的書寫規則 147
5.2.1 Makefile的基本語法規則 148
5.2.2 在規則中使用通配符 149
5.2.3 偽目標 149
5.2.4 多目標 151
5.2.5 自動生成依賴性 151
5.3 Makefile的命令 152
5.4 變數 154
5.4.1 變數的基礎 154
5.4.2 賦值變數 154
5.4.3 define關鍵字 156
5.4.4 override指示符 156
5.4.5 目標變數和模式變數 157
5.5 常用函數調用 158
5.5.1 字元串處理函數 158
5.5.2 文件名操作函數 162
5.5.3 循環函數 164
5.5.4 條件判斷函數 165
5.5.5 其他常用函數 166
5.6 隱式規則 168
5.6.1 隱式規則舉例 168
5.6.2 隱式規則中的變數 169
5.6.3 使用模式規則 170
5.7 本章小結 173
實戰演練 173
第2部分 提高篇
第6章 文件I/O操作 174
6.1 Linux文件系統簡介 175
6.1.1 Linux的文件系統結構 175
6.1.2 文件類型 176
6.1.3 文件訪問許可權 179
6.2 基於文件描述符的I/O操作 179
6.2.1 文件描述符 180
6.2.2 標准輸入、標准輸出和標准出錯 180
6.2.3 文件重定向 181
6.2.4 文件的創建、打開與關閉 182
6.2.5 文件的定位 186
6.2.6 文件的讀寫 188
6.3 文件的屬性操作 192
6.3.1 改變文件訪問許可權 192
6.3.2 改變文件所有者 193
6.3.3 重命名 193
6.3.4 修改文件長度 194
6.4 文件的其他操作 195
6.4.1 stat、fstat和lstat函數 195
6.4.2 p和p2函數 196
6.4.3 fcntl函數 197
6.4.4 sync和fsync函數 197
6.5 特殊文件的操作 198
6.5.1 目錄文件的操作 198
6.5.2 鏈接文件的操作 201
6.5.3 管道文件的操作 204
6.5.4 設備文件 204
6.6 本章小結 205
實戰演練 205
第7章 基於流的I/O操作 206
7.1 流與緩存 207
7.1.1 流和FILE對象 207
7.1.2 標准輸入、標准輸出和標准出錯 207
7.1.3 緩存 207
7.1.4 對緩存的操作 210
7.2 流的打開與關閉 212
7.2.1 流的打開 212
7.2.2 流的關閉 214
7.2.3 流關閉前的工作 216
7.3 流的讀寫 216
7.3.1 基於字元的I/O 217
7.3.2 基於行的I/O 220
7.3.3 直接I/O 222
7.3.4 格式化I/O 224
7.4 本章小結 226
實戰演練 227
第8章 進程式控制制 228
8.1 進程的基本概念 229
8.1.1 Linux進程簡介 229
8.1.2 進程與作業 230
8.1.3 進程標識 230
8.2 進程式控制制的相關函數 232
8.2.1 fork和vfork函數 232
8.2.2 exec函數 237
8.2.3 exit和_exit函數 242
8.2.4 wait和waitpid函數 245
8.2.5 進程的一生 251
8.2.6 用戶ID和組ID 251
8.2.7 system函數 253
8.3 多個進程間的關系 255
8.3.1 進程組 255
8.3.2 會話期 256
8.3.3 控制終端 257
8.4 本章小結 259
實戰演練 259
第9章 信號 260
9.1 Linux信號簡介 261
9.1.1 信號的基本概念 261
9.1.2 信號處理機制 265
9.2 信號操作的相關函數 267
9.2.1 信號的處理 267
9.2.2 信號的發送 274
9.2.3 信號的阻塞 282
9.2.4 計時器與信號 284
9.3 本章小結 286
實戰演練 287
第10章 進程間通信 288
10.1 進程間通信簡介 289
10.2 管道 290
10.2.1 管道的概念 290
10.2.2 管道的創建與關閉 291
10.2.3 管道的讀寫 292
10.3 命名管道 297
10.3.1 命名管道的概念 297
10.3.2 命名管道的創建 297
10.3.3 命名管道的讀寫 299
10.4 消息隊列 303
10.4.1 消息隊列的概念 303
10.4.2 消息隊列的創建與打開 305
10.4.3 消息隊列的讀寫 306
10.4.4 獲得或設置消息隊列屬性 308
10.5 共享內存 312
10.5.1 共享內存的概念 312
10.5.2 共享內存的相關操作 313
10.6 信號量 318
10.6.1 信號量的概念 319
10.6.2 信號量集的相關操作 320
10.7 本章小結 325
實戰演練 326
第11章 網路編程 327
11.1 網路編程的基礎知識 328
11.1.1 計算機網路體系結構 328
11.1.2 傳輸控制協議TCP 333
11.1.3 用戶數據報協議UDP 335
11.1.4 客戶機/伺服器模式 336
11.2 套介面編程基礎 336
11.2.1 什麼是套介面 337
11.2.2 埠號的概念 338
11.2.3 套介面的數據結構 338
11.2.4 基本函數 340
11.3 TCP套介面編程 343
11.3.1 TCP套介面通信工作流程 343
11.3.2 TCP套介面Client/Server程序實例 356
11.4 UDP套介面編程 360
11.4.1 UDP套介面通信工作流程 360
11.4.2 UDP套介面Client/Server程序實例 362
11.5 原始套介面編程 365
11.5.1 原始套介面的創建 365
11.5.2 原始套介面程序實例 365
11.6 本章小結 376
實戰演練 376
第12章 Linux圖形界面編程 377
12.1 Linux下的圖形界面編程簡介 378
12.1.1 Qt簡介 378
12.1.2 GTK+簡介 378
12.2 界面基本元件 381
12.2.1 一個簡單的例子 381
12.2.2 窗口 383
12.2.3 標簽 385
12.2.4 按鈕 386
12.2.5 文本框 387
12.3 界面布局元件 389
12.3.1 表格 390
12.3.2 框 393
12.3.3 窗格 395
12.4 其他常用元件 398
12.4.1 進度條、微調按鈕、組合框 398
12.4.2 單選按鈕、復選按鈕 402
12.4.3 下拉菜單 404
12.5 信號與回調函數 406
12.6 本章小結 409
實戰演練 409
第3部分 實戰篇
第13章 設計Linux下的計算器 411
13.1 軟體功能分析 412
13.2 程序模塊的劃分 413
13.3 軟體的具體實現 415
13.3.1 頭文件 415
13.3.2 十六進制界面顯示函數 416
13.3.3 十進制界面顯示函數 417
13.3.4 八進制界面顯示函數 418
13.3.5 二進制界面顯示函數 419
13.3.6 進制間轉換函數 420
13.3.7 信號處理模塊 423
13.3.8 主函數 432
13.4 軟體使用效果演示 438
13.5 本章小結 439
第14章 Linux平台下聊天軟體的設計 440
14.1 軟體功能概述 441
14.1.1 伺服器端功能需求 441
14.1.2 客戶端功能需求 442
14.1.3 錯誤處理需求 442
14.2 Glade集成開發工具簡介 443
14.3 軟體功能模塊劃分 444
14.3.1 伺服器功能模塊劃分 444
14.3.2 客戶端功能模塊劃分 445
14.3.3 消息標識的定義 445
14.3.4 消息結構體的設計 446
14.4 伺服器程序的具體實現 447
14.4.1 伺服器消息處理流程 447
14.4.2 伺服器主要函數和變數 448
14.4.3 伺服器消息處理模塊的設計與實現 449
14.4.4 伺服器數據存儲的方法 450
14.4.5 用戶注冊流程 450
14.5 客戶端程序的具體實現 451
14.5.1 客戶端操作流程 451
14.5.2 客戶端發送和接收消息流程 451
14.5.3 客戶端主要函數和變數 452
14.5.4 客戶端功能模塊的設計與實現 453
14.6 聊天軟體使用效果演示 455
14.7 本章小結 459
第15章 Linux遠程管理工具的設計 460
15.1 軟體功能概述 461
15.1.1 Webmin簡介 461
15.1.2 軟體總體設計 461
15.2 伺服器端程序設計 463
15.2.1 伺服器端工作流程 463
15.2.2 系統用戶管理操作 464
15.2.3 系統用戶組的管理操作 466
15.2.4 系統服務啟動管理 468
15.2.5 DNS管理操作 469
15.2.6 Apache服務管理操作 471
15.2.7 FTP服務管理操作 474
15.3 客戶端程序 475
15.3.1 連接界面 475
15.3.2 主界面 477
15.4 本章小結 479
第16章 Linux下簡易防火牆軟體的設計 480
16.1 Netfilter基礎 481
16.1.1 什麼是Netfilter 481
16.1.2 Netfilter的HOOK機制 482
16.1.3 HOOK的調用 485
16.1.4 HOOK的實現 486
16.1.5 IPTables簡介 488
16.1.6 Netfilter可以實現的控制功能 489
16.2 軟體設計概述 491
16.2.1 軟體整體框架 491
16.2.2 管理端的設計 492
16.2.3 控制端的設計 493
16.3 用Netfilter設計控制端功能模塊 495
16.3.1 ICMP管理控制模塊 495
16.3.2 FTP管理控制模塊 497
16.3.3 HTTP管理控制模塊 499
16.3.4 模塊的編譯、載入與卸載 499
16.4 軟體功能測試 501
16.5 本章小結 503
第17章 基於Linux的嵌入式家庭網關遠程交互操作平台的設計 504
17.1 嵌入式技術簡介 505
17.1.1 嵌入式系統的概念 505
17.1.2 嵌入式操作系統 506
17.1.3 嵌入式處理器 507
17.2 家庭網關的概念及其網路體系結構 509
17.2.1 智能家庭網路的概念 509
17.2.2 家庭網關的遠程交互操作技術簡介 510
17.2.3 嵌入式家庭網關的網路體系結構 510
17.3 嵌入式家庭網關的開發平台 511
17.3.1 S3C2410微處理器簡介 511
17.3.2 交叉編譯環境的建立 513
17.4 遠程交互平台的設計 515
17.4.1 應用軟體的開發模式 515
17.4.2 嵌入式Web伺服器 516
17.4.3 通用網關介面CGI 519
17.5 Linux下軟體模塊的具體實現 520
17.5.1 登錄驗證模塊 521
17.5.2 串口通信模塊 521
17.5.3 中央空調控制模塊 522
17.5.4 智能水表數據採集模塊 528
17.5.5 試驗結果 528
17.6 本章小結 529

Ⅵ CMAKE_RC_COMPILER 是什麼東西

cmake vs qmakeqmake 是為 Qt 量身打造的,使用起來非常方便cmake 使用上不如qmake簡單直接,但復雜換來的是強大的功能內置的 out-of source 構建。(目前QtCreator為qmake也默認啟用了該功能,稱:shadow build)為各種平台和場景提供條件編譯可處理多個可執行文件情況,和很好配合 QtTest 工作如何選擇?Using CMake to Build Qt Projects 一文中說:對簡單的Qt工程,採用 qmake對復雜度超過 qmake 處理能力的,採用 cmake盡管如此,如果簡單Qt的工程都不知道怎麼用 cmake 構建,復雜的工程,就更不知道如何使用 cmake 了。還是從簡單的學起吧簡單的 Qt 程序#include <QtCore/QCoreApplication>#include <QtCore/QDebug>int main(int argc, char** argv){ QCoreApplication app(argc, argv); qDebug()<<"hello qt!"; app.exec();}如果不使用構建工具,直接調用編譯器來編譯的話,只需要類似這樣的一條命令:g++ main.cpp -Ie:\Qt\4.7.0\include -o main -Le:\Qt\4.7.0\lib -lQtCore4指定頭文件目錄,以及需要鏈接的庫qmakeqmake 需要一個 .pro 文件:CONFIG += qtQT -= guiSOURCES += main.cpp因為我們需要 Qt的庫和頭文件,所以需要 CONFIG += qt 。這是默認項,可直接去掉該行啟用qt後,可以通過 QT -= gui 來進一步細調我們需要的模塊默認是 core gui。我們不需要gui模塊,故去掉。cmakecmake 需要一個 CMakeLists.txt 文件:PROJECT(example)FIND_PACKAGE(Qt4 REQUIRED)SET(QT_DONT_USE_QTGUI TRUE)INCLUDE(${QT_USE_FILE})ADD_EXECUTABLE(example main.cpp)TARGET_LINK_LIBRARIES(example ${QT_LIBRARIES})FIND_PACKAGE 來啟用 Qt4默認使用了core 和 gui,故手動禁用 QTGUI這兩行可以直接使用 FIND_PACKAGE(Qt4 COMPONENTS QtCore REQUIRED),未指定的模塊將被禁用包含一個CMake為Qt提供的配置文件,${QT_USE_FILE}變數是一個文件名添加可執行程序目標鏈接到 Qt 的庫復雜一點考慮一個常規Qt程序:main.cppmainwindows.uimainwindows.hmainwindows.cpp如果手動編譯的話:mainwindow.ui 需要使用 uic 預處理uic mainwindow.ui -o ui_mainwindow.hmainwindow.h 需要 moc 預處理moc mainwindow.h -o moc_mainwindow.cpp調用編譯器進行編譯g++ main.cpp mainwindow.cpp moc_mainwindow.cpp -Ie:\Qt\4.7.0\include -o main -Le:\Qt\4.7.0\lib -lQtCore4 -lQtGui4qmake使用 qmake 的的話,一個簡單的 pro 文件TARGET = exampleTEMPLATE = appSOURCES += main.cpp mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.uiHEADERS 中的文件是否需要 moc 進行預處理,qmake 運行時會根據其是否含有Q_OBJECT自動判斷。這也是為什麼 很多人添加Q_OBJECT宏後不重新運行qmake會出錯誤的原因。cmake看看相應的 cmake 的 CMakeLists.txt 文件PROJECT(example)CMAKE_MINIMUM_REQUIRED(VERSION 2.6)FIND_PACKAGE(Qt4 REQUIRED)INCLUDE(${QT_USE_FILE})INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})QT4_WRAP_CPP(example_MOCS mainwindow.h)QT4_WRAP_UI(example_UIS mainwindow.ui)ADD_EXECUTABLE(example main.cpp mainwindow.cpp ${example_MOCS})TARGET_LINK_LIBRARIES(example ${QT_LIBRARIES})需要 moc 的文件,用 QT4_WRAP_CPP 處理生成的文件放入變數 example_MOCS 中,最後一塊鏈接到可執行程序需要 uic 的文件,用 QT4_WRAP_UI 處理Windows因為windows下鏈接時分為 console 和 windows 兩個子系統,所以windows下有些問題需要特殊處理。用 qmake 時:默認是 windows 子系統可以通過 CONFIG += console 使用 console 子系統用 cmake 是:默認是 console 子系統使用 windows 子系統需要SET(QT_USE_QTMAIN TRUE)ADD_EXECUTABLE(example WIN32 main.cpp mainwindow.cpp ${example_MOCS})前者啟用 qtmain.lib 庫來提供windows下的 WinMain 入口函數。後者鏈接 windows 子系統再復雜一點main.cppmainwindows.uimainwindows.hmainwindows.cppmain.qrcmain.rc前面已經用到了Qt的 moc 和 uic,這次增加了資源系統 需要用 rccrcc main.qrc -o qrc_main.cpp同時,使用了windows下的資源文件 .rc (比如給程序添加圖標)MVSC 中使用 rc.exe 對 .rc 文件進行處理MinGW 中使用 windres.exe 處理 .rc 文件qmakeTARGET = exampleTEMPLATE = libHEADERS = mainwindow.h widget.hSOURCES = main.cpp widget.cpp mainwindow.cppRESOURCES = main.qrcRC_FILE = main.rccmakePROJECT(example)CMAKE_MINIMUM_REQUIRED(VERSION 2.6)FIND_PACKAGE(Qt4 REQUIRED)SET(QT_USE_QTMAIN TRUE)INCLUDE(${QT_USE_FILE})INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})if(MINGW) set(CMAKE_RC_COMPILER_INIT windres) ENABLE_LANGUAGE(RC) SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")endif(MINGW)SET(example_SRCS main.cpp mainwindow.cpp widget.cpp res/main.rc)SET(example_MOC_SRCS mainwindow.h widget.h)QT4_WRAP_CPP(example_MOCS ${example_MOC_SRCS})QT4_ADD_RESOURCES(example_RCC_SRCS main.qrc)SET(example_SRCS ${example_SRCS} ${example_MOCS} ${example_RCC_SRCS})ADD_EXECUTABLE(example WIN32 main.cpp mainwindow.cpp ${example_SRCS})TARGET_LINK_LIBRARIES(example ${QT_LIBRARIES})對Qt的資源文件,使用 QT4_ADD_RESOURCES 來調用rcc進行預處理對 Windows 資源文件,直接和源文件一樣,添加到列表中即可。只是:MinGW 下僅僅這么做還不行,上面的 MinGW 塊用來修復這個問題Debug 與 Releaseqmake使用 qmake 時,可以在 pro 文件內分別為兩種模式設置不同的選項。使用時,可以直接 make release 或 make debug 來編譯不同的版本cmake不同於 qmake,由於 cmake 採用 out-of-source 方式。故:建立debug release兩目錄,分別在其中執行cmake -DCMAKE_BUILD_TYPE=Debug(或Release)需要編譯不同版本時進入不同目錄執行make對生成 msvc 工程的情況, CMAKE_BUILD_TYPE 不起作用。生成工程後使用IDE自帶的模式選擇。

Ⅶ c++中math中PI怎麼用

從math.h的源文件中可以看到,需要首先在#include<math.h>前定義#define _MATH_DEFINES_DEFINED,才可以使用一些數學常量,並且可以看到pi的數學符號是M_PI。

因此,我們需要這樣使用PI這個常數:

(7)qt條件編譯擴展閱讀:

從math.h的源文件還看到很多其他的數學常數,比如ln2,ln10,lge,lg2等等。這些都可以使用特定的數學符號來表示這些常量。

math.h中使用了條件編譯指令# if defined...,在圖一的第一行。

這里便是預處理指令,它是以#號開頭的代碼行。#號必須是該行除了任何空白字元外的第一個字元。#後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字元。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源代碼做某些轉換。

下面是部分預處理指令:

#空指令,無任何效果

#include包含一個源代碼文件

#define定義宏

#undef取消已定義的宏

#if如果給定條件為真,則編譯下面代碼

#ifdef如果宏已經定義,則編譯下面代碼

#ifndef如果宏沒有定義,則編譯下面代碼

#elif如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼

#endif結束一個#if……#else條件編譯塊

#error停止編譯並顯示錯誤信息

Ⅷ qt如何設置宏區分同一個平台多套件編譯

在pro裡面定義一個宏,然後在代碼中根據這個宏進行條件編譯。

下面是一個示例:

網頁鏈接

Ⅸ #ifdef 與#endif 在函數中的作用及其用法

條件編譯的宏,根據宏定義指定變數與否來決定是否編譯被
#ifdef和#endif所包括進來的整段語句塊。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:750
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1012
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:719
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:879
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1127
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:351
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:229
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:912
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:876