c語言函數名
A. 在c語言中有那些函數名
僅僅為了獲取函數名,就在函數體中嵌入硬編碼的字元串,這種方法單調乏味還易導致錯誤,不如看一下怎樣使用新的C99特性,在程序運行時獲取函數名吧.對象反射庫、調試工具及代碼分析器,經常會需要在運行時訪問函數的名稱,直到不久前,唯一能完成此項任務並且可移植的方法,是手工在函數體內嵌入一個帶有該函數名的硬編碼字元串,不必說,這種方法非常單調無奇,並且容易導致錯誤。本文將要演示怎樣使用新的C99特性,在運行時獲取函數名。
那麼怎樣以編程的方式從當前運行的函數中得到函數名呢?
答案是:使用__FUNCTION__ 及相關宏。
引出問題
通常,在調試中最讓人心煩的階段,是不斷地檢查是否已調用了特定的函數。對此問題的解決方法,一般是添加一個cout或printf()——如果你使用C語言,如下所示:
void myfunc()
{
cout<<"myfunc()"<<endl;
//其他代碼
}
通常在一個典型的工程中,會包含有數千個函數,要在每個函數中都加入一條這樣的輸出語句,無疑難過上「蜀山」啊,因此,需要有一種機制,可以自動地完成這項操作。
獲取函數名
作為一個C++程序員,可能經常遇到 __TIME__、__FILE__、__DATE__ 這樣的宏,它們會在編譯時,分別轉換為包含編譯時間、處理的轉換單元名稱及當前時間的字元串。
在最新的ISO C標准中,如大家所知的C99,加入了另一個有用的、類似宏的表達式__func__,其會報告未修飾過的(也就是未裁剪過的)、正在被訪問的函數名。請注意,__func__不是一個宏,因為預處理器對此函數一無所知;相反,它是作為一個隱式聲明的常量字元數組實現的:
static const char __func__[] = "function-name";
在function-name處,為實際的函數名。為激活此特性,某些編譯器需要使用特定的編譯標志,請查看相應的編譯器文檔,以獲取具體的資料。
有了它,我們可免去大多數通過手工修改,來顯示函數名的苦差事,以上的例子可如下所示進行重寫:
void myfunc()
{
cout<<"__FUNCTION__"<<endl;
}
官方C99標准為此目的定義的__func__標識符,確實值得大家關注,然而,ISO C++卻不完全支持所有的C99擴展,因此,大多數的編譯器提供商都使用 __FUNCTION__ 取而代之,而 __FUNCTION__ 通常是一個定義為 __func__ 的宏,之所以使用這個名字,是因為它已受到了大多數的廣泛支持。
在Visual Studio 2005中,默認情況下,此特性是激活的,但不能與/EP和/P編譯選項同時使用。請注意在IDE環境中,不能識別__func__ ,而要用__FUNCTION__ 代替。
Comeau的用戶也應使用 __FUNCTION__ ,而不是 __func__ 。
C++ BuilderX的用戶則應使用稍稍不同的名字:__FUNC__ 。
GCC 3.0及更高的版本同時支持 __func__ 和__FUNCTION__ 。
一旦可自動獲取當前函數名,你可以定義一個如下所示顯示任何函數名的函數:
void show_name(const char * name)
{
cout<<name<<endl;
}
void myfunc()
{
show_name(__FUNCTION__); //輸出:myfunc
}
void foo()
{
show_name(__FUNCTION__); //輸出:foo
}
因為 __FUNCTION__ 會在函數大括弧開始之後就立即初始化,所以,foo()及myfunc()函數可在參數列表中安全地使用它,而不用擔心重載。
簽名與修飾名
__FUNCTION__ 特性最初是為C語言設計的,然而,C++程序員也會經常需要有關他們函數的額外信息,在Visual Studio 2005中,還支持另外兩種非標準的擴展特性:__FUNCDNAME__ 與 __FUNCSIG__ ,其分別轉譯為一個函數的修飾名與簽名。函數的修飾名非常有用,例如,在你想要檢查兩個編譯器是否共享同樣的ABI時,就可派得上用場,另外,它還能幫助你破解那些含義模糊的鏈接錯誤,甚至還可用它從一個DLL中調用另一個用C++鏈接的函數。在下例中,show_name()報告了函數的修飾名:
void myfunc()
{
show_name(__FUNCDNAME__); //輸出:?myfunc@@YAXXZ
}
一個函數的簽名由函數名、參數列表、返回類型、內含的命名空間組成。如果它是一個成員函數,它的類名和const/volatile限定符也將是簽名的一部分。以下的代碼演示了一個獨立的函數與一個const成員函數簽名間的不同之處,兩個函數的名稱、返回類型、參數完全相同:
void myfunc()
{
show_name(__FUNCSIG__); // void __cdecl myfunc(void)
}
struct S
{
void myfunc() const
{
show_name(__FUNCSIG__); //void __thiscall S::myfunc(void) const
}
};
B. C語言主函數的函數名是什麼意思
1,先不用理解太多,只要知道main函數是程序入口地址,也就是說每次寫程序都得有一個main(),然後多多練習程序,有些概念時間久了自然會理解。多練習就好,只是每次寫程序都要有一個main(),這一點先記住就好。記住,要想學好,就得多練,多寫程序,剛開始不會寫,可以照抄程序,然後做少量修改,改著改著,你就明白程序怎麼寫了。
2,關於數學,英文或是其他學科。
其實c語言,也只是一種工具,一種和計算機打交道的工具。就想英語,漢語一樣。只是英語、漢語都是和人打交道的。而計算機聽不懂這些,你得用他能理解的語言來和他溝通,這就是計算機語言。這里邊是需要一點英文,但不多,我有一個沒學過英文的同學(他主修俄語),照樣程序寫的很好。數學嘛,這個就得看你的應用方向了。
參考資料:http://iask.sina.com.cn/b/18581538.html
C語言
按照C99標準的規定,C語言的main函數如下:
int main(
void){/*網路示例代碼*/}//整數類型主函數(無類型)
或者
int main(intargc,
char*argv[]){/*網路示例代碼*/}//整數類型主函數(整數類型統計參數個數,字元類型*
數組指針至字元[])
C. c語言中函數名前加*與不加*有什麼區別
可以說加不加int是沒有區別的。在ansi
c的標准中,main的標准返回值是整型,如果你什麼都沒有回加,編答譯系統會自動加上int類型的。這時如果你使用gcc的話(vc是沒有的)會有一個警告。
void是無類型,表示沒有返回值,你的主函數如果不需要返回的話,最好加上它。
最後,建議你的主函數顯式的使用int類型,並return
0;這是一個好習慣,開始的時候沒什麼用,時間長了才能看出來。
D. 在c語言中,函數可以任意命名嗎
函數名也是標示符,要符合標示符的命令規則。
_或者字元開頭,只能包含_、字母和數字。
重名的函數要求參數不能相同。
E. 在C語言中,乘積的函數名是什麼
在C語言中,沒有標准庫函數計算乘積。
我們可以自定義計算乘積的函數回,函數名符合標識符命名規答則即可。「乘積」的英文是「proct」,常用於乘法的標識符通常使用「Multi」這個單詞。
C語言標識符命名規則:
標識符由字母(A-Z,a-z)、數字(0-9)、下劃線「_」組成,並且首字元不能是數字,但可以是字母或者下劃線。例如,正確的標識符:abc,a1,prog_to。
不能把C語言關鍵字作為用戶標識符,例如if ,for, while等.
標識符長度是由機器上的編譯系統決定的,一般的限制為8字元(註:8字元長度限制是C89標准,C99標准已經擴充長度,其實大部分工業標准都更長)。
標識符對大小寫敏感,即嚴格區分大小寫。一般對變數名用小寫,符號常量命名用大寫。
標識符命名應做到「見名知意」,例如,長度(外語:length),求和、總計(外語:sum),圓周率(外語:pi)。
F. 計算機c語言什麼是函數名
下面定義的一個函數名為name的函數:
void name()
{
}
int name()
{
}
int 為這個函數的返回值類型,如果是void,就無返回
name 就是函數名
name後面的小括弧就是傳入的參數
最後的大括弧裡面的內容就是這個函數的函數體
G. C語言中函數名可以隨便命名的嗎,命名之後能實現哪些功能呢,比如char WQX01
1.
函數名是標識符,可以以字母或下劃線開頭,後接任意數量的字母、下劃線、數字的組合。回
2.
函數的功能由答定義函數時包含的代碼決定。
3.
char WQX01;不是一個函數,它是字元類型的變數。要將WQX01定義成函數,可以這樣做:
void WQX01()
{
printf("你好\n");
}
這個函數的功能就是列印你好到控制台窗口。
H. C語言中函數名怎樣定義
函數名就是一個標識符,以字母或_(下劃線)開始,後接任意數量的字母或數字或_(下劃線)的組合。
因此,A不行,不能包含—,C不行,不能以數字開始,D不行,不能有$符號。
答案是B。
I. C語言常用的函數有哪些
C語言庫函數,常用庫函數有:
1、scanf格式輸入函數
2、printf格式輸出函數
3、systemdos命令函數
4、sort排序
5、main主函數
6、fgets文件讀取字元串函數
7、fputs文件寫入字元串函數
8、fscanf文件格式讀取函數
9、fprintf文件格式寫入函數
10、fopen打開文件函數
11、getchar輸入字元函數
12、putchar輸出字元函數
13、malloc動態申請內存函數
14、free釋放內存函數
15、abs求絕對值數學函數
16、sqrt求平方根數學函數
(9)c語言函數名擴展閱讀
語言組成:
1、數據類型
C的數據類型包括:整型、字元型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。
2、常量與變數
常量其值不可改變,符號常量名通常用大寫。
變數是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字元必須為字母或下劃線,否則為不合法的變數名。變數在編譯時為其分配相應存儲單元。
3、數組
如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,方括內的索引值是從0算起的。
4、指針
如果一個變數聲明時在前面使用 * 號,表明這是個指針型變數。換句話說,該變數存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 *) 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特徵之一。