日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强符号和弱符号

發布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强符号和弱符号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ?在C語言中,函數和初始化的全局變量(包括顯示初始化為0)是強符號,未初始化的全局變量是強符號。關于多個強弱符號定義類型不一致的主要有下面三種情況:

1.兩個或兩個以上強符號類型不一致

2.有一個強符號,其他都是弱符號

3.兩個或兩個以上弱符號類型不一致

對于情況一,編譯會報符號重定義錯誤。

?

對于情況二,鏈接最終會選擇強符號。示例代碼如下:

?

[mapan@localhost 2]$ cat a.c #include <stdio.h>int shared;int main() {int a = 100;swap(&a,&shared);return 0; } [mapan@localhost 2]$ cat b.c #include <stdio.h>int shared = 2;void swap(int *a,int *b) {*a *= *b;printf("a = %d\n",*a); } [mapan@localhost 2]$ gcc a.c b.c [mapan@localhost 2]$ ./a.out a = 200 [mapan@localhost 2]$

?

編譯沒報錯,并且打印出正確結果。鏈接取的強符號(已初始化的全局變量)。這是強弱符號類型一樣的情況,強弱符號類型不一下的情況如下:

?

[mapan@localhost 2]$ cat a.c #include <stdio.h>long shared = 1;int main() {printf("%d\n",shared);return 0; } [mapan@localhost 2]$ cat b.c #include <stdio.h>int shared ;[mapan@localhost 2]$ gcc a.c b.c [mapan@localhost 2]$ ./a.out 1 [mapan@localhost 2]$

?

編譯正常。這是強類符號的大小大于弱類型符號大小。再看:

?

[mapan@localhost 2]$ cat a.c #include <stdio.h>long shared ;int main() {printf("%d\n",shared);return 0; } [mapan@localhost 2]$ cat b.c #include <stdio.h>int shared = 1;[mapan@localhost 2]$ gcc a.c b.c /usr/bin/ld: Warning: alignment 4 of symbol `shared' in /tmp/ccNlFnUp.o is smaller than 8 in /tmp/ccp5HfsC.o /usr/bin/ld: Warning: size of symbol `shared' changed from 8 in /tmp/ccp5HfsC.o to 4 in /tmp/ccNlFnUp.o [mapan@localhost 2]$ ./a.out 1 [mapan@localhost 2]$

編譯產生警告信息,這是因為2個目標文件的COMMON塊不一致(未初始化的全局變量存放在COMMON塊)。當不同的目標文件需要COMMON塊空間大小不一致時,以最大的那塊為準。

?

?

對于情況三,編譯正常,沒啥好說的了。

?

?

?

?

?

?

?

?

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的强符号和弱符号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。