計算機系統基礎(一):程序的表示、轉換與鏈接(第十一周小測驗)


1.以下是鏈接過程中對符號定義的判斷,其中錯誤的是( )。

     A.全局變量聲明“int x, y;”中,x和y都是符號的定義
     B.靜態局部變量聲明“static int x=\*xp;”中,x是符號的定義
     C.全局變量聲明“int *xp=&x;”中,xp和x都是符號的定義
     D.函數內的局部變量聲明“short x=200;”中,x不是符號的定義

2.若x為局部變量,xp、y和z是全局變量,則以下判斷中錯誤的是( )。

     A.賦值語句“int y=x+z;”中,y和z都是符號的引用
     B.賦值語句“y=x+\*xp;”中,y和xp都是符號的引用
     C.靜態局部變量聲明“static int x=*xp;”中,xp是符號的引用
     D.賦值語句“y=x+z;”中,y和z都是符號的引用

3.以下有關ELF目標文件的符號表的敘述中,錯誤的是( )。

     A.可重定位和可執行兩種目標文件中都有符號表且數據結構一樣
     B.符號表定義在.symtab節中,每個表項描述某個符號的相應信息
     C.符號表中包含了所有定義符號的描述信息,包括局部變量的相關信息
     D.通過符號表可獲得符號的名稱、所在節及在節中偏移地址和長度

4.以下是有關鏈接過程中符號解析(符號綁定)的敘述,其中錯誤的是( )。

     A.全局符號(包括外部全局符號)需將模塊內的引用與模塊外的定義符號綁定
     B.同一個符號名可能在多個模塊中有定義,每個定義處的符號都須分配空間
     C.符號解析的目的是將符號引用與某目標模塊中定義的符號建立關聯
     D.本地符號的解析比較簡單,只要與本模塊內定義的符號關聯即可

5.以下有關強符號和弱符號的符號解析的敘述中,錯誤的是( )。

     A.一個符號名可以有一個強符號和多個弱符號,強符號為其定義
     B.一個符號名只能有一個強符號,否則符號解析失敗
     C.一個符號名可以僅出現在引用處或僅出現在定義處
     D.一個符號名可以有多個弱符號,任選一個為其定義

6.以下是兩個源程序文件:


	/\*m1.c\*/
	int p1(viod);
	int main()
	{
		int p1= p1();
		return p1;
	}

	/\* m2.c \*/
	static int main=1;
	int p1(
	{
		main++;
		return main;
	}
對於上述兩個源程序文件鏈接時的符號解析,錯誤的是( )。
     A.因為出現了兩個強符號main,所以會發生鏈接錯誤
     B.在m1中,定義了一個強符號main和一個弱符號p1
     C.在m1中,對m2中定義的強符號p1的引用只有一處
     D.在m2中,定義了一個強符號p1和一個局部符號main

7.以下是兩個源程序文件:


	/\* m1.c \*/
	int p1;
	int main()
	{
		int p1= p1();
		return p1;
	}

	/\* m2.c \*/
	int main=1;
	int p1()
	{
		int p1=main++;
		return main;
	}

對於上述兩個源程序文件鏈接時的符號解析,錯誤的是( )。

     A.在模塊m1的所有語句中,對符號p1的引用一共有三處
     B.在m1中,定義了一個強符號main和一個弱符號p1
     C.在m2中,定義了一個強符號p1和一個強符號main
     D.因為出現了兩個強符號main,所以會發生鏈接錯誤

8.以下是兩個源程序文件:


	/\* m1.c \*/
	int x=100;
	int p1(viod);
	int main()
	{
		x= p1();
		return x;
	}

	/\* m2.c \*/
	float x;
	static main=1;
	int p1()
	{
		int p1=main + (int) x;
		return p1;
	}
} 對於上述兩個源程序文件鏈接時的符號解析,錯誤的是( )。
     A.雖然x、main和p1都出現了多次定義,但不會發生鏈接錯誤
     B.m1中對x的兩處引用都與m1中對x的定義綁定
     C.m2中對x的引用與m2中對x的定義綁定
     D.m2中的變量p1與函數p1被分配在不同存儲區

9.以下是兩個源程序文件:


	/\* m1.c \*/
	#include 
      
      
      
              
                int x=100; short y=1, z=2; int main() { p1(); printf("%x=%d, z=%d\n", x, z); } 
              

	/\* m2.c \*/
	double x;
	int p1()
	{
		x=-1.0
	}

上述程序執行的結果是( )。提示:1074790400=2^30+2^20,16400=2^14+2^4。

     A.x=0, z=-16400
     B.x=-1074790400, z=0
     C.x=-1, z=2
     D.x=100, z=2

10.假設調用關系如下:func.o→libx.a和liby.a中的函數,libx.a→libz.a中的函數,libx.a和liby.a之間、liby.a和libz.a相互獨立,則以下幾個命令行中,靜態鏈接發生錯誤的命令是( )。

     A.gcc -static –o myfunc func.o libx.a libz.a liby.a
     B.gcc -static –o myfunc func.o libx.a liby.a libz.a
     C.gcc -static –o myfunc func.o liby.a libx.a libz.a
     D.gcc -static –o myfunc func.o liby.a libz.a libx.a


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM