首先,P文件為了保護知識產權設計的一種加密文件,是不能查看的。
運行比較簡單,和調用m文件方法一樣。
下面是一些解釋。
P文件是對應M文件的一種預解析版本(preparsed version)。因為當你第一次執行M文件時,Matlab需要將其解析(parse)一次(第一次執行后的已解析內容會放入內存作第二次執行時使用,即第二次執行時無需再解析),這無形中增加了執行時間。所以我們就預先作解釋,那么以后再使用該M文件時,便會直接執行對應的已解析版本,即P文件。但又因為Matlab的解析速度非常快,一般不用自己作預解析。只有當一些程序要調用到非常多的M文件時,如GUI應用程序時,才會作預解析,以增加以后的調用速度。 
P文件可以用來作保密代碼之用,如果你給別人一個M文件,別人可以打開來看到你所有的代碼和算法。如果你的代碼不想被別人看到,那可以給他P文件。
如何使用.p文件
1.首先,將當前工作目錄切換到.p文件所在的目錄,然后就可以在左側的工作空間窗口看見該目錄所包含的所有文件了,當然包括.p文件啦~
2.由于.p文件是.m文件的預解析版本(不能查看、編輯),顯然.p文件同.m文件一樣都是一個函數體,只不過此時該函數是一個黑盒子罷了。舉例如test.p文件便意味著存在一個已經編好的函數test(如何實現我們不知道),為調用這個函數test,我們需要知道它的參數形式 此時在命令窗口下鍵入help test,即可查看到test函數的參數 然后我們就可以調用啦
如何自己制作.p文件
在Matlab中,我們經常把語句或函數寫在一個M文件里,便于模塊化和代碼重用,比如,寫一個test.m的文件(即自定義一個test函數):
% ———————-
% test.m
a = 1;
b = 2;
% ———————-
這個M語句文件,或:
% ———————-
% test2.m
function a = test2(b)
a = b * 2;
% ———————-
這個M函數。
我們在Command Window里輸入:
>> test
即是等于輸入了
>> a = 1;
>> b = 2;
而輸入:
>> a = test2(2)
a =
     4
便是執行了一個函數。
以上的內容我想大部份人都知道是怎么一回事了,以下說一說P代碼文件。
如果在Command Window里輸入:
>> pcode test
便會在相應test.m的文件夾里產生了test.p。如果這時在Command Window里輸入:
>> test
其實是運行了test.p,而不是test.m。
P文件是對應M文件的一種預解析版本(preparsed version)。因為當你第一次執行M文件時,Matlab需要將其解析(parse)一次(第一次執行后的已解析內容會放入內存作第二次執行時使用,即第二次執行時無需再解析),這無形中增加了執行時間。所以我們就預先作解釋,那么以后再使用該M文件時,便會直接執行對應的已解析版本,即P文件。但又因為Matlab的解析速度非常快,一般不用自己作預解析。只有當一些程序要調用到非常多的M文件時,如GUI應用程序時,才會作預解析,以增加以后的調用速度。
如Matlab的當前目錄(Current Directory)有test.m文件,作預解析后,又有test.p文件。因為P文件的調用優先級比M文件要高,所以當你調用test時,會作優先選擇而調用了test.p。
可以修改test.m的代碼為:
% ———————-
% test.m
a = 3;
b = 4;
% ———————-
再在Command Window里調用test:
>> test
Warning: P-file C:\Program Files\MATLAB71\work\test.p is older than M-file C:\Program Files\MATLAB71\work\test.m.
C:\Program Files\MATLAB71\work\test.p may be obsolete and may need to be regenerated.
Type "help pcode" for information about generating P-files from M-files.
會出現一個Warning,警告你所調用的P文件比同名的M文件要舊,即表示M文件已被修改了。盡管如此,調用的還是舊的P文件,即得出a = 1和 b = 2。
P文件可以用來作保密代碼之用,如果你給別人一個M文件,別人可以打開來看到你所有的代碼和算法。如果你的代碼不想被別人看到,那可以給他P文件。
pcode函數也可以應用在M函數文件。
參考:
http://zmryyj.blog.163.com/blog/static/98450751201132081451490/
http://frenselx.spaces.live.com/blog/cns!3D7342371BEE8602!290.entry
閱讀記錄: read twice, understand completely