tft每日頭條

 > 圖文

 > c語言指數常數的正确表示形式

c語言指數常數的正确表示形式

圖文 更新时间:2024-09-27 13:43:04

c語言指數常數的正确表示形式?visual C 編譯器在編譯函數時,會對函數名進行修飾,現在小編就來說說關于c語言指數常數的正确表示形式?下面内容希望能幫助到你,我們來一起看看吧!

c語言指數常數的正确表示形式(C語言基礎extern)1

c語言指數常數的正确表示形式

visual C 編譯器在編譯函數時,會對函數名進行修飾。

如果沒聽過函數名修飾,咱們先做個試驗,有個直觀的認識。

#include "stdafx.h"

extern void func(int a,int b,long c);

int main(int argc, char* argv[])

{

func(1,2,5);

printf("Hello World!\n");

return 0;

}

如以上代碼所示,func函數隻有聲明,沒有定義。 這個工程也之後這一個c文件。

我們編譯工程,得到如下錯誤。

error LNK2001: unresolved external symbol "void __cdecl func(int,int,long)" (?func@@YAXHHJ@Z)

無法解析的外部符号?func@@YAXHHJ@Z ,看到了嗎,func函數在後台的名字是?func@@YAXHHJ@Z

這就是對函數名的修飾。

為什麼是?func@@YAXHHJ@Z 這樣的呢?

函數名的修飾規則是:? 函數名 @@ 調用規則 返回值類型 參數類型 @Z

調用規則VC 包含三種:

1.__cdecl在修飾規則裡是YA,我們的例子中就是這種, ?func@@YAXHHJ@Z。

2.__stdcall在命令規則裡是YG 。

3.__fastcall在命令規則裡是YI。

這三種調用規則對于函數參數的傳遞方式和入棧順序也不同,我們以後在講。

返回值類型和參數類型如下:

X--void

D--char

E--unsigned char

F--short

H--int

I--unsigned int

J--long

K--unsigned long(DWORD)

M--float

N--double

_N--bool

U--struct

以上就是visual C 編譯器的函數修飾規則。确切的說是C 語言的修飾規則。

那麼 extern “C"是什麼呢?

這個符号是告訴編譯器,按C語言的修飾規則修飾。

我們加上“C",看看C語言的修飾規則是什麼樣的。

#include "stdafx.h"

extern "C" void func(int a,int b,long c);

int main(int argc, char* argv[])

{

func(1,2,5);

printf("Hello World!\n");

return 0;

}

編譯結果如下:

error LNK2001: unresolved external symbol _func

看到了嗎,C語言的規則就是簡單的在函數名前面,加了一個下劃線。

那麼我們為什麼要折騰函數名的修飾規則呢?有什麼用?

比如當你調用别人編譯的庫時,就需要知道對方是用什麼規則編譯的,你調用的時候也要用這種規則,不然就會提示“error LNK2001: unresolved external symbol XXXX” 這種錯誤。

當你編譯工程時,提示此錯誤,可以查查是不是函數修飾規則的問題。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved