เขียนโปรแกรมที่ทำให้ 2 +2 = 5 [ปิด]


393

เขียนโปรแกรมที่ดูเหมือนจะเพิ่มหมายเลข 2 และ 2 และผลลัพธ์ 5 นี่คือการแข่งขันที่ไม่ได้รับการเปิดเผย

โปรแกรมของคุณไม่สามารถส่งออกข้อผิดพลาดใด ๆ ระวังช่องโหว่ของหน่วยความจำ! อินพุตเป็นทางเลือก

การนิยามใหม่ 2 + 2 เป็น 5 ไม่ใช่ความคิดสร้างสรรค์มาก! อย่าคิดอีกครั้งลองอย่างอื่น


48
นี่คือคำถามในหนังสือ "1984" โดย George Orwelll
bacchusbeale

97
ทำไมสิ่งนี้แฝง สองบวกสองคือห้า
Geobits

79
ที่นั่น! เป็น! FOUR! ไฟ!
Nick T

105
@Geobits - ฉันเห็นด้วย: 2 + 2 = 5 คุณสามารถดูได้ในเครื่องคิดเลขนี้
MT0

47
echo "2+2=5";
user3459110

คำตอบ:


669

ชวา

การสะท้อนกลับเป็นวิธีที่ถูกต้องที่จะไปกับการใช้ Java ในทางที่ผิด แต่คุณต้องลึกซึ้งยิ่งกว่าการปรับแต่งค่าบางอย่าง

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws Exception {
        Class cache = Integer.class.getDeclaredClasses()[0];
        Field c = cache.getDeclaredField("cache");
        c.setAccessible(true);
        Integer[] array = (Integer[]) c.get(cache);
        array[132] = array[133];

        System.out.printf("%d",2 + 2);
    }
}

เอาท์พุท:

5

คำอธิบาย:

คุณต้องเปลี่ยนมันให้ลึกกว่าปกติที่คุณจะสามารถเข้าถึงได้ ทราบว่านี้ถูกออกแบบมาสำหรับ Java 6 ไม่มีพารามิเตอร์ขี้ขลาดผ่านใน JVM ที่อาจจะเปลี่ยนIntegerCache

ส่วนลึกภายในคลาส Integer คือ Flyweight of Integers นี่คืออาร์เรย์ของจำนวนเต็มตั้งแต่ −128 ถึง +127 cache[132]เป็นจุดที่ 4 ตามปกติจะเป็น ตั้งค่าเป็น 5

คำเตือน:การทำเช่นนี้ในรหัสจริงจะทำให้คนมากไม่มีความสุข

สาธิตโค้ดบน ideone


5
คิดว่าคนนี้เร็วที่สุดเท่าที่ผมเห็นคำถาม :)
Octavia Togami

306
ที่. คือ. ชั่วร้าย ชั่วร้ายอย่างแน่นอน +1
John Dvorak

75
@JanDvorak ในการแชทขอแนะนำให้ Integer[] array = (Integer[]) c.get(cache); fisherYatesShuffle(array); ลองจินตนาการดูว่ามีหลายสิ่งที่จะพัง ...

30
คำตอบเช่นนี้ทำให้ฉันรักไซต์นี้มากกว่า SO
Songo

35
zomg, คำตอบ java ไม่เคยได้รับคะแนนสูงสุด! +1 สำหรับการนำจาวาไป :) ด้านบน
Cruncher

297

Haskell

ฉันชอบที่คุณจะสามารถโยนทุกสิ่งที่ gci ออกมาได้

λ> let 2+2=5 in 2+2
5

36
อะไรlet 2+2=5 in 5+5ทำอย่างไร ಠ_ಠ
John Dvorak

22
@JanDvorak Non-exhaustive patterns in function +- ฉันกำลังกำหนดฟังก์ชั่นใหม่ (+) ที่นี่และถ้าฉันเสียบอะไรที่2+2มันจะไม่เกิดข้อผิดพลาดเพราะฉันไม่เคยกำหนดสิ่งที่ควรจะเกิดขึ้นในกรณีนี้
Flonk

27
@SHiNKiROU shadow, not redine
John Dvorak

96
ที่เกือบจะดูเหมือน: "และพระเจ้าตรัสว่าให้ 2 + 2 = 5 ใน 2 + 2"))
OutFall

11
@ user3217013 เรียนรู้ Haskell มันดีต่อหัวใจของคุณ
รองเท้า

294

C

เคล็ดลับที่ค่อนข้างถูก แต่ฉันแน่ใจว่าฉันจะดักคนส่วนใหญ่ของคุณ

int main() {
    int a = 2 + 2;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     a++;
    printf("%d",a);
    return 0;
}

ลองที่นี่

เลื่อนรหัสไปทางขวา
ฉันไม่แน่ใจเกี่ยวกับ Windows / Linux แต่ใน OSX แถบเลื่อนจะมองไม่เห็น
อย่างไรก็ตามนี่เป็นเหตุผลที่ดีในการเปิดใช้งาน "การสร้างภาพอวกาศ" ในเครื่องมือแก้ไขรหัสที่คุณชื่นชอบ


96
แถบเลื่อนสามารถมองเห็นได้ใน Chromium แต่ใครสนใจเป็นพิเศษในตอนแรก :)
Ruslan

172
เพื่อสร้างความสับสนให้กับผู้คนคุณอาจเพิ่มบรรทัดความคิดเห็นที่ยาวพอที่จะ "อธิบาย" การมีอยู่ของแถบเลื่อน แต่น่าเบื่อพอที่ไม่มีใครสนใจ (อ่านเพื่อเลื่อน) อ่าน
Hagen von Eitzen

22
ใน OS X การมองเห็นแถบเลื่อนโดยค่าเริ่มต้นขึ้นอยู่กับว่าเมาส์เชื่อมต่ออยู่หรือไม่ หากมีเพียงทัชแพดแถบเลื่อนจะซ้อนทับและหายไปเมื่อไม่ได้ใช้งาน หากมีการเชื่อมต่อเมาส์แถบเลื่อนจะขโมยพื้นที่จากกล่องข้อความและสามารถมองเห็นได้เสมอ คุณสามารถทดสอบสิ่งนี้ได้โดยถอดปลั๊กและเสียบเมาส์ USB เข้ากับ MacBook สามารถกำหนดค่านี้ได้ในการตั้งค่าระบบแน่นอน
Andrea

49
เคลฟเวอร์ แต่ในมือถือก็แค่ wordwraps :)
โลแกน

31
นี่เป็นครั้งเดียวที่การเลื่อนหน้าต่างรหัส SE ไม่ได้ทำให้ฉันต้องการทำลายนิ้วมือของใครบางคน
ObscureRobot

184

GolfScript

4:echo(2+2);

5พิมพ์

แน่นอน GolfScript มีไวยากรณ์ที่แตกต่างอย่างชัดเจนจากภาษาอื่น ๆ โปรแกรมนี้เพิ่งเกิดขึ้นกับสิ่งที่พื้นฐานหรือ C-ish

4  - ใส่หมายเลข 4 ลงในสแต็ก เนื้อหาสแต็ค: 4
:echo- บันทึกค่าที่ด้านบนของสแต็กไปยังตัวแปร echo เนื้อหาสแต็ค: 4
(  - ลดค่าที่ด้านบนของสแต็คโดย 1 เนื้อหาสแต็ค: 3
2  - ใส่หมายเลข 2 ที่ด้านบนของสแต็ก เนื้อหาสแต็ค: 3 2
+  - เพิ่มตัวเลขสองตัวที่ด้านบนของสแต็ก เนื้อหาสแต็ค: 5
2  - ใส่หมายเลข 2 ที่ด้านบนของสแต็ก เนื้อหาสแต็ค: 5 2
)  - เพิ่มค่าที่ด้านบนของสแต็กโดย 1 เนื้อหาสแต็ค: 5 3
;  - ลบองค์ประกอบด้านบนออกจากสแต็ก เนื้อหาสแต็ค: 5

GolfScript จะพิมพ์สิ่งที่เหลืออยู่ในสแต็กตามค่าเริ่มต้นหลังจากการดำเนินการเสร็จสิ้น


3
คุณช่วยอธิบายให้คนที่ไม่พูด GolfScript ได้มั้ย
MadTux

1
@ MadTux ที่นี่คุณไป
aaaaaaaaaaaa

1
ขอบคุณ (ฉันจะลงคะแนนในภายหลังเพราะฉันถึงขีด จำกัด รายวันแล้วนี่คือเบียร์)
MadTux

5
เรียบง่ายและโกงฉันรักมัน +1
seequ

9
ฉันชอบมันเพราะมันดูเหมือนจะไม่หลอกคุณด้วยคณิตศาสตร์หรือความหมายมันดูเหมือนจะตรงไปตรงมาและยัง 5 ^^
dwana

145

ชวา

ต้องปัดเศษคู่ของคุณเป็นคน

public class TwoPlusTwo {
  public static void main(String... args) {
    double two = two();
    System.out.format("Variable two = %.15f%n", two);
    double four = Math.ceil(two + two); // round just in case
    System.out.format("two + two = %.15f%n", four);
  }

  // 20 * .1 = 2
  private static double two() {
    double two = 0;
    for(int i = 0; i < 20; i++) {
      two += .1;
    }
    return two;
  }
}

เอาท์พุท:

Variable two = 2.000000000000000
two + two = 5.000000000000000

คำอธิบาย:

ไม่จริงจังคุณต้องปัดเศษคู่ของคุณ 15 หลักไม่เพียงพอที่จะแสดงว่าtwo()วิธีการผลิตจริง2.0000000000000004(16 ก็เพียงพอแล้ว)

ในการแทนเลขฐานสิบหกของตัวเลขมีความแตกต่างเพียง 1 บิต (ระหว่าง4000000000000001และ4000000000000000) ... ซึ่งเพียงพอที่จะทำให้Math.ceilวิธีการคืนค่า 5 ไม่ใช่ 4


61
Math.ceil(two + two); // round just in caseฉันเห็นสิ่งที่คุณทำที่นั่น
ทิมเอส

17
ทำให้ทั้งฟังก์ชั่นและตัวแปรมีชื่อเหมือนกัน ... ว้าว
กำหนดค่า

107
@configurator twoว่าไม่มีอะไรไม่มีแม้แต่ระดับที่ชื่อว่า java เกรดการผลิตอยู่Two two = Two.two.two();กับ Two.two เป็นประเภท TwoFactory
Jannis Froese

36
Two.Infinity.And.Beyond ()
CincauHangus

7
@TimS ฉันจะทำสิ่งที่คุณทำไปแล้ว
รหัส Eagle

135

บีบีซีขั้นพื้นฐาน

แก้ไข: สำหรับ Andrea Faulds และ Squeamish Ossifrage เป็นรุ่นที่น่าเชื่อถือยิ่งขึ้นโดยใช้ล่ามที่แตกต่างกัน: http://sourceforge.net/projects/napoleonbrandy/

  MODE 6
  VDU 23,52,254,192,252,6,6,198,124,0
  PRINT
  PRINT "2+2=";2+2
  PRINT "2+3=";2+3

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นการพิมพ์หมายเลข 4 แต่จะVDU 23กำหนดแบบอักษรใหม่สำหรับ ASCII 52 เพื่อให้ดูเหมือน 5 แทน 4 หน้าจอโหมด 6 ถูกเลือกด้วยเหตุผลด้านสุนทรียภาพ (ตัวอักษรที่มีขนาดเหมาะสม)

ภาพต้นฉบับที่ใช้จำลองที่http://bbcbasic.co.uk/bbcwin/bbcwin.html (ด้วยรหัสที่แตกต่างกันเล็กน้อย) สามารถเห็นได้ในประวัติการแก้ไข


8
แบบอักษรเหล่านั้นดูแตกต่างออกไป คุณคิดว่าคุณสามารถใช้แบบอักษรที่ถูกต้องได้หรือไม่?
Andrea

@AndreaFaulds ฉันใช้โปรแกรมจำลองจากbbcbasic.co.uk/bbcwin/bbcwin.html รองรับการกำหนดตัวอักษรของ BBC พื้นฐานดั้งเดิมในตาราง 8x8 แต่ตัวอักษรเริ่มต้นของอีมูเลเตอร์นั้นมีความละเอียดสูงกว่า 8x8 อย่างชัดเจน ดังนั้นฉันอาจจะทำได้ดีกว่านี้ แต่มันจะไม่สมบูรณ์แบบ ฉันคิดว่าฉันสามารถกำหนดแบบอักษรใหม่สำหรับทั้ง 5 และ 4 ได้จากนั้นพวกเขาก็จะเหมือนกัน
เลเวลริเวอร์เซนต์

5
@AndreaFaulds คำถามไม่ได้บอกว่าผลลัพธ์ควรแยกไม่ออกจาก 5s อื่น ๆ ฉันคิดว่านี่เป็นคุณสมบัติจริง 2+3=5และ2+2=5'
Ben Jackson

1
สิ่งนี้ตรงกับแบบอักษรดั้งเดิมใน BBC Micro:VDU 23,52,126,96,124,6,6,102,60,0
squeamish ossifrage

@squeamishossifrage ขอบคุณสำหรับข้อมูล มันไม่ตรงกับแบบอักษรในอีมูเลเตอร์ ตัวอย่างของคุณสูง 7 พิกเซลเหมือนของฉัน นอกจากนี้ยังมีศูนย์ที่ด้านล่างเช่นเดียวกับฉันในขณะที่ฉันต้องการเลื่อนมันลงเล็กน้อย (เช่นมีศูนย์ที่ด้านบนแทนด้านล่าง) ความแตกต่างที่สำคัญคือฉันมี 126,64 ในขณะที่คุณมี 126,96 และคุณมี 6 บางอย่างแทน 2 ของฉัน นั่นเป็นเพราะตัวอักษร BBC ดั้งเดิมมีเส้นแนวตั้งหนาดังนั้นจึงสามารถอ่านได้ง่ายในรูปแบบคอลัมน์ 80 บนหน้าจอทีวีมาตรฐาน
ระดับ River St

134

brainfuck

+++++           +++++
    +               +    
    +     +         +     +++++
+++++    +++    +++++     
+         +     +         +++++
+               +
+++++           +++++.

เอาท์พุท:

5

ลองมันนี่

ฉันรู้ว่าสิ่งนี้อาจฟังดูง่ายไปหน่อย แต่ฉันพยายามสร้างสรรค์ตามที่แนะนำในโพสต์ดั้งเดิม


1
ฉันไม่รู้ brainfuck มันใช้เวลาสองสามนาทีกว่าจะคิดออก ASCII 53 ใช่ไหม
ระดับแม่น้ำเซนต์

4
ตราบใดที่คุณมีสิ่งที่+++++.คุณสามารถวาด
Eduard Florinescu

1
@ สตีฟเวอร์ริลล์: ใช่คุณพูดถูก (และนี่เป็นวิธีเดียวในการแสดงผลอักขระ ASCII ใน BF)
tigrou


105

ทุบตี

ตั้งแต่นี้เป็นการฉันเดาว่าฉันควรใช้วิธียืดยาว ...

สำหรับผู้ที่ไม่รู้จัก Bash: $((...expr...))เป็นไวยากรณ์ในการประเมินนิพจน์ทางคณิตศาสตร์ $(bc<<<...expr...)ทำสิ่งเดียวกันโดยใช้bcเครื่องคิดเลขบรรทัดคำสั่ง

v=2                     #v is 2
v+=2                    #v is 4
v=$(($v*5))             #v is 20
v=$(($v-16))            #v is 4
v=$(bc<<<"sqrt($v)+2")  #v is 4 (sqrt(4) is 2)
v=$(bc<<<"$v/4+3")      #v is 4 (4/4 = 1)
echo '2+2=' $v          #So v is 4...?

เอาท์พุต

2+2= 5

คำอธิบาย

บรรทัดที่สองเชื่อม v และ 2 เข้าด้วยกันแทนการเพิ่มเพื่อทำให้ 22.
คำอธิบายที่แท้จริง:
v=2 #v is 2 v+=2 #v is 22 v=$(($v*5)) #v is 110 v=$(($v-16)) #v is 94 v=$(bc<<<"sqrt($v)+2") #v is 11 (by default, bc rounds to integers) v=$(bc<<<"$v/4+3") #v is 5 (11/4 is 2 with rounding) echo '2+2=' $v #TADAAAM


8
เคล็ดลับคณิตศาสตร์ที่ดีเกิดขึ้นที่นั่น!
tomsmeding

5
@tomsmeding มันสนุกมาก แต่ฉันก็รู้ว่าฉันใส่15แทนที่จะเป็น16บรรทัดที่ 4 แต่โชคดีที่มันยังทำงานได้เพราะbcการปัดเศษ

2
ดูว่าคุณชอบรูปลักษณ์ของรูปแบบนี้ซึ่งยังเป็นทุบตีที่ถูกต้อง (ช่วยลดสัญญาณดอลลาร์ช่วยให้ช่องว่างรอบเครื่องหมายเท่ากับและช่วยให้ผู้ประกอบการที่ได้รับมอบหมายรวม): ((v = v * 5))หรือ((v *= 5))
เดนนิสวิลเลียมสัน

2
เป็นคนดี แต่ฉันเห็น+=สิ่งนั้นทันที
nyuszika7h

2
@ มาใหม่ใช่มี สองบรรทัดแรก ( v=2และv+=2): เพื่อคนที่ไม่คุ้นเคยกับการจัดการตัวแปรทุบตีที่จะเทียบเท่ากับ2+2แต่ในความเป็นจริงคือ"2"+"2" "22"ความคิดเห็นอื่น ๆ ในรหัสนั้นผิดเนื่องจากสาเหตุนี้ ฉันรู้ว่าไม่ใช่ทุกคนที่พบสิ่งนี้ตลก

101

หลาม

แรงบันดาลใจจากคำตอบ Java:

>>> patch = '\x312\x2D7'
>>> import ctypes;ctypes.c_int8.from_address(id(len(patch))+8).value=eval(patch)
>>> 2 + 2
5

เช่นเดียวกับ Java, CPython ใช้ตำแหน่งหน่วยความจำเดียวกันสำหรับสำเนาของจำนวนเต็มเล็ก ๆ สองสามตัวแรก (0-255 หากหน่วยความจำทำหน้าที่) สิ่งนี้จะเข้าไปและแก้ไขตำแหน่งหน่วยความจำctypesนั้นโดยตรง patchเป็นเพียง obfuscated "12-7"สตริงที่มีlen4 ซึ่งevalเป็น 5

รุ่นที่สับสนมากขึ้น

exec("\x66\x72\x6f\x6d\x20c\x74\x79\x70e\x73\x20\x69\x6d\x70\
\x6f\x72\x74\x20c\x5f\x69\x6e\x748\x20a\x73\x20x\x3bf\x72\x6f\
\x6d\x20\x73\x74\x72\x75c\x74\x20\x69\x6d\x70\x6f\x72\x74\x20\
ca\x6cc\x73\x69\x7ae\x20a\x73\x20x0\x3bx\x2ef\x72\x6f\x6d\x5f\
a\x64\x64\x72e\x73\x73\x28\x69\x64\x284\x29\x2bx0\x28\x27\x50\
\x50\x27\x29\x29\x2e\x76a\x6c\x75e\x3d5")

เกิน 2 + 2

ดังที่ OP กล่าวไว้ 2 + 2 นั้นน่าเบื่อ ดังนั้นนี่คือบางส่วนที่สะอาดกว่า, หลายแพลตฟอร์ม, โค้ดความกว้างหลายด้านสำหรับการล่วงละเมิดกาม

from __future__ import division, print_function
import struct
import ctypes
import random

# Py 2.7 PyIntObject:
# - PyObject_HEAD
#     - PyObject_HEAD_EXTRA [usually nothing unless compiled with DEBUG]
#     - (Py_ssize_t) ob_refcnt
#     - (_typeobject) *ob_type
# - (long) ob_ival

# two platform-sized (32/64-bit) ints (ob_refcnt and *ob_type from above)
offset = struct.calcsize('PP')

num = 60
nums = list(range(num))
addresses = [id(x) + offset for x in nums]
random.shuffle(nums)

for a, n in zip(addresses, nums):
    ctypes.c_ssize_t.from_address(a).value = n

print('2 + 2 =', 2+2)
print('9 - 4 =', 9-4)
print('5 * 6 =', 5*6)
print('1 / 0 =\n', 1/0)
print('(1 + 2) + 3 = ', (1+2)+3)
print('1 + (2 + 3) = ', 1+(2+3))
print('(2 + 3) + 1 = ', (2+3)+1)
print('2 + (3 + 1) = ', 2+(3+1))

ทำงานกับ Python 2.7 ... ละเว้นบรรทัดนั้นในตอนท้าย ทำงานได้ใน Windows 64- บิตและ Ubuntu 32- บิตทั้งสองระบบที่ฉันเข้าถึงได้ง่าย

$ python awful.py 
2 + 2 = 24
9 - 4 = 49
5 * 6 = 55
1 / 0 = 0.76

(1 + 2) + 3 =  50
1 + (2 + 3) =  68
(2 + 3) + 1 =  50
2 + (3 + 1) =  61
Segmentation fault (core dumped)

แปลกใจที่เราสามารถแบ่งเชื่อมโยงทรัพย์สินของนอกจากนี้ที่ ( + ) + C = + ( B + C ) เท่าที่เห็นในครั้งที่ 1 และครั้งที่ 2 สาย แต่อย่างลึกลับเรายังแบ่งสมบัติการสลับที่ (ที่+ = b + a ; บรรทัดที่ 2 และ 3) ฉันสงสัยว่าล่าม Python ไม่สนใจวงเล็บที่ฟุ่มเฟือยรอบการแสดงออกเพิ่มเติมหรือไม่1+2+3


96
ใช่เราทุกคนไม่สนใจ segfaults อย่างแน่นอน ...

10
เป็นมูลค่าการกล่าวขวัญว่านี่ไม่ใช่เคล็ดลับ Python และเฉพาะเจาะจงกับการใช้ C ของ Python เท่านั้น
xApple

1
@NickT Ah! ถูก ฉันอยู่ภายใต้ความประทับใจที่คุณได้ลองใช้ต้นฉบับภายใต้หน้าต่าง 64 บิตเดียวกันตั้งค่าอูบุนตู 32- บิต
DavidJFelix

22
exec('\x66\x72\x6f\x6d\x20\x63\x74\x79\ \x70\x65\x73\x20\x69\x6d\x70\x6f\ \x72\x74\x20\x63\x5f\x69\x6e\x74\ \x38\x3b\x20\x69\x6d\x70\x6f\x72\ \x74\x20\x73\x74\x72\x75\x63\x74\ \x3b\x20\x63\x5f\x69\x6e\x74\x38\ \x2e\x66\x72\x6f\x6d\x5f\x61\x64\ \x64\x72\x65\x73\x73\x28\x69\x64\ \x28\x34\x29\x20\x2b\x20\x73\x74\ \x72\x75\x63\x74\x2e\x63\x61\x6c\ \x63\x73\x69\x7a\x65\x28\x27\x50\ \x50\x27\x29\x29\x2e\x76\x61\x6c\ \x75\x65\x3d\x35')เป็นรุ่นที่แก้ไขครั้งแรก ฉันทำสิ่งนี้เพื่อให้ฉันสามารถวางลงใน $ PYTHONSTARTUP ใน / etc / profile เป็นทีมสีแดงในการแข่งขันแฮ็ค
DavidJFelix

2
ใช่. Sidenote ดูเหมือนว่า 1, 0 และ -1 เป็นตัวเลขบางส่วนที่หลามได้แบ่งทันที ฉันคิดว่าสิ่งเหล่านี้จะเป็นสิ่งที่เลวร้ายที่สุดสำหรับการเลิกพฤติกรรมของโปรแกรมหลาม อาจเป็นไปได้ที่จะใช้fuckitpyเพื่อเก็บข้อผิดพลาดเหล่านี้
DavidJFelix

86

JavaScript:

g = function () {
  H = 3
  return H + H
}

f = function () {
  Η = 2
  return Η + H
}

// 3 + 3 = 6
alert(g())
// 2 + 2 = 5
alert(f())

ตรวจสอบได้ที่http://jsfiddle.net/qhRJY/

ทั้ง H (ตัวอักษรตัวใหญ่ละติน h) และΗ (ตัวอักษรตัวใหญ่พิมพ์ใหญ่กรีก) ถูกตั้งค่าเป็นขอบเขตทั่วโลกเพราะพวกเขาไม่ได้กำหนดเป็นท้องถิ่นกับฟังก์ชั่นที่มีคำหลัก var ในขณะที่พวกเขามีลักษณะคล้ายกันพวกเขาเป็น 2 ตัวแปรที่แตกต่างกันและมี 2 ค่า การใช้ Ctrl + F ในเบราว์เซอร์ของคุณคุณจะพบว่าΗ (eta) ปรากฏขึ้นน้อยกว่า H (h) ในหน้านี้


4
@ Sam ถึงแม้ว่าทั้งสองจะมีหน้าตาเหมือนกัน แต่ในความเป็นจริงแล้วตัวละครทั้งสองแตกต่างกันโดยสิ้นเชิง ใน Unicode อาจมีอักขระที่แตกต่างกันซึ่งมีลักษณะเหมือนกัน แต่มีจุดรหัสต่างกัน ในกรณีเฉพาะนี้ อื่น ๆ "H" เป็นจริงอักษรกรีกEta
d3dave

79
ใช้ homoglyphs ไป "สับสน" ผู้อ่านอยู่ในขณะนี้อย่างเป็นทางการไม่ตลก
John Dvorak

29
homoglyphs กลายเป็นเรื่องตลกเมื่อรวมกับตัวแปรทั่วโลกที่ไร้สาระของจาวาสคริปต์
Konstantin Weitz

3
มันไม่ใช่ "Unicode Ηตัวละคร" มันคือละติน H และ Greek Eta (Η)
phyzome

4
@Vortico hmm ... คุณต้องการอะไรเมื่อคำถามที่พบบ่อยไม่เพียงพอ คำถามที่พบบ่อยเชื่อมโยงจากศูนย์ช่วยเหลือ โปรดทราบว่าผู้ดูแลเท่านั้นที่สามารถใช้แท็กfaq สำหรับคำตอบ - คำถามระบุว่า "ให้คะแนน +5 หรือมากกว่าและอย่างน้อยสองเท่าของ upvotes มากกว่า downvotes" คำตอบมี 27 upvotes และไม่มี downvote ฟังดูแล้วเหมือนกับว่าฉันทำตามเงื่อนไขที่ระบุไว้ในคำตอบและจำนวน upvotes นั้นค่อนข้างน่าประทับใจสำหรับคำตอบที่เก่าแก่ที่สุดอันดับที่สองในคำถามบนไซต์ meta ของไซต์ที่มีผู้ลงคะแนนเพียง 124 คนมากกว่า 10 ครั้ง หลายวิธีจะคุณชอบ? ทุกคนหรือไม่
John Dvorak

72

JavaScript

function addDecibels(){return (10*Math.log10([].reduce.call(arguments,(p,c)=>p+Math.pow(10,c/10),0))).toFixed(1);}

alert( addDecibels(2,2) );

บิต underhanded คือมันไม่ได้ underhanded จริง - ถ้าคุณเพิ่มแหล่งกำเนิดเสียง 2dB ไปยังแหล่งกำเนิดเสียง 2dB อื่นเสียงที่เกิดจากการรวมกันจะเป็น 5dB (และถ้าคุณเพิ่มสองแหล่ง 30dB จากนั้น 33dB ของมัน) ตามที่วัดในระดับบันทึก

คุณสามารถดูได้บนเครื่องคิดเลขที่แตกต่างกันที่นี่


จริง ๆ แล้วมันเป็นมากกว่า 5.01 เดซิเบล แต่ไกลพอที่จะนับได้ 4
Joe Z.

68

PHP

echo '2 + 2 = ' . (2 + 2 === 4 ? 4 : 2 + 2 === 5 ? 5 : 'dunno');

ซึ่งผลิต:

2 + 2 = 5

เนื่องจากใน PHP นั้นมีการคำนวณจำนวนสามทางจากซ้ายไปขวาดังนั้นจึงเป็นเรื่องจริง
(2 + 2 === 4 ? 4 : 2 + 2 === 5) // 2 + 2 is == 4, and 4 == true, therefore echo 5 ? 5 : 'dunno';



1
ฉันมีอีกPHPตัวอย่างเช่น:$a=2;echo "2+2=".$a++ + $a++;
Avall

เห็นได้ชัดว่า $ a ++ สร้าง 3 และผลลัพธ์จะเป็น 6 ฉันไม่ได้สิ่งที่คุณคิด
Ozh

1
@Janus PHPsadness # 30อธิบายได้ดี
wchargin


66

JavaScript

var total = 2 + 2;

if(total = 5)
{
    alert('I guess 2 + 2 = 5');
}
else
{
    alert('The universe is sane, 2 + 2 = 4');
}

73
=แทนที่จะเป็นเรื่อง==ง่ายที่จะดูและตรงไปตรงมาค่อนข้างไม่ได้รับผลกระทบ
ApproachingDarknessFish

19
มี upvote อยู่แล้วฉันทำผิดพลาดมาก ๆ

6
ฉันยังคงชอบคำตอบนี้
Sam Creamer

5
ฉันชอบมันเหมือนกัน. ไม่ได้ทุกภาษาที่ใช้=เป็นเพียง แต่มอบหมายดำเนินการเปรียบเทียบ (เช่นปาสคาล, SQL, VB)
Avall

ฉันพบว่ามันชัดเจนมาก
Oliver Ni

57

C #

    static void Main(string[] args)
    {
        var x = 2;
        var y = 2;

        if (1 == 0) ;
        {
            ++x;
        }

        Console.WriteLine(x + y);
    }

7
อาเคล็ดลับเก่าที่ดีกับตัวละครหลอกลวง นั่นเป็นเหตุผลที่คุณควรใช้ 1TBS ทุกที่
John Dvorak

11
@JanDvorak ใช้งานได้เนื่องจากอัฒภาคหลังจากคำสั่ง if หรือไม่ ฉันไม่ทราบ C # แต่ฉันใช้ C ++

5
@professorfish นั่นคือสิ่งที่ฉันคิด นอกจากนี้ภาษาที่ไม่อนุญาตให้คุณใส่วงเล็บปีกกาแบบสุ่ม FTW
John Dvorak

12
หากไม่มีคำสั่ง ";" คำสั่ง if จะควบคุมว่าจะเรียกใช้การบล็อกรหัสหรือไม่ กับ ";" ในนั้นถ้ามีการประเมิน แต่ไม่มีอะไรจะทำกับผลลัพธ์ จากนั้นโค้ดบล็อกจะถูกดำเนินการทุกครั้งโดยไม่คำนึงถึง ใน C # เป็นที่ยอมรับอย่างสมบูรณ์ว่ามีบล็อคโค้ดแบบสุ่ม
Grax32

2
เมื่อวันก่อนฉันได้รับตัวเองด้วย ฉันมีการวนซ้ำแบบ;หลังจากนั้นซึ่งตั้งใจอย่างสมบูรณ์แบบเพราะฉันใช้การวนซ้ำที่ว่างเปล่าเพื่อเลื่อนเคอร์เซอร์ ฉันเผลอเอาเซมิโคลอนออกไปโดยไม่ได้ตั้งใจทุกอย่างก็ระเบิดขึ้นมา
mpen

56

การตกแต่ง Javascript ด้วย ASCII เป็นสิ่งที่อันตราย

  -~// JS  \\~-
 ~-// Maths \\-~
-~// Madness \\~-

     (2 + 2)

เมื่อความคิดเห็นถูกลบสัญลักษณ์และตัวดำเนินการที่เหลือจะประเมินเป็น
-~~--~(2 + 2) สิ่งนี้ใช้ประโยชน์จากตัวดำเนินการ Bitwise Not (~) ใน JS พร้อมกับเครื่องหมายลบจำนวนหนึ่งซึ่งจะลบล้างค่าตลอดทาง


3
ผมสงสัยว่าวิธีการที่--ผู้ประกอบการได้รับการยอมรับเท่าที่ควรข้อผิดพลาดออกมาพร้อมกับInvalid left-hand side expression in prefix operation; อย่างไรก็ตามฉันตระหนักว่ามีตัวละครช่องว่างระหว่างพวกเขา
usandfriends

53

ทุบตี

#!/bin/bash

# strings of length 2
x="ab"
y="cd"

# add lengths by concatenation
c="$(cat<<<$x; cat<<<$y)"

# display the lengths of the parts and the sum
echo "${#x} + ${#y} = ${#c}"

เอาท์พุท:

2 + 2 = 5

เอาต์พุตจากแต่ละรายการcatจะมีการขึ้นบรรทัดใหม่โดยนัย แต่การขึ้นบรรทัดใหม่สุดท้ายถูกถอดออกโดยการทดแทนคำสั่ง$( )


นี่คืออีก:

#!/bin/bash

# Create an array of ascending integers
a=({1..10})

# Use the sum to index into the array
s="2 + 2"
i=$(($s))
echo "$s = ${a[$i]}"

อาร์เรย์ของ Bash นั้นจะไม่มีการทำดัชนี


3
ฉันจับตัวแรกได้จริง ๆ เพราะฉันมีปัญหามากมายกับสิ่งต่าง ๆ เช่นเมื่อเล่นกอล์ฟใน Bash สำหรับอันที่สองอาร์เรย์ไม่ได้จัดทำดัชนีเป็นศูนย์ที่ไหน

3
@professorfish Applescript ตัวอย่างเช่น:set a to {1, 2, 3, 4, 5, 6, 7, 8} item 4 of a
Digital Trauma

12
@DigitalTrauma Applescript นั้นแปลก

5
zshใช้อาร์เรย์ที่มีการจัดทำดัชนี 1 รายการ (และ$arr[0]เป็นเพียงการตั้งค่าหรือไม่ได้กำหนดหรือบางอย่าง) ยกเว้นว่าKSH_ARRAYSมีการตั้งค่าตัวเลือกซึ่งในกรณีนี้อาร์เรย์จะได้รับการจัดทำดัชนี 0
chepner

4
@professorfush: Lua และ Fortran มี 1 ดัชนี ทุกครั้งที่ฉันนับถึง 10 ฉันจะเริ่มต้นที่ 1 เสมอไม่ใช่ 0: D
Kyle Kanos

49

Perl

# Generic includes
use strict;
use warnings;
use 5.010;
use Acme::NewMath;

# Ok, time to begin the real program.
if (2 + 2 == 5) {
    say 5;
}
else {
    say "Dunno...";
}

มันขึ้นอยู่กับโมดูล CPAN เรียกว่าแอค :: NewMath เนื่องจากชื่อไฟล์ผิดในโมดูลนี้จะทำงานเฉพาะกับระบบไฟล์ที่ไม่ต้องใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (เช่นบน Windows หรือ Mac OS X) แต่ฉันตำหนิผู้เขียนโมดูลดั้งเดิมที่นี่ Acme :: NewMath ใช้คณิตศาสตร์ตามอุดมการณ์ Ingsoc


16
นี่มันค่อนข้างเขี้ยวลากดิน ไม่มีใครเคยดูการนำเข้า / รวมของคุณ

44

R

# add the mean of [1,3] to the mean of [4,0] (2 + 2)
mean(1,3) + mean(4,0)

เอาท์พุท:

5

รหัสจริงเพิ่มค่าเฉลี่ยของ [1] กับค่าเฉลี่ยของ [4] วิธีที่ถูกต้องในการใช้ฟังก์ชั่นเฉลี่ยในการวิจัยจะเป็น: mean(c(1,3)) + mean(c(4,0))นี้จะแตกต่างจากฟังก์ชั่นทางคณิตศาสตร์อื่น ๆ ใน R เช่นsum, maxและmin; ที่sum(1,3), max(1,3)และmin(3,1)ทุกคนจะให้คำตอบที่คาดหวัง


7
ไม่เลวหลอกฉันสักหน่อย
qwr

37

ชวา

public class Five {
    public static void main(final String... args) {
        System.out.println(256.0000000000002 + 256.0000000000002);
    }
}

เอาท์พุท:

512.0000000000005

อาจใช้งานในภาษาใดก็ได้ที่ใช้คู่ผสมชนิดเดียวกัน


7
นั่นเป็นลายเซ็นหลักที่แปลกมาก
Bertie Wheen

10
Java ใช้อาร์กิวเมนต์หลากหลายเป็นอาร์เรย์ภายใต้ประทุน
CodaFi

4
เอาฉันสักครู่เพื่อตระหนักว่าคุณอาจพูดถึงตัวเลขสุดท้ายในคู่ ฉันเห็นว่าตัวเลขแรกถูกเพิ่มอย่างถูกต้อง ( _2_56 + _2_56 = _5_12) แต่ดูเหมือนว่าคุณหมายถึงมากขึ้น256.000000000000_2_ + 256.000000000000_2_ = 512.000000000000_5_(หมายเหตุ: ขีดล่างใช้เพื่อ "ตัวหนา" ตัวเลข
Justin

35

Befunge

สิ่งนี้เขียนใน Befunge แต่ถูกออกแบบให้ดูเหมือน Python

#>>>>>>>>>>>>>>>>>v
# Calculate 2 + 2 v
#>>>>>>>>>>>>>>>>>v
def add(v,w):
    return v+w
 # I rewrote this 5 times and it still doesn't work

print add(2,2) #... Still not working

# email: MarkSmith@example.com

เมื่อรัน (พร้อมล่ามที่ถูกต้อง) โปรแกรมจะพิมพ์ออก5มา

คำอธิบาย:

โปรแกรม Befunge ประกอบด้วยกริดของคำสั่งตัวอักษรเดียว คำสั่งแรกคือคำสั่งที่มุมซ้ายบนและการอ่านคำสั่งดำเนินไปทางขวา แต่ทิศทางสามารถเปลี่ยนแปลงได้ในระหว่างการดำเนินการโปรแกรม

เฉพาะแถวแรกของอักขระและคอลัมน์ของอักขระที่ขึ้นต้นด้วยvในแถวแรกจะถูกเรียกใช้ ตัวละครที่มีปัญหา:

#- ข้ามคำสั่งถัดไป
>- จากนี้ไปคำสั่งจะอ่านทางด้านขวาของคำสั่งปัจจุบัน
v- จากนี้ไปคำสั่งจะอ่านด้านล่างคำสั่งปัจจุบัน
5- กด 5 เพื่อสแต็ค
.- พิมพ์และพิมพ์ตัวเลข ที่ด้านบนสุดของสแต็ก
@- จบโปรแกรม
<space>- ไม่ต้องทำอะไรเลย

หากคุณรู้ว่าคุณกำลังเขียนโปรแกรมใน Befunge สิ่งนี้จะไม่หลอกใคร แต่ถ้าคุณเจอเรื่องนี้และไม่รู้ว่ามันคือ Befunge มันจะเป็นไปได้มากที่สุด


11
+1, นี่เป็นสิ่งที่คดเคี้ยวมากเพราะใครที่ดูโปรแกรมที่เรียกใช้ซอร์สโค้ดเมื่อดีบั๊ก
MrLore

33

JavaScript

รหัส:

var a = 3;
а = 2;
a + а;

เอาท์พุท:

5

คุณสามารถทดสอบด้วยตัวเองบนคอนโซลของคุณหรือตรวจสอบซอนี้


6
คุณช่วยชี้ให้ฉันเป็นแหล่งข้อมูลหรืออธิบายให้ฉันฟังได้ว่าเหตุใดจึงใช้งานได้ ฉันรู้ว่ามันใช้งานได้เพราะฉันตรวจสอบซอของมัน แต่ฉันไม่เข้าใจว่าทำไม
ครอบครัว

29
ตัวแปร "a" ไม่เหมือนกันทั้งสองครั้ง (ขออภัยถ้าฉันทำให้ข้อมูลนี้เสียหาย) unicode ส่อเสียดแน่นอน
Sam Creamer

6
ฉันรักตัวละครตัวต่อไปU+0431คือб - เกือบ 6 ตัว!
wchargin

73
ใช้ homoglyphs ไป "สับสน" ผู้อ่านอยู่ในขณะนี้อย่างเป็นทางการไม่ตลก
John Dvorak

40
@JanDvorak คำตอบนั้นโพสต์หลังจากคำตอบนี้; มันใช้ไม่ได้ที่นี่
Doorknob

30

C (Linux, gcc 4.7.3)

#include <stdio.h>

int main(void)
{
    int a=3, b=2;

    printf("%d + %d = %d", --a, b, a+b);  
}

มันพิมพ์ 2 + 2 = 5

ดังนั้น = 2 ใช่ไหม

gcc-4.7.3 ประเมินพารามิเตอร์ฟังก์ชันจากขวาไปซ้าย เมื่อ a + b ถูกประเมิน a ยังคงเป็น 3


16
การใช้งานที่ดีของพฤติกรรมที่ไม่ระบุ
chbaker0

24

FORTRAN 77

       program BadSum
       integer i,a,j
       common i,a
       a = 1
       i = 2
       call addtwo(j) 
       print *,j
       end

       subroutine addtwo(j)
       integer a,i,j
       common a,i
c since a = 1 & i = 2, then 2 + 1 + 1 = 2 + 2 = 4
       j = i + a + a
       end

การละเมิดมาตรฐานของcommonบล็อก: เรื่องการสั่งซื้อ; 1 + 2 + 2ผมสลับลำดับกระชากย่อยเพื่อให้ฉันเพิ่มจริงๆ


6
@JanDvorak: ฮ่า ๆ ฉันจะได้ใช้ FORTRAN IV ที่ฉันสามารถ redefine ตัวอักษรเช่น2=3
ไคล์ Kanos

1
@ KyleKanos นั่นคือสิ่งที่ฉันคิดว่านี่จะเป็นเมื่อฉันเห็นโพสต์ของคุณถูกเขียนขึ้นในภาษาฟอร์แทรน
danmcardle

@KyleKanos ทำมันได้!
คลิก Rick

1
@ KyleKanos: มันใช้งานได้กับตัวอักษรจำนวนเต็มหรือลอยเท่านั้น? ฉันคิดว่าในเครื่องของยุคนั้นตัวอักษรจำนวนเต็มและที่อยู่จะมีขนาดเท่ากัน แต่มีขนาดเล็กกว่าแบบลอยดังนั้นการรวมตัวอักษรแบบลอยจะประหยัดพื้นที่ แต่การรวมตัวอักษร int จะไม่
supercat

2
@ KyleKanos: ความเข้าใจของฉันคือการรวบรวมจะไม่อนุญาตให้มีการมอบหมายโดยตรงไปยังตัวอักษร แต่การเรียกใช้ฟังก์ชั่นที่ใช้ผ่านการอ้างอิงและการส่งตัวอักษรลอยไปที่ฟังก์ชั่นโดยทั่วไปจะผ่านที่อยู่ของค่าในสระว่ายน้ำลอย จุดตัวอักษร การส่งค่าจำนวนเต็มไปยังฟังก์ชันจะทำให้เกิดการรวมกลุ่ม แต่รหัสส่วนใหญ่ที่ใช้จำนวนเต็มจะรวมค่าโดยตรง
supercat

24

หลาม

รหัสพิมพ์ 5 ซึ่งเป็นคำตอบที่ถูกต้องสำหรับงานนี้

def int(a):
    return ~eval(a)

def add(a,b):
    return int(a)+int(b)

print ~add("2","2")

แก้ไข:นี่คือรุ่นทางเลือกซึ่งเพิ่มจำนวนเต็มไม่ใช่สองสตริง

def int(a): return ~eval(`a`)
def add(a,b): return int(a)+int(b)
print ~add(2,2)

Tilde เป็นตัวดำเนินการผกผัน unary ซึ่งส่งกลับ-x-1ดังนั้นขั้นตอนแรกคือการรับ-6แล้วกับตัวดำเนินการอื่นในprintการรับฟังก์ชัน5


ทำไม~eval(`a`)แทนที่จะเป็นแค่~a?
Andrea Corbellini

2
ฉันต้องการที่จะออกจากบางส่วนของint()การทำงานและeval()ไม่ทำงานถ้าใส่เป็นจำนวนเต็ม stringified :)
Avall

24

ทับทิม

class Fixnum
    alias plus +

    def + (other)
        plus(other).succ
    end
end

puts 2 + 2

สิ่งนี้จะเพิ่มผลลัพธ์ของการเพิ่มเติมทั้งหมดที่มีอาร์กิวเมนต์แรกคือ Fixnum (ซึ่ง 2 คืออย่างน้อยใน MRI) โดย 1

ผลข้างเคียงของสิ่งนี้ยิ่งแย่กว่ารุ่น Java


23

ทับทิม

Ruby มีสภาพแวดล้อมที่ชั้นหนึ่ง สิ่งนี้มีความหมายมากมาย นอกจากนี้ยังหมายความว่าหลายสิ่งหลายอย่างสามารถทำได้ที่ ... อาจไม่ควร

def mal(&block)
    block.call
    for v in block.binding.eval("local_variables");
      block.binding.eval('if ' + v.to_s + ' == 4 then ' + v.to_s + ' = 5 end')
    end 
end

a = 2 + 2;
b = 2 + 4;
puts "2 + 2 = ", a
puts "2 + 4 = ", b

mal do
  puts "But in 1984..."
end

puts "2 + 2 = ", a
puts "2 + 4 = ", b

ผลลัพธ์ของสิ่งนี้คือ:

2 + 2 = 
4
2 + 4 = 
6
แต่ในปี 1984 ...
2 + 2 = 
5
2 + 4 = 
6

หากคุณต้องการเข้าใจเพิ่มเติมเกี่ยวกับความสุขและอันตรายของสิ่งนี้Ruby Conf 2011 ทำให้ Ruby สมเหตุสมผลและอ่านสภาพแวดล้อมระดับเฟิร์สคลาสจากบล็อก Abstract Heresies


ด้วย:class Fixnum; def +(n) 5 end end; 2 + 2 # => 5
ภาพยนตร์ 42

1
เพื่อทำเฉพาะสำหรับกรณีเฉพาะ:class Fixnum; alias_method :orig_plus, :+; protected :orig_plus; def +(n) self == 2 && n == 2 ? 5 : self.orig_plus(n) end end
Gary S. Weaver

21

โครงการ

(define 2+2 5)
2+2 ;=> 5

9
เฮ้! 2+2ไม่ใช่วิธีที่คุณเพิ่มเติมในกระเพื่อม!
John Dvorak

1
แล้วอะไรล่ะ ดูเหมือนว่าเพิ่ม 2 ถึง 2 ตามที่เป็นอยู่ในภารกิจ
Hauleth

119
@JanDvorak ฉันไม่เคยใช้เสียงกระเพื่อม ((((2))(()()))()()(()((((+))))()(((()(())((((2)))))()))(())))แต่ที่ผมเข้าใจว่ามันเป็นสิ่งที่ชอบ
undergroundmonorail

2
"การนิยามใหม่ 2 + 2 เนื่องจาก 5 ไม่สร้างสรรค์มาก! อย่าคิดใหม่ลองอีกอย่างหนึ่ง" --- ก็ใน R5RS ฉันสามารถกำหนดใหม่ได้ + แทน 2 +2 หรือ 2 คำตอบอยู่ที่นี่: pastebin.com/KHtm9Jmv
เฟลิเป้

1
@FelipeMicaroniLalli นั้นการทำ adnotation เกิดขึ้นหลังจากคำตอบของฉันดังนั้นมันจึงไม่นับ
Hauleth

20

C #

var c = Enumerable.Range(2, 2).Sum();

สำหรับคนที่ไม่คุ้นเคยจะดูเหมือนว่าฉันได้รับช่วงเริ่มต้นและสิ้นสุดที่ 2 ที่จริงแล้วมันเริ่มต้นที่ 2 และไปหาตัวเลขสองตัว ดังนั้น 2 + 3 = 5


6
ช่วงที่เริ่มต้นและสิ้นสุดที่ 2 จะเป็นแค่{ 2 }นั้นใช่ไหม
Paŭlo Ebermann

1
@ PaŭloEbermann Enumerable.Rangeไม่ได้เริ่มต้นและสิ้นสุดก็ใช้เวลาเริ่มต้นและการนับ (ขององค์ประกอบที่จะระบุ)
MasterMastic

14
@MasterMastic ฉันเข้าใจสิ่งนี้จากคำอธิบายในคำตอบ แต่ความหมาย "สำหรับคนที่ไม่คุ้นเคย" ควรจะเป็นช่วงดังกล่าว (จากคำอธิบายในคำตอบ) และข้อโต้แย้งของฉันคือผลลัพธ์ที่คาดหวังจะเป็น 2 ไม่ใช่ 4
Paŭlo Ebermann

1
@ PaŭloEbermannใช่แล้วนั่นเป็นวิธีหนึ่งในการพิจารณาเช่นกัน ฉันคิดว่ามันอาจจะดูคล้ายกับว่าฉันกำลังจัดส่งหมายเลขให้เพิ่ม ดังนั้น Enumerable.Range (1,2,3,4) จะเริ่มต้นที่ 1 สิ้นสุดที่ 4 และรวมได้ถึง 10
Paul


18

C

int main() {
        char __func_version__[] = "5";  // For source control
        char b[]="2", a=2;
        printf("%d + %s = %s\n", a, b, a+b);
        return 0;
}

สิ่งที่5ซ่อนอยู่ไม่ดีเกินไปฉันกลัว ไม่ทำงานกับการเพิ่มประสิทธิภาพ


1
นีซ; ฉันไม่สามารถลงคะแนนได้หากพฤติกรรมที่ไม่ได้กำหนดไม่ได้รับอนุญาต
นี้

2
@ ตนเอง. ฉันไม่เห็นว่าการพึ่งพา UB ถูกแบนที่ไหน คำตอบกอล์ฟจำนวนมากพึ่งพา UB และฉันคิดว่ามันโอเคตราบใดที่มันเกิดขึ้นอย่างต่อเนื่องในแพลตฟอร์มที่เหมาะสม
ugoren

2
ฉันไม่เห็นว่าการใช้งาน UB ถูกแบนที่ไหน ฉันไม่พบกฎใด ๆ เลย มันคงจะดีถ้ามันสามารถอธิบายได้ คำตอบกอล์ฟจำนวนมากพึ่งพา UB และฉันคิดว่ามันโอเคตราบใดที่มันเกิดขึ้นอย่างต่อเนื่องในแพลตฟอร์มที่เหมาะสมบางกฎเฉพาะบางอย่างที่น่าจะดี
นี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.