導航:首頁 > 源碼編譯 > 編譯參數符號

編譯參數符號

發布時間:2023-01-18 10:29:23

㈠ c/ c++參數標識符

我是計算機專業的,我明白你的意思,我詳細的告訴你,所謂"參數標識符"指的是形式參數變數名,用英文說是"parameter",你說的"函數聲明時參數標識符是可選的"的意思是,如果對一個函數進行聲明,則可以省略變數名,例如對於你給出的函數"int sum(int a ,int b)"聲明時可以這樣:
int sum( int, int );
為什麼呢?因為進行函數聲明的作用是告訴編譯系統,標識符"sum"是一個函數名,它的返回值是int類型,兩個參數分別是int和int類型,至於這2個參數的名字是什麼,編譯系統沒必要知道,因為這個函數具體如何實現的,也就是函數體內的語句是什麼樣的(功能是什麼)編譯系統管不著,它只管你在調用這個函數時,必須給它傳遞2個參數,這2個參數必須都是int類型的,如果你沒按照函數聲明進行調用,它就會提示語法錯誤,例如你調用時用"sum(1,2)"和"sum(r,s)"或者"sum(3,c)"調用,都沒錯,符合"參數為2個,且都是int類型",所以那個"a"和"b"在函數聲明時不是必需的.而在函數定義時就是必須的,因為函數定義關心的函數體內如何使用給出的形式參數,例如函數定義:
int sum( int a, int b )
{
return a + b;
}
編譯系統就要知道你用a和b做什麼了,如果你不給出a和b這2個名字,你的函數體如何寫呢?????
總之,你在學C語言時,自己要動腦子,在學每一條語法規則時,要想C語言為什麼這樣規定,假如不這樣規定會出現什麼後果,也就是說要把你自己當做編譯系統去考慮問題.

㈡ 編譯參數及程序段含義

1、編譯參數

-fpic:position-independent code

2、程序段

.got:GLOBAL_OFFSET_TABLE

.bss:(Block Started by Symbol)通常是指用來存放程序中未初始化的全局變數和靜態變數的一塊內存區域。特點是:可讀寫的,在程序執行之前BSS段會自動清0。所以,未初始的全局變數在程序執行之前已經成0了。

㈢ C語言中的%%d是什麼意思

表示把數據按十進制整型輸出,類似的符號含義如下:

%o表示把數據按八進制整型輸出;

%x表示把數據按十六進制整型輸出;

%u表示把數據參數按無符號整型輸出。

%f顯示小數表示的普通浮點數。

(3)編譯參數符號擴展閱讀:

c語言特有特點

C語言是一個有結構化程序設計、具有變數作用域(variable scope)以及遞歸功能的過程式語言。

C語言傳遞參數均是以值傳遞(pass by value),另外也可以傳遞指針(a pointer passed by value)。不同的變數類型可以用結構體(struct)組合在一起。通過指針(pointer),C語言可以容易的對存儲器進行低級控制。預編譯處理(preprocessor)讓C語言的編譯更具有彈性。

㈣ ...的java中可變參數的符號

在編寫一個方法時,其參數隨著程序運行的條件而變化,在編譯期間無法確定。具體地講,例如編寫一個列印參加聚會party的程序,其中方法printInvitation()將根據作為參數的參加人姓名,列印邀請卡。但這個參數的數量事先並不確定。當然可以編寫許多重載的方法來解決這個問題,如:
void printInvitation(String name);
void printInvitation(String name1, Stringname2);
void printInvitation(String name1, Stringname2, String name3);
問題是編寫多少個重載的方法才可以解決給所有參加者列印邀請卡?也許需要改變您的程序設計,而使用數組或者鏈接表了。
應用可變參數可以方便、靈活地解決這類問題。例如:
void printInvitation(String...names) {
for (String name : names) {
makeCard(name); //調用方法按照姓名列印邀請卡
System.out.println(Recording info: invitation card has been printed for + name);
}
}
這里,(String...names)便是可變參數。它包括從0到任意個相同類型的參數。在編譯期間,這個可變參數將被轉換為字元串數組形式,即:void printInvitation(String names).
如下是調用這個方法的例子:
printInvitation(李剛, David Smith);
printInvitation(Greg Wu, Paul Nguyen, Liu Wei, 張新);
printInvitation(); //無參數
當在無參數情況下調用這個方法時,將不執行任何這個方法中的代碼。
如下是運行結果:
Recording info: invitation card has been printed for 李剛
Recording info: invitation card has been printed for David Smith
Recording info: invitation card has been printed for Greg Wu
Recording info: invitation card has been printed for Paul Nguyen
Recording info: invitation card has been printed for Liu Wei
Recording info: invitation card has been printed for 張新

㈤ 編譯原理有有符號un-1.u=un嗎

編譯程序把源程序翻譯為目標程序。根據源程序的語言種類,翻譯程序可以分為匯編程序與編譯程序。與之相對,解釋程序是對源程序進行解釋執行的程序。相應的可以將高級語言分為

編譯型 C/C++, Swift, etc.
解釋型 Python, javascript, etc.
混合型 Java, etc.
本文重點放在編譯程序的設計上。典型的編譯程序具有 7 77 個邏輯部分

對源程序掃描一次被稱為一遍 (pass)。典型的一遍掃描編譯程序有如下形式

通常將中間代碼生成前的分析部分稱為編譯器的前端,其後的綜合部分則被稱為後端。這樣就把一個編譯程序分為了與源語言相關和與目標機有關的兩個獨立的部分,降低了程序的耦合。假設 llvm 編譯器 支持 M MM 種源語言到 N NN 種目標語言的編譯
傳統的編譯器如 gcc 可能需要開發 M × N M \times NM×N 個不同的子模塊。而 llvm 使用統一的中間語言 llvm Intermediate Representation 只需要 M MM 個前端與 N NN 個後端,大大降低了開發成本。

文法
設非空有窮集合 Σ \SigmaΣ 為一字母表,則其上的符號串為 ∀ s ∈ Σ ∗ \forall s \in \Sigma^*∀s∈Σ

,其中 ∗ *∗ 表示集合的閉包。特別的記 Σ 0 = ε \Sigma^0 = {\varepsilon}Σ
0
=ε 為空串組成的集合。規則通常寫作

U : : = x  or  U → x , ∣ U ∣ = 1 , ∣ x ∣ ≥ 0 U ::= x\text{ or }U\rightarrow x,\quad |U| = 1, |x| \ge 0U::=x or U→x,∣U∣=1,∣x∣≥0

其中左部 U UU 是符號,右部 x xx 是有窮符號串。規則的集合 P PP 即可確定一個文法 G GG

<程序> ::= <常量說明><變數說明><函數說明>
<常量說明> ::= {const<常量定義>;}
<常量定義> ::= int<標識符>=<整數>{,<標識符>=<整數>}|char<標識符>=<字元>{,<標識符>=<字元>}
<變數說明> ::= {<類型標識符><變數定義>;}
<變數定義> ::= <標識符>[<下標>]{,<標識符>[<下標>]}
<下標> ::= '['<無符號整數>']' // <無符號整數>表示數組元素的個數,其值需大於0
<函數說明> ::= {(<類型標識符>|void)<函數定義>}void<主函數>
<函數定義> ::= <標識符>'('<參數表>')'<復合語句>
<參數表> ::= [<類型標識符><標識符>{,<類型標識符><標識符>}]
<主函數> ::= main'('')'<復合語句>

<復合語句> ::= '{'<常量說明><變數說明>{<語句>}'}'
<語句> ::= <條件語句>|'{'{<語句>}'}'|<函數調用語句>;|<賦值語句>;|<讀語句>;|<寫語句>;|<返回語句>;|;
<條件語句> ::= <if語句>|<while語句>|<do語句>|<for語句>
<if語句> ::= if'('<條件>')'<語句>[else<語句>]
<while語句> ::= while'('<條件>')'<語句>
<do語句> ::= do<語句>while'('<條件>')'
<for語句> ::= for'('<標識符>=<表達式>;<條件>;<標識符>=<標識符><加法運算符><無符號整數>')'<語句>
<條件> ::= <表達式>[<關系運算符><表達式>] // 表達式為0條件為假,否則為真
<函數調用語句> ::= <標識符>'('[<表達式>{,<表達式>}]')'
<賦值語句> ::= <標識符>['['<表達式>']']=<表達式>
<讀語句> ::= scanf'('<標識符>{,<標識符>}')'
<寫語句> ::= printf'('<字元串>[,<表達式>]')'|printf'('<表達式>')'
<返回語句> ::= return['('<表達式>')']

<表達式> ::= [<加法運算符>]<項>{<加法運算符><項>} // [+|-]只作用於第一個<項>
<項> ::= <因子>{<乘法運算符><因子>}
<因子> ::= <標識符>['['<表達式>']']|'('<表達式>')'|<整數>|<字元>|<函數調用語句>
<整數> ::= [<加法運算符>]<無符號整數>

<標識符> ::= <字母>{<字母>|<數字>}
<無符號整數> ::= <非零數字>{<數字>}|0
<數字> ::= 0|<非零數字>
<非零數字> ::= 1|...|9
<字元> ::= '<加法運算符>'|'<乘法運算符>'|'<字母>'|'<數字>'
<字元串> ::= "{十進制編碼為32,33,35-126的ASCII字元}"
<類型標識符> ::= int|char
<加法運算符> ::= +|-
<乘法運算符> ::= *|/
<關系運算符> ::= <|<=|>|>=|!=|==
<字母> ::= _|a|...|z|A|...|Z
復制

上述文法使用擴充的 BNF 表示法進行描述

符號 定義 說明
∣ \vert∣ 或 作用域由括弧限定
{ t } n m \{t\}^m_n{t}
n
m

將 t tt 重復連接 n ∼ m n \sim mn∼m 次 預設時 m = ∞ ,   n = 0 m = \infin,\ n = 0m=∞, n=0
[ t ] [t][t] 符號串 t tt 可有可無 等價於 { t } 1 \{t\}^1{t}
1

( t ) (t)(t) 局部作用域 主要用於限定 ∣ \vert∣ 范圍
相關概念有

概念 符號 定義 示例
識別符號 Z ZZ 文法中第一條規則的左部符號 <程序>
字匯表 V VV 文法中出現的全部符號 { <程序>, <常量說明>, …, 0, 1, … }
非終結符號集 V n V_nV
n

全部規則的左部組成的集合 { <程序>, <常量說明>, <變數說明>, … }
終結符號集 V t V_tV
t

V − V n V - V_nV−V
n

{ 0, 1, …, _, a, b, … }
設 U : : = u ∈ P U ::= u \in PU::=u∈P 則對於 ∀ x , y ∈ V ∗ \forall x, y \in V^*∀x,y∈V

有直接推導 x U y ⇒ x u y xUy \Rightarrow xuyxUy⇒xuy 。如果 y ∈ V t ∗ y \in V_t^*y∈V
t


則 x U y   ⤃   x u y xUy\ ⤃\ xuyxUy ⤃ xuy 稱為規范推導。直接推導序列 u 0 ⇒ u 1 ⇒ ⋯ ⇒ u n u_0 \Rightarrow u_1 \Rightarrow \cdots \Rightarrow u_nu
0

⇒u
1

⇒⋯⇒u
n

可簡記為

{ u 0 ⇒ + u n n > 0 u 0 ⇒ ∗ u n n ≥ 0 \begin{cases} u_0 \mathop\Rightarrow\limits^+ u_n & n > 0\\ u_0 \mathop\Rightarrow\limits^* u_n & n \ge 0\\ \end{cases}{
u
0


+
u
n

u
0



u
n



n
>
0
n

0


進一步定義

句型 V ∗ ∋ x ⇐ ∗ Z V^* \ni x \mathop\Leftarrow\limits^* ZV

∋x


Z
句子 V t ∗ ∋ x ⇐ + Z V_t^* \ni x \mathop\Leftarrow\limits^+ ZV
t


∋x

+
Z
語言 L ( G ) = { x ∣ x  is sentence } L(G) = \{ x| x\text{ is sentence} \}L(G)={x∣x is sentence}
如果文法 G GG 和 G ′ G'G

有 L ( G ) = L ( G ′ ) L(G) = L(G')L(G)=L(G

) ,則稱這兩個文法等價。設 w = x u y w=xuyw=xuy 為一句型,稱 u uu 為一個相對於 U ∈ V n U \in V_nU∈V
n



w ww 的短語 如果 Z ⇒ ∗ x U y ∧ U ⇒ + u Z \mathop\Rightarrow\limits^* xUy \land U \mathop\Rightarrow\limits^+ uZ


xUy∧U

+
u
w ww 的簡單短語 如果 u uu 是短語且 U ⇒ u U \mathop\Rightarrow\limits uU⇒u
句型的最左簡單短語稱為句柄。

二義性
文法 G GG 是二義性的,如果 ∃ x ∈ L ( G ) \exist x \in L(G)∃x∈L(G) 使下列條件之一成立

x xx 可以對應兩顆不同的語法樹
x xx 有兩個不同的規范推導

㈥ gcc編譯程序時的命令行參數-I(大寫i) -L -l (小寫L) 2020-10-10

我們用gcc編譯程序時,可能會用到「-I」(大寫i),「-L」(大寫l),「-l」(小寫l)等參數,下面做個記錄:

例:

gcc -Wall -I /home/hello/include -L /home/hello/lib main.c -l world -Wl,-rpath,/you/dir/name -o prog

上面這句表示在編譯hello.c時:

-I(大寫i) /home/hello/include表示將/home/hello/include目錄作為第一個尋找頭文件的目錄,尋找的順序是:/home/hello/include-->/usr/include-->/usr/local/include

-L /home/hello/lib表示將/home/hello/lib目錄作為第一個尋找庫文件的目錄,尋找的順序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib

-l(小寫的L)world表示在上面的lib的路徑中尋找libworld.so動態庫文件(如果gcc編譯選項中加入了「-static」表示尋找libworld.a靜態庫文件)

-rpath=dir
把目錄添加到運行時類庫搜索路徑
-Wl,option
把選項傳遞給Linker.如果選項值包含逗號,就把他拆分成多個選項

-Wl,-rpath,/opt/lib
解決 error while loading shared libraries: ****.so: cannot open shared object file: No such file or directory

㈦ java編譯時找不到符號,怎麼解決

java編譯時提示找不到符號的解決方式如下:

方法一:
進入d:/web/wsh下: javac a.java
然後退出wsh目錄即進入d:/wsh下 javac wsh/b.java即可編譯成功!

方法二:通過使用javac -classpath(cp)參數
進入d:/web /wsh下: javac a.java
還是在d:/wsh/wsh下: javac -classpath d:/web/wsh b.java
這樣也可以編譯成功!
以下方法都通過測試!
以下是javac編譯的參數:
用法:javac <選項> <源文件>
選項:
-g:none 不生成任何調試信息
-g:{lines,vars,source} 只生成某些調試信息
-nowarn 不生成任何警告
-verbose 輸出有關編譯器正在執行的操作的消息
-deprecation 輸出使用已過時的 API 的源位置
-classpath <路徑> 指定查找用戶類文件的位置
-cp <路徑> 指定查找用戶類文件的位置
-sourcepath <路徑> 指定查找輸入源文件的位置
-bootclasspath <路徑> 覆蓋引導類文件的位置
-extdirs <目錄> 覆蓋安裝的擴展目錄的位置
-endorseddirs <目錄> 覆蓋簽名的標准路徑的位置
-d <目錄> 指定存放生成的類文件的位置
-encoding <編碼> 指定源文件使用的字元編碼
-source <版本> 提供與指定版本的源兼容性
-target <版本> 生成特定 VM 版本的類文件
-version 版本信息
-help 輸出標准選項的提要
-X 輸出非標准選項的提要
-J<標志> 直接將 <標志> 傳遞給運行時系統

㈧ 編譯原理這個符號表示什麼 如圖~~~~

剪頭上加一個星號:S-*->aPb
表示從S可以推出含有非終結符P的形如aPb的句型。
剪頭上加一個加號:S-+->a
表示從S可以推出終結符a。

㈨ c++怎樣處理重載函數編譯之後的函數符號問題

對每一個函數 都會生成一個符號
對於不同的重載都會生成不同的符號

比如
如果有一個函數int add(int, int)
那麼用C編譯後 它的符號就是add
而用C++編譯後 它的符號可能是這樣的
_Z3addii
如果再加上一個float add(float, float)的重載 那麼它就會多一個這樣的符號

_Z3addff
也就是對於每個重載 都會有一個根據參數類型生成的後綴 表示不同的含義

PS:在編譯後 可以通過nm查看符號名(gcc/g++)

㈩ gcc編譯過程中的各種參數含義

-g 可執行程序包含調試信息:加個-g 是為了gdb 用,不然gdb用不到。

-o 指定輸出文件名(o:output)-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。

-c 只編譯不鏈接:產生.o文件,就是obj文件,不產生執行文件(c : compile)。

gcc filename.c -o filename
上面的意思是如果你不打 -o filename(直接gcc filename.c );那麼默認就是輸出a.out.這個-o就是用來控制輸出文件的。用./a.out 執行文件。

其他參數含義:

1、-ansi

關閉 gnu c中與 ansi c 不兼容的特性, 激活 ansi c 的專有特性(包括禁止一些 asm inline typeof 關鍵字, 以及 UNIX,vax 等預處理宏)。

2、-fno-asm

此選項實現 ansi 選項的功能的一部分,它禁止將 asm, inline 和 typeof 用作關鍵字。

3、-fno-strict-prototype

只對 g++ 起作用, 使用這個選項, g++ 將對不帶參數的函數,都認為是沒有顯示的對參數的個數和類型說明,而不是沒有參數。

而 gcc 無論是否使用這個參數, 都將對沒有帶參數的函數, 認為沒有顯示說明的類型。

4、-fthis-is-varialble

就是向傳統 c++ 看齊, 可以使用 this 當一般變數使用。

5、-fcond-mismatch

允許條件表達式的第二和第三參數類型不匹配, 表達式的值將為 void 類型。

6、-funsigned-char 、-fno-signed-char、-fsigned-char 、-fno-unsigned-char

這四個參數是對 char 類型進行設置, 決定將 char 類型設置成 unsigned char(前兩個參數)或者 signed char(後兩個參數)。

7、-include file

包含某個代碼,簡單來說,就是便以某個文件,需要另一個文件的時候,就可以用它設定,功能就相當於在代碼中使用#include<filename>。

閱讀全文

與編譯參數符號相關的資料

熱點內容
房貸還完後到銀行解壓要多久辦完 瀏覽:734
程序員錢前途 瀏覽:521
雲伺服器維護用戶需要做什麼 瀏覽:741
郵箱為什麼顯示伺服器配置錯誤 瀏覽:469
中國趣的命令 瀏覽:897
php中sleep函數 瀏覽:657
程序員那麼可愛免費卡 瀏覽:736
javatcp多線程 瀏覽:45
深圳解壓去哪裡 瀏覽:700
ash源碼解讀 瀏覽:957
單片機喂狗嗎 瀏覽:244
keil編譯結果怎麼樣保存 瀏覽:612
pic單片機語法錯誤有哪些 瀏覽:509
感謝程序員讓我們買東西不用現金 瀏覽:300
蘋果電腦上新建文件夾怎麼用 瀏覽:512
程序員事業路線 瀏覽:522
安卓老年機如何安裝程序 瀏覽:636
我鬧心英語怎麼說app 瀏覽:508
公考程序員 瀏覽:169
如何獲取app伺服器 瀏覽:423