第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我對(duì)Cmake不是很了解,現(xiàn)在工程中出現(xiàn)了這么一個(gè)需求:

我對(duì)Cmake不是很了解,現(xiàn)在工程中出現(xiàn)了這么一個(gè)需求:

C++
回首憶惘然 2023-01-07 13:09:21
一個(gè)工程需要工程外的文件作為庫,這很常見。但同時(shí)這個(gè)工程外的文件也需要這個(gè)工程內(nèi)部頭文件。先展示一個(gè)demo:.├── CMakeLists.txt├── include│ └── mul_lib.h├── mul_lib.c└── my_project├── CMakeLists.txt├── include│ ├── fun.c│ └── fun.h└── src├── CMakeLists.txt└── main.c在上面的文件中,我的工程目錄是my_project,而工程外面有一個(gè)我需要的頭文件mul_lib.h文件,在這個(gè)頭文件中有這么一句:#include <fun.h>本來呢,這句是要導(dǎo)入其他文件夾下的文件的,但是我現(xiàn)在想讓它導(dǎo)入我工程下面的include文件下的fun.h文件。這就出現(xiàn)了標(biāo)題所描述的問題,請(qǐng)問我要如何編寫CMakeLists.txt文件才能實(shí)現(xiàn)這種想法呢?
查看完整描述

1 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

首先給你說明使用extern一次只能包含一個(gè)變量或者函數(shù),如果你的另一個(gè)文件中有N多個(gè)變量或函數(shù)的話,你要依次使用extern逐個(gè)包含進(jìn)來,如果這樣的話你會(huì)不會(huì)覺得太麻煩,而且這樣程序的可讀性也降低了。因此你要把整個(gè)文件的內(nèi)容引入到當(dāng)前文件中,最好使用#include把頭文件包含進(jìn)來。下面就給你介紹一個(gè)extern關(guān)鍵字和把程序?qū)懺诙鄠€(gè)文件中的內(nèi)容吧。

鏈接性:鏈接性為外部的名稱可在文件之間共享,鏈接性為內(nèi)部的名稱只能由一個(gè)文件中的函數(shù)共享。局部變量不存在共享,也就是說局部變量不存在鏈接性問題。也就是說鏈接性為外部的變量可以使用extern關(guān)見字把他包含進(jìn)來由其他文件使用,即和其他文件共享同一個(gè)變量;而鏈接性為內(nèi)部的變量則不能在其他文件之中使用,如果每個(gè)文件中都有一個(gè)相同的這個(gè)變量,則彼此之間是相互獨(dú)立的,不存在共享性。比如文件1有一個(gè)鏈接性為外部的變量int e=3;則文件2可以使用extern int e;把e包含進(jìn)來,兩個(gè)文件使用的是同一個(gè)變量e,文件2對(duì)e的修改將影響到文件1中的e的變量。而如果文件1和文件2中的兩個(gè)變量e的鏈接性是內(nèi)部的話,則兩個(gè)變量將是各自獨(dú)立的變量,對(duì)各自變量的修改不影響另一個(gè)文件中的同名變量。

1、對(duì)于大型程序一般將一個(gè)程序?qū)懺诙鄠€(gè)文件中:一般把程序分成三部分,頭文件和兩個(gè)源文件,其中頭文件包含類的聲明或函數(shù)的聲明。其中一個(gè)源文件就包含這些類和函數(shù)的定義,而另一個(gè)源文件則是主程序。
2、將程序放在多個(gè)文件中的好處是比如有多個(gè)這樣的程序需要在頭文件中聲明的這些函數(shù),則只需在該程序中把這些頭文件包含進(jìn)來。頭文件和包含頭文件定義的文件就組成了一個(gè)軟件包,可用于各種程序中。
3、通常不應(yīng)將函數(shù)聲明和變量聲明放在頭文件中。因?yàn)槿绻^文件包含一個(gè)函數(shù)定義,然后在同一程序的其他兩個(gè)文件中包含了這個(gè)頭文件,則同一程序中將包含同一函數(shù)的兩個(gè)定義,除非是內(nèi)聯(lián)函數(shù),否則就將出錯(cuò)。
4、頭文件一般包含:函數(shù)原型,使用#define或const定義的符號(hào)常量,結(jié)構(gòu)聲明,類聲明,模板聲明,內(nèi)聯(lián)函數(shù)。
5、包含頭文件時(shí)使用#include關(guān)見字,在#include后面文件名最好使用雙引號(hào)不要使用尖括號(hào),比如#include “eee.h”使用雙引號(hào)和尖括號(hào)的區(qū)別是使用尖括號(hào)時(shí)編譯器將首先在標(biāo)準(zhǔn)頭文件中查找,而使用雙引號(hào)則首先在當(dāng)前工作目錄或源代碼目錄查找。
6、不能在同一個(gè)文件中包含頭文件兩次。一般不會(huì)犯這種錯(cuò)誤,但是當(dāng)使用包含了一個(gè)頭文件的文件時(shí)有可能在不知情的情況下犯這個(gè)錯(cuò)誤。
7、使用預(yù)處理器指令#ifndef來解決上面的問題。語名#ifndef hyong…..#endi表示僅當(dāng)以前沒有使用預(yù)處理器編譯指令#define定義的名稱hyong時(shí)才處理#ifndef….#endif之間的語句。#define通常創(chuàng)建符號(hào)常量,比如#define H 3;把常量3定義為名字H,但只使用#define就能創(chuàng)建名稱,比如#define H;就創(chuàng)建了一個(gè)名稱H。完整的#ifndef….#endif語句的例子如下:#ifndef HY #define HY void g(); #endif;該語句的執(zhí)行順序?yàn)?編譯器首先遇到該頭文件時(shí),名稱HY沒有被定義,這時(shí)編譯器就將查看#ifndef….#endif之間的內(nèi)容,并讀取到#define HY這一行。如果在同一文件中遇到包含該頭文件的代碼時(shí),編譯器就知道HY這個(gè)名字已經(jīng)被#define定義了,從而跳過#ifndef….#endif之間的內(nèi)容。注意這種方法并不能防止頭文件被包含兩次,而只是讓他忽略除第一次包含之外的所有內(nèi)容。

//將程序放在多個(gè)文件中的示例:
//頭文件hyong.h的內(nèi)容如下
#ifndef HY //一般在頭文件都都使用這種格式以防止頭文件在同一文件中被包含兩次。語名#ifndef hyong…..#endi表示僅當(dāng)以前沒有使用預(yù)處理器編譯指令#define定義的名稱hyong時(shí)才處理#ifndef….#endif之間的語句。
#define HY //在這里用define定義一個(gè)名字HY,以便在下次訪問到該頭文件時(shí),使該名字已經(jīng)被定義,從而讓程序跳過#ifndef….#endif間的語句。
void g(); //在頭文件中聲明一個(gè)函數(shù)g();
#endif

//在頭文件hy.h中定義函數(shù),一般不允許這樣做
#include <iostream>
using namespace std;
void f(){cout<<"f()"<<endl;}

//定義頭文件中聲明的函數(shù)的源文件hyong.cpp的內(nèi)容如下
#include "stdafx.h" //注意:在VC++中所有的源文件中都要包含這條語句。
#include "hyong.h" //將頭文件hyong.h包含進(jìn)來,這里使用雙引號(hào),而不是引號(hào),以便能更快地檢查到該頭文件中定義的名字
#include “hy.h” //
#include <iostream>
using namespace std;
void g(){cout<<"g()"<<endl;} //定義頭文件hyong.h中聲明的函數(shù)g()

//主程序源文件ff.cpp的內(nèi)容如下
#include "stdafx.h"
#include<iostream>
#include "hyong.h" //注意,主程序和hyong.cpp的文件中都包含了這個(gè)頭文件。
//#include “hy.h” //錯(cuò)誤,在同一程序中的另一個(gè)文件hyong.cpp中已包含過該頭文件,因?yàn)閒函數(shù)是在hy.h這個(gè)頭文件中定義的,在這里再包含頭文件hy.h就會(huì)出現(xiàn)在同一程序中定義了兩個(gè)f()函數(shù)的錯(cuò)誤。
using namespace std;
int main() {g(); cout<<"p"<<endl; } //f();//對(duì)f函數(shù)的調(diào)用錯(cuò)誤,因?yàn)閒函數(shù)在頭文件hy.h中定義,并且不能在主程序文件中再包含頭文件hy.h,在這里就會(huì)出現(xiàn)f是未標(biāo)識(shí)的標(biāo)識(shí)符的錯(cuò)誤。

 


查看完整回答
反對(duì) 回復(fù) 2023-01-10
  • 1 回答
  • 0 關(guān)注
  • 99 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)