OSDN Git Service

:ok_hand: update basic.md
authorouuan <y___o___u@126.com>
Wed, 4 Sep 2019 09:04:52 +0000 (17:04 +0800)
committerouuan <y___o___u@126.com>
Wed, 4 Sep 2019 09:04:52 +0000 (17:04 +0800)
docs/lang/basic.md

index 7174911..5cd3afe 100644 (file)
@@ -188,7 +188,7 @@ int/**/x, y;  std::cin
 
 当然,这么做是不被推荐的。
 
-在 **OI Wiki** 中,代码会被格式化。然而,并不是所有人都喜欢这种码风,因此笔者在这里写一下自己的码风,仅供参考
+一种不那么丑陋而与 **OI-Wiki** 要求的码风不同的代码风格
 
 ```cpp
 /* clang-format off */
@@ -229,16 +229,20 @@ int main() {
 #include <iostream>
 #define sum(x, y) x + y
 // 这里应当为 #define sum(x, y) (x + y)
+#define square(x) ((x) * (x))
 
 int main() {
-  std::cout << sum(1, 2) << ' ' << 2 * sum(3, 5);
+  std::cout << sum(1, 2) << ' ' << 2 * sum(3, 5) << std::endl;
   // 输出为 3 11,因为 #define 是文本替换,后面的语句被替换为了 2 * 3 + 5
+  int i = 1;
+  std::cout << square(++i) << ' ' << i;
+  // 输出为 9 3 或 6 3,因为 ++i 被执行了两遍,而同一个语句中出现多个 ++ 是未定义行为
 }
 ```
 
-使用 `#define` 是有风险的,因此应谨慎使用。较为推荐的做法是,常量使用 `const` 限定符声明,宏使用函数代替。
+使ç\94¨ `#define` æ\98¯æ\9c\89é£\8eé\99©ç\9a\84ï¼\88ç\94±äº\8e `#define` ä½\9cç\94¨å\9f\9fæ\98¯æ\95´ä¸ªç¨\8båº\8f导è\87´æ\96\87æ\9c¬è¢«æ\84\8få¤\96å\9c°æ\9b¿æ\8d¢ã\80\81é\94\99误å\9c°ä½¿ç\94¨å®\8fï¼\89ï¼\8cå\9b æ­¤åº\94è°¨æ\85\8e使ç\94¨ã\80\82è¾\83为æ\8e¨è\8d\90ç\9a\84å\81\9aæ³\95æ\98¯ï¼\8c常é\87\8f使ç\94¨ `const` é\99\90å®\9a符声æ\98\8eï¼\8cå®\8f使ç\94¨å\87½æ\95°ä»£æ\9b¿ã\80\82
 
-但是,在 OI 中, `#define` 依然有用武之处:
+ä½\86æ\98¯ï¼\8cå\9c¨ OI ä¸­ï¼\8c `#define` ä¾\9dç\84¶æ\9c\89ç\94¨æ­¦ä¹\8bå¤\84ï¼\88ä¾\9dç\84¶æ\98¯ä¸\8d被æ\8e¨è\8d\90ç\9a\84ï¼\8cä¼\9aé\99\8dä½\8e代ç \81ç\9a\84è§\84è\8c\83æ\80§ï¼\89ï¼\9a
 
-1.   `#define int long long` + `signed main()` 。通常用于避免忘记开 long long 导致的错误。
+1.   `#define int long long` + `signed main()` 。通常用于避免忘记开 long long 导致的错误,或是调试时排除忘开 long long 导致错误的可能性
 2.   `#define For(i, l, r) for (int i = l; i <= r; ++i)` 、 `#define push_back pb` 、 `#define mid ((l + r) / 2)` ,用于减短代码长度。