本文目錄一覽:
- 1、C語言,關於局部變數重名的問題。
- 2、C局部變數和宏定義重名
- 3、c語言中為什麼函數不能重名?請舉個函數重名的例子,謝謝
- 4、c語言同名函數問題
- 5、如何在C語言編程裡面修改源文件名字
- 6、C語言中同名源文件問題
C語言,關於局部變數重名的問題。
對於這道題你可以由外向內這樣分。
單個文件中分為3個級別的空間:
函數外一個空間:全局變數,具有靜態存儲,從定義出到這個文件結尾範圍的函數可以使用
函數內:自動變數,離開函數就釋放
複合體(大括弧內):自動變數,離開大括弧就自動釋放
說明:大致上就是這3部分,內和外有同名的,內將屏蔽外部變數。但是在同一級上的同名將導致出現多次定義的錯誤
多個文件涉及:只能有一個定義的外部鏈接
(c++的話還有類和名稱空間)
你的第一個例子2個x的定義都是在main函數內的同一級上,重複定義。
第二個例子int x=3隻能在大括弧中生存,而且屏蔽了x=1的那個定義。
C局部變數和宏定義重名
是可以重名的,只不過局部變數可以覆蓋全局的,就是在局部變數的範圍內全局變數不起作用
局部會屏蔽全局。要用全局變數,需要使用 “::” ;
局部變數可以與全局變數同名,在函數內引用這個變數時,會用到同名的局部變數,而不會用到全局變數。對於有些
編譯器而言,在同一個函數內可以定義多個同名的局部變數,比如在兩個循環體內都定義一個同名的局部變數,而那
個局部變數的作用域就在那個循環體內。
擴展資料
C語言中全局變數和局部變數的區別是他們的作用域不同,全局變數是整個C程序,局部變數是定義所在的大括弧內,同一個作用域內不能定義兩個同類型同名的變數,因為編譯會報錯。
由1個或者多個C文件組成的工程中,可以定義和全局變數同名同類的局部變數,但是不提倡這樣使用,因為此時變數的值和變數被調用的位置有關係。
使用全局變數時,需要先用extern關鍵字聲明,全局函數也是用相同的關鍵字。
c語言中為什麼函數不能重名?請舉個函數重名的例子,謝謝
可以重名,不過函數的參數類型或數量要不一致,例子如下:
//遞歸求階乘
int calc(int num){
if(num==0){
return 0;
}else{
return num*calc(num-1);
}
}
//遞歸求任意一個整數的整數次方
int calc(int num,int count){
if(num==0){
return 0;
}else if(count == 0){
return 1;
}else{
return num*calc(num,count-1);
}
}
這兩個函數方法名稱完全一樣,但是參數不一樣,這種做法有一個叫法,叫函數的重載
c語言同名函數問題
這不是兩個函數,這是一個函數,extern “C” int listid(int id, OUT *);
中的extren通知編譯器int listid(int id, OUT *)不在本源代碼中實現,
“c”通知編譯器用C調用方式調用在另外的一個源程序的函數,
C語言默認的調用方式就是C調用 C++就不同了,,所以最好加個”c”
另:調用方式規定了調用的時候輸入參數的順序和函數返回後輸入參數佔用的空間由調用程序釋放還是由函數釋放。這東西不一定要太懂,知道用”c”去考慮調用方式就可以了.
參數不同也是可以的,但是執行一定會有錯誤,而且應該不能出現同名不同參數的的令一個函數。要不連接的時候就找不到正確的函數。
如何在C語言編程裡面修改源文件名字
C修改文件名:使用rename函數。
rename函數:功能描述: 改變文件的名稱或者位置,如果目標已存在,將被自動覆蓋。 用法: #include stdio.hint rename(const char *oldpath, const char *newpath);參數:
oldpath:舊文件名。 newpath:新文件名或者新位置。
具體可以分以下2種情況:
1、修改單個文件
直接使用rename即可。
2、批量修改文件(如:按一定規則修改某目錄下所有文件)
需要使用opendir遍歷目錄,然後修改該目錄下文件。下面提供一個簡單的例子。
void ModFilesName(const char *pcszPath)
{
char szPathFile[1024] = {0}; //路徑+文件名
DIR *dir_p;
struct dirent *direntp;
struct stat entryInfo;
//文件目錄不存在,則創建
if(stat(pcszPath, entryInfo) 0)
{
printf(“Auto create folder:%s\n”, pcszPath);
mkdir(pcszPath, 0755);
}
if ((dir_p = opendir (pcszPath)) == NULL)
{
return;
}
while ((direntp = readdir (dir_p)) != NULL)
{
//組合完整路徑
sprintf(szPathFile, “%s/%s”, pcszPath, direntp-d_name);
//判斷文件是否是目錄
if(lstat(szPathFile, entryInfo) == 0)
{
if(S_ISDIR(entryInfo.st_mode))
{
continue; //忽略目錄
}
rename(szPathFile, 你要修改成的文件名);
}
} // while ( …
closedir (dir_p);
}
推薦一片文章:
希望能幫助到你,你的好評是我前進的動力!謝謝!
C語言中同名源文件問題
這是屬於自定義函數和函數頭
.c文件是由工程管理系統加入的,加入的時候要選擇是哪個路徑中的.c,這個不會混淆
.h文件由於事自定義的頭,因此不用尖括弧引用,一般用雙引號;自定義頭文件路徑可以在工程設置中修改,也可以這樣寫(假定自定義頭文件目錄為c:\dir0,實際源文件目錄為c:\dir0\dir1和c:\dir0\dir2):#include “dir1\a.h” 也可以寫絕對路徑 #include “c:\dir0\dir1\a.h”
原創文章,作者:EUEY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134983.html