2015-04-08 46 views
0

我已經在彙編語言中聲明瞭一個函數tolower,並且從包含標準庫的C代碼調用它。我想知道爲什麼這個工作正常,沒有給出任何錯誤,因爲現在有兩個具有相同名稱的函數。從C調用匯編函數C

我的C代碼:

#include <stdio.h> 
#include <string.h> 

int main() { 
char in0[] = "something"; 
char in1[] = "SomethinG"; 
char in2[] = "S0mething"; 

int i = 0; 
while (in0[i]) { 
    in0[i] = tolower(in0[i]); 
    in1[i] = tolower(in1[i]); 
    in2[i] = tolower(in2[i]); 
    i++; 
} 
return 0; 
} 

我不能把我的彙編代碼,因爲它來分配下。我有全球性的tolower功能。

.section .data 
.section .text 
.globl _start 
.globl tolower           
.type tolower, @function 
tolower: 

我已經用gcc cfile.c assfile.s

+0

請添加您的代碼!很可能你現在已經有'_tolower()'和'tolower()'。這當然,如果你記得使彙編函數全球... –

+0

我同意,你可以添加一些代碼,請@kriti Joshi – BMac

+0

我認爲頭文件:ctype.h包含一個宏,而不是一個函數原型爲tolower ()操作。 – user3629249

回答

0

你確定你調用從C代碼彙編版本,而不是標準庫版本編譯?彙編代碼是如何定義的?它是C項目中的模塊(.asm),內聯,靜態.DLL庫還是.DEF/OBJ導入?您使用的是什麼編譯器,彙編器(和IDE,OS?)?目前沒有足夠的信息來產生具體的答案,但是如果沒有什麼能夠將C的彙編函數「定義」爲C,那麼C就可以理解,那麼它將忽略任何命名衝突。這在技術上也不是一個錯誤;相同的函數名稱就像在加拿大和歐洲有兩個相同的地址(123_Anystreet)。完全可能且允許,但C通常不允許它(和彙編器)。

+1

我真的不明白包含「沒有足夠的信息來給出答案」的答案嗎? –