#ifndef __GNUC__ làm tôi nghẹt thở

Sep 04 2020

Câu hỏi này có thể hoàn toàn kỳ lạ, tôi hiện đang làm việc trên một số mã cũ (không phải của tôi). Tôi thực sự không phải là lập trình viên C, nhưng tôi đang cố gắng hiểu những gì phần này của mã thực sự phải làm. May mắn thay, phần kỳ lạ không dài (một phần của cấu hình):

int
main ()
{
#ifndef __GNUC__
       choke me
#endif

  ;
  return 0;
}

Nếu nó không phải là một trình biên dịch GNU thì "choke me"... điều này choke mecó nghĩa là gì ... Tôi thực sự không hiểu. (và chỉ tìm thấy những điều kỳ lạ trong khi googling làm tôi nghẹt thở -.-)

Trả lời

3 NateEldredge Sep 04 2020 at 09:36

Nó chỉ được cho là thứ gì đó không hợp lệ C và sẽ gây ra lỗi cú pháp, ngăn tệp biên dịch.

Có lẽ lập trình viên không có ý định mã hoạt động với bất kỳ trình biên dịch nào ngoại trừ GNU C (gcc), vì vậy điều này sẽ buộc bản dựng bị lỗi nếu bất kỳ trình biên dịch nào khác được sử dụng. Không có ý nghĩa đặc biệt nào đối với các từ được chọn, ngoại trừ "choke me" có thể được hiểu theo nghĩa "đây là thứ mà trình biên dịch không thể 'nuốt' và sẽ giết nó."

Cách tiếp cận hiện đại hơn sẽ được sử dụng #error.

2 Someprogrammerdude Sep 04 2020 at 09:36

Đó là một câu lệnh không hợp lệ, do đó sẽ dẫn đến lỗi.