導航:首頁 > 源碼編譯 > 管道函數使用時函數不能編譯嗎

管道函數使用時函數不能編譯嗎

發布時間:2024-03-21 03:25:04

① 每個函數都可以被單獨編譯對嗎

A、main函數是不能被任何函數調用的,所以a錯了
B、函數可以單獨編譯,每個函數都能單獨寫成一個文件,所以B對的
C、函數都要通過main函數的調用才能正確的運行,main函數是一個程序的唯一入口
D、函數是不可以嵌套使用的

② oracle 自定義函數,調用時報「程序包或函數無效」

你的這個函數編譯大概不能通過吧: lxi_split函數已經將返回值定義為TA_lxi表對象,TA_lxi表對象中的元素為TY_lxi類型的,但是在做pipe row給返回表增加元素時使用的又是字元串,這明顯與定義不符合,編譯會有錯誤的。
該函數沒有編譯通過,當然在調用時會提示「程序包或函數不存在」,因為該函數還沒有建立。
應該定義一個TY_lxi變數,例如:
v_data TY_lxi := TY_lxi(''); -- 這里括弧裡面的值要隨TY_lxi類型而定
然後,在循環中將字元串賦給該變數的N2成員: v_data.N2 := v_str
接下來是把該變數加入返回表: pipe row(v_data);

③ C++的函數前向聲明為何不能編譯器自己提前掃描變更函數時向前聲明帶來的維護難度

函數聲明的作用是什麼?
函數聲明的目的是向編譯器引入一個函數名字以及函數類型,這個主要用於類型檢查和增加可讀性。

為什麼要使用函數聲明?
因為函數可能在別的地方定義(如:靜態庫文件、動態鏈接庫、另一個編譯單元里),如果沒有函數聲明,編譯器在編譯的時候就只能根據函數調用推斷函數的類型,由於C++存在的隱式轉換和函數重載,根據函數調用的參數來推斷函數的類型是不夠的。
你說的編譯器提前掃描不可行,因為C++的函數可以定義在其他地方,可能函數體已經編譯成可執行代碼了(動態鏈接庫中的函數就是這中情況),其次編譯器一次只能處理一個編譯單元(一個文件),對於其他編譯單元定義的函數,編譯器管不了,所以你說的這種方法不適用C++。

看看下面的例子:
假定f函數的定義在某個庫文件里,並且函數類型為 double f( double, double )

f( 3, 4 );
f( 3.0f, 4.0 );

假如允許函數不聲明直接調用,編譯器只能根據調用語句的參數列表的類型來確定函數的類型。對於這個例子:編譯器可以認為f函數存在兩個版本: void f( int, int ) 和 void f( float, double ),編譯器也可以認為f函數只有一個版本: void f( float, double )。不管哪種推斷 ,連接的時候都會出現連接錯誤。 所以你說的方法不可行。

為什麼其他語言可以不聲明直接使用?

其他語言(比如java和C++)可以不用聲明直接使用,這是因為這些語言是解釋型的語言。對於解釋型的語言,代碼首先經過編譯器簡單編譯成某個中間語言,在運行的時候由解釋器「一行一行」翻譯。這種語言編譯後的代碼包含很多的信息,使用一些反編譯軟體幾乎可以還原源代碼。由於編譯器認識中間語言,所以對於任何未聲明或者未定義的實體的引用,編譯器都能到編譯好的代碼中去尋找。

為什麼C語言允許函數不聲明直接使用?
C語言的函數不允許函數重載,所以一個函數名字一定對於一個函數定義,並且C語言的函數符號一般是一個下劃線+函數名(比如上面的函數f的函數符號就是 _f ),沒有上面提到的問題,編譯完成後C語言的連接器就會去尋找函數符號 _f的定義,如果找到生成可執行文件,如果找不到則報錯。所以C語言運行不聲明函數,但是貌似最近的C語言標准已經取消了這個規則(C語言的標准我不是很關注,你想知道就自己去看看C語言的最新標准),主要的原因還是這種語法不安全。

使用前進行聲明是個好習慣,可以提高閱讀性,哪些不聲明直接使用的代碼,容易使人迷惑。
以上是我個人的看法有問題可以提出。

閱讀全文

與管道函數使用時函數不能編譯嗎相關的資料

熱點內容
個人所得稅app的設置在哪裡 瀏覽:134
linux空值 瀏覽:137
剪力牆鋼筋用不用加密區 瀏覽:978
哪裡app可以上高中生物課 瀏覽:472
cad粗糙度快捷鍵命令大全 瀏覽:521
騰訊雲伺服器無法運行軟體 瀏覽:342
奔跑吧哪個app 瀏覽:97
哪個app聽音樂最好 瀏覽:281
考研英語2真題pdf 瀏覽:699
煙台編程積木教育環境好不好 瀏覽:214
python優秀代碼 瀏覽:620
androidtop命令 瀏覽:455
你平時怎麼排解壓力 瀏覽:68
表格中的文件夾怎樣設置 瀏覽:476
em78單片機 瀏覽:960
splitjava空格 瀏覽:248
電腦怎麼谷歌伺服器地址 瀏覽:515
nx自定義工具啟動宏命令 瀏覽:101
程序員怎麼解決無法訪問互聯網 瀏覽:303
java訪問本地文件 瀏覽:747