#define num_a 100#define num_b 25 * 2#define int_div(a, b) a / bfloat c;c = int_div(num_b, num_a); //作者原意是 50/100,實際結果是 25 * 2 / 100, 結果沒錯c = int_div(num_a, num_b); //作者原意是 100/50,實際結果是 100 / 25 * 2,結果錯了。試想,如果我們就按照口訣來操作:#define num_a (100) #define num_b (25 * 2)#define int_div(a, b) ( (a) / (b) )又怎麼會出錯呢? 再舉個例子,比如有個口訣叫做「標頭檔案裡面只宣告不定義」。如果不照這個口訣操作,也會出問題。比如:
max(int a, int b) "a.h"#include "a.h" //include 兩遍後就會重複定義max(),結果出重複定義的錯。int main()你肯能會說,我在.h裡面加點料兒,保證它不重複定義,比如:
_a_h_#define _a_h_int max(int a, int b)#endif //_a_h_okey,現在上面那個case確實搞定了(注2)。但是下面這個就又不行了:
_a_h_#define _a_h_int max(int a, int b)#endif //_a_h_ _b_h_#define _b_h_void foo();#endif //_b_h_ "a.h"void foo() _c_h_#define _c_h_void bar();#endif //_c_h_ "a.h"void bar () "b.h"#include "c.h"int main()分開編譯b.c、c.c和main.c都還可以通過,但是最後一link就玩兒完,因為max()被定義了兩遍。所以如果max()的定義放在a.c檔案裡,而在a.h中只寫max()的宣告就不會有這個問題了。(注3)
綜上所述,我想說的是:如果能通透理解口訣的含義那是最好(達到了心中有劍、見招拆招的境界,每招雖無口訣的形但是卻暗含了口訣的神),如果不能通透理解,不妨先照著口訣做,而不是總跟前人總結口訣對著幹,真是「不聽老人言,吃虧在眼前」。做的多了,也就慢慢悟了,可以細細琢磨口訣的真正含義,總結口訣應用的場景,從而達到避開「聽了老人言,吃虧在後面」的境界了!:p 這就是否定之否定麼?我瞎說的。^_^
小螞蟻過馬路(思維)
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 共 有 n 1 n 1e15 只 小 螞 蟻 準 備 從 城 市 1 穿 梭 到 城 市 k 1 k 1e5 路線是從城市 1 出發,到城市 2,再到城市 3.最後...
在上海 杜拜 深圳過馬路
在上海,經常穿這樣的路口,沒有紅綠燈,或者有交通燈並且自己是綠燈前行,但是有轉彎機動車,機動車小轉彎。大多數情況,車會減速,但並不明確表示他會讓你先走。他在觀望,如果你不減速,你先 如果你怕,站定了,他一踩油門。有時候在馬路中間站定是很危險的事。在杜拜,每次過大小路口,不論有沒有紅綠燈,甚至在沒有斑...
浙江嘉興 「低頭玩手機」過馬路的最高可罰50元
浙江省人大常委會近日批准的 嘉興市文明行為促進條例 進一步明確和細化了文明行為規範,針對 低頭玩手機 過馬路等行為作出了禁止性規定,藉以提公升市民文明素養和社會文明程度。嘉興市於 2011 年被評為第三屆全國文明城市,並於 2015 年 2017 年順利通過複查,實現全國文明城程式設計客棧市 三連冠...