คำถามติดแท็ก compiler-warnings

ข้อความที่ปล่อยออกมาโดยคอมไพเลอร์ซึ่งระบุปัญหาที่อาจเกิดขึ้นในโค้ดหรือคอนฟิกูเรชัน

20
เหตุใดฉันจึงควรเปิดใช้งานคำเตือนคอมไพเลอร์เสมอ
ฉันมักจะได้ยินว่าเมื่อรวบรวมโปรแกรม C และ C ++ ฉันควร "เปิดใช้งานคำเตือนคอมไพเลอร์" เสมอ ทำไมถึงจำเป็น ฉันจะทำอย่างไร บางครั้งฉันก็ได้ยินว่าฉันควร "ถือว่าคำเตือนเป็นข้อผิดพลาด" ฉันควร? ฉันจะทำอย่างไร

4
“ android: allowBackup” คืออะไร?
ตั้งแต่เวอร์ชันตัวอย่าง ADT ใหม่ (เวอร์ชัน 21)พวกเขามีคำเตือนขุยใหม่ที่บอกสิ่งต่อไปในไฟล์รายการ (ในแท็กแอปพลิเคชัน): ควรตั้งค่า android อย่างชัดเจน: อนุญาตการสำรองข้อมูลเป็นจริงหรือเท็จ (เป็นจริงโดยค่าเริ่มต้นและอาจมีผลกระทบด้านความปลอดภัยสำหรับข้อมูลของแอปพลิเคชัน) ในเว็บไซต์ทางการพวกเขาเขียน: การตรวจสอบใหม่สองสามครั้ง: คุณต้องตัดสินใจอย่างชัดเจนว่าแอปของคุณอนุญาตการสำรองข้อมูลหรือไม่และการตรวจสอบป้ายกำกับ มีการตั้งค่าสถานะบรรทัดคำสั่งใหม่สำหรับการตั้งค่าเส้นทางไลบรารี การปรับปรุงหลายอย่างเพื่อการวิเคราะห์ผ้าสำลีที่เพิ่มขึ้นในขณะที่แก้ไข คำเตือนนี้คืออะไร? คุณสมบัติการสำรองข้อมูลคืออะไรและฉันจะใช้ได้อย่างไร ทำไมคำเตือนถึงบอกฉันว่ามันมีผลกระทบด้านความปลอดภัย? อะไรคือข้อเสียและข้อดีของการปิดใช้งานคุณสมบัตินี้ มีแนวคิดการสำรองข้อมูลสองรายการสำหรับรายการ: "android: allowBackup " อนุญาตให้ทำการสำรองและกู้คืนผ่าน adb ดังที่แสดงที่นี่ : อนุญาตให้แอปพลิเคชันเข้าร่วมในการสำรองข้อมูลและเรียกคืนโครงสร้างพื้นฐานหรือไม่ หากคุณลักษณะนี้ถูกตั้งค่าเป็น "เท็จ" จะไม่มีการสำรองข้อมูลหรือคืนค่าแอปพลิเคชันแม้ว่าจะมีการสำรองข้อมูลแบบเต็มระบบซึ่งอาจทำให้ข้อมูลแอปพลิเคชันทั้งหมดถูกบันทึกผ่าน adb ค่าเริ่มต้นของคุณลักษณะนี้เป็นจริง สิ่งนี้ถือเป็นปัญหาด้านความปลอดภัยเนื่องจากผู้คนสามารถสำรองข้อมูลแอปของคุณผ่านADBจากนั้นรับข้อมูลส่วนตัวของแอพลงในพีซี อย่างไรก็ตามฉันคิดว่าไม่ใช่ปัญหาเนื่องจากผู้ใช้ส่วนใหญ่ไม่ทราบว่า adb คืออะไรและถ้าพวกเขาทำพวกเขาจะรู้วิธีรูทอุปกรณ์ ฟังก์ชั่น ADB จะทำงานเฉพาะเมื่ออุปกรณ์เปิดใช้งานคุณสมบัติการดีบักและสิ่งนี้ต้องการให้ผู้ใช้เปิดใช้งาน ดังนั้นเฉพาะผู้ใช้ที่เชื่อมต่ออุปกรณ์กับพีซีและเปิดใช้งานคุณสมบัติการดีบักเท่านั้นที่จะได้รับผลกระทบ หากพวกเขามีแอปที่เป็นอันตรายในพีซีที่ใช้เครื่องมือ ADB นี่อาจเป็นปัญหาได้เนื่องจากแอปสามารถอ่านข้อมูลที่เก็บข้อมูลส่วนตัว ฉันคิดว่า Google ควรเพิ่มคุณสมบัติที่ถูกปิดใช้งานตามค่าเริ่มต้นในหมวดหมู่นักพัฒนาซอฟต์แวร์เพื่ออนุญาตการสำรองและเรียกคืนแอปผ่าน ADB "android: …


4
จะปิดการใช้งานคำเตือนรหัสที่ไม่ได้ใช้ใน Rust ได้อย่างไร
struct SemanticDirection; fn main() {} warning: struct is never used: `SemanticDirection` --> src/main.rs:1:1 | 1 | struct SemanticDirection; | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: #[warn(dead_code)] on by default ฉันจะกลับคำเตือนเหล่านี้อีกครั้งเพื่ออะไรที่ร้ายแรง แต่ฉันแค่ซ่อมมันด้วยภาษาและนี่ทำให้ฉันรู้สึกแย่ ฉันพยายามเพิ่ม#[allow(dead_code)]รหัสของฉัน แต่มันไม่ได้ผล

9
วิธีปิดการใช้งานคำเตือนของ GCC สำหรับรหัสสองสามบรรทัด
ใน Visual C ++ #pragma warning (disable: ...)มันเป็นไปได้ที่จะใช้งาน นอกจากนี้ผมพบว่าใน GCC คุณสามารถแทนที่ต่อธงคอมไพเลอร์ไฟล์ ฉันจะทำสิ่งนี้สำหรับ "บรรทัดถัดไป" หรือด้วยความหมายของพุช / ป๊อปรอบ ๆ พื้นที่ของรหัสโดยใช้ GCC ได้อย่างไร


11
ผู้ได้รับทรัพย์สินและผู้ตั้งถิ่นฐาน
ด้วยคลาสแบบง่ายนี้ฉันได้รับคำเตือนคอมไพเลอร์ กำลังพยายามแก้ไข / เข้าถึงxภายใน setter / getter ของตนเอง และเมื่อฉันใช้มันเช่นนี้ var p: point = Point() p.x = 12 ฉันได้รับ EXC_BAD_ACCESS ฉันจะทำสิ่งนี้ได้อย่างไรถ้าไม่มี ivars สำรองอย่างชัดเจน class Point { var x: Int { set { x = newValue * 2 //Error } get { return x / 2 //Error } } // ... }

7
วิธีเปิดคำเตือนทั้งหมดของ GCC (ตามตัวอักษร)?
ผมอยากจะเปิดใช้งาน - ตัวอักษร - ทั้งหมดของคำเตือนที่มี GCC (คุณคิดว่ามันจะง่าย ... ) คุณคิดว่า -Wallอาจอาจทำกลอุบาย แต่ไม่! -Wextraยังคงต้อง คุณ-Wextraอาจคิดว่าอาจทำกลอุบาย แต่ไม่! ไม่ใช่คำเตือนทั้งหมดที่ระบุไว้ที่นี่ (ตัวอย่างเช่น-Wshadow) ไม่ได้เปิดใช้งานโดยสิ่งนี้ และฉันก็ยังไม่รู้ว่ารายการนี้ครอบคลุมหรือไม่ ฉันจะบอกให้ GCC เปิดใช้งานได้ (ไม่ว่าจะเป็นหรือไม่ก็เป็นได้ แต่อย่างเดียว) ทั้งหมดคำเตือนที่มีอยู่หรือไม่

4
การแปลงโดยนัยของ Objective-C สูญเสียความแม่นยำจำนวนเต็ม 'NSUInteger' (หรือที่รู้จักว่า 'ไม่ได้ลงนามยาว') เป็นคำเตือน 'int'
ฉันทำงานผ่านแบบฝึกหัดและได้รับคำเตือนว่า: การแปลงโดยนัยสูญเสียความแม่นยำของจำนวนเต็ม: 'NSUInteger' (aka 'long unsigned long') ถึง 'int' #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSArray *myColors; int i; int count; myColors = @[@"Red", @"Green", @"Blue", @"Yellow"]; count = myColors.count; // <<< issue warning here for (i = 0; i < count; i++) …

7
i = อะไร (i, ++ i, 1) + 1; ทำ?
หลังจากอ่านคำตอบนี้เกี่ยวกับพฤติกรรมที่ไม่ได้กำหนดและจุดลำดับฉันได้เขียนโปรแกรมขนาดเล็ก: #include <stdio.h> int main(void) { int i = 5; i = (i, ++i, 1) + 1; printf("%d\n", i); return 0; } 2เอาท์พุทเป็น โอ้พระเจ้าฉันไม่เห็นการลดลงมา! เกิดอะไรขึ้นที่นี่ นอกจากนี้ในขณะที่รวบรวมโค้ดข้างต้นฉันได้รับคำเตือนว่า: px.c: 5: 8: คำเตือน: ตัวถูกดำเนินการทางซ้ายของนิพจน์จุลภาคไม่มีผลใด ๆ [-Wunused-value] i = (i, ++i, 1) + 1; ^ ทำไม? แต่อาจจะตอบโดยอัตโนมัติโดยคำตอบของคำถามแรกของฉัน

5
จุดประสงค์ของ g ++ -Wreorder คืออะไร
ตัวเลือก g ++ -Wall รวมถึง - คำสั่งซื้อ ตัวเลือกนี้ทำอะไรอธิบายไว้ด้านล่าง ไม่ชัดเจนสำหรับฉันว่าทำไมบางคนถึงสนใจ (โดยเฉพาะอย่างยิ่งพอที่จะเปิดใช้งานตามค่าเริ่มต้นใน -Wall) - คำสั่งซื้อ (C ++ เท่านั้น) เตือนเมื่อลำดับของสมาชิกเริ่มต้นที่กำหนดในรหัสไม่ได้ ตรงกับคำสั่งที่พวกเขาจะต้องดำเนินการ ตัวอย่างเช่น struct A { int i; int j; A (): j (0), i (1) {} }; คอมไพเลอร์จะจัดเรียง initializers สมาชิกใหม่สำหรับ i และ j to ตรงกับคำสั่งประกาศของสมาชิกปล่อยเตือนไปที่ ผล คำเตือนนี้เปิดใช้งานโดย -Wall

3
“ การลบตัวแทนมีผลลัพธ์ที่คาดเดาไม่ได้” ใน ReSharper / C #?
เมื่อใช้ปัญหาmyDelegate -= eventHandlerReSharper (เวอร์ชัน 6): การลบผู้รับมอบสิทธิ์มีผลลัพธ์ที่คาดเดาไม่ได้ เหตุผลที่อยู่เบื้องหลังนี้คือการอธิบายโดย JetBrains ที่นี่ คำอธิบายมีเหตุผลและหลังจากอ่านแล้วฉันสงสัยว่าการใช้งานทั้งหมดของฉัน-กับผู้ได้รับมอบหมาย วิธีแล้ว , ฉันสามารถเขียนเหตุการณ์ที่ไม่ใช่อัตโนมัติโดยไม่ทำให้ ReSharper ไม่พอใจได้หรือไม่? หรือมีวิธีที่ดีกว่าและ / หรือ "ถูกต้อง" ในการนำไปใช้หรือไม่? หรือฉันสามารถเพิกเฉยต่อ ReSharper ได้หรือไม่? นี่คือรหัสแบบง่าย: public delegate void MyHandler (object sender); MyHandler _myEvent; public event MyHandler MyEvent { add { _myEvent += value; DoSomethingElse(); } remove { _myEvent -= value; // …

10
คำเตือนคอมไพเลอร์ที่กำหนดเอง
เมื่อใช้ ObsoleteAtribute ใน. Net จะให้คำเตือนคอมไพเลอร์ที่บอกคุณว่าอ็อบเจ็กต์ / วิธีการ / คุณสมบัติล้าสมัยและควรใช้อย่างอื่น ฉันกำลังทำโปรเจ็กต์ที่ต้องรีแฟคโค้ดอดีตพนักงานเป็นจำนวนมาก ฉันต้องการเขียนแอตทริบิวต์ที่กำหนดเองที่ฉันสามารถใช้เพื่อทำเครื่องหมายวิธีการหรือคุณสมบัติที่จะสร้างคำเตือนของคอมไพเลอร์ที่ให้ข้อความที่ฉันเขียน อะไรทำนองนี้ [MyAttribute("This code sux and should be looked at")] public void DoEverything() { } <MyAttribute("This code sux and should be looked at")> Public Sub DoEverything() End Sub ฉันต้องการให้สิ่งนี้สร้างคำเตือนคอมไพเลอร์ที่ระบุว่า "รหัสนี้ sux และควรได้รับการตรวจสอบ" ฉันรู้วิธีสร้างแอตทริบิวต์ที่กำหนดเองคำถามคือฉันจะทำให้มันสร้างคำเตือนคอมไพเลอร์ในสตูดิโอภาพได้อย่างไร

3
แทนที่แฟล็กคอมไพล์สำหรับไฟล์เดี่ยว
ฉันต้องการใช้ชุดค่าสถานะส่วนกลางสำหรับการรวบรวมโปรเจ็กต์ซึ่งหมายความว่าที่ไฟล์ CMakeLists.txt ระดับบนสุดของฉันฉันได้ระบุ: ADD_DEFINITIONS ( -Wall -Weffc++ -pedantic -std=c++0x ) อย่างไรก็ตามสำหรับไฟล์เฉพาะ (สมมติว่า "foo.cpp") ในไดเร็กทอรีย่อยฉันต้องการเปลี่ยนแฟล็กคอมไพล์ไม่ให้ใช้ -Weffc ++ (รวมไลบรารีเชิงพาณิชย์ที่ฉันไม่สามารถเปลี่ยนแปลงได้) เพื่อลดความซับซ้อนของสถานการณ์ให้ใช้ -Wall เท่านั้นฉันพยายาม: SET_SOURCE_FILES_PROPERTIES( foo.cpp PROPERTIES COMPILE_FLAGS -Wall ) ADD_EXECUTABLE( foo foo.cpp ) ซึ่งไม่ได้ผล ฉันยังพยายาม SET_PROPERTY( SOURCE foo.cpp PROPERTY COMPILE_FLAGS -Wall ) ADD_EXECUTABLE( foo foo.cpp ) และ ADD_EXECUTABLE( foo foo.cpp ) SET_TARGET_PROPERTIES( foo …

8
Java Class.cast () เทียบกับตัวดำเนินการ cast
หลังจากได้รับการสอนในช่วงวัน C ++ ของฉันเกี่ยวกับความชั่วร้ายของตัวดำเนินการแบบ C-style ฉันรู้สึกยินดีในตอนแรกที่พบว่าใน Java 5 java.lang.Classได้รับcastวิธีการ ฉันคิดว่าในที่สุดเราก็มีวิธีจัดการกับการแคสติ้งแบบ OO ปรากฎว่าClass.castไม่เหมือนกับstatic_castใน C ++ reinterpret_castมันเป็นเหมือน จะไม่สร้างข้อผิดพลาดในการคอมไพล์ตามที่คาดไว้และจะเลื่อนไปที่รันไทม์แทน นี่คือกรณีทดสอบง่ายๆเพื่อแสดงพฤติกรรมที่แตกต่างกัน package test; import static org.junit.Assert.assertTrue; import org.junit.Test; public class TestCast { static final class Foo { } static class Bar { } static final class BarSubclass extends Bar { } @Test public void …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.