Tại sao mã sau đây biên dịch?Tại sao đoạn mã này biên dịch?
#include <stdio.h>
int main(void) {
getchar;
}
Tại sao mã sau đây biên dịch?Tại sao đoạn mã này biên dịch?
#include <stdio.h>
int main(void) {
getchar;
}
Bởi vì tên hàm là bí danh để con trỏ chức năng đối với những chức năng, mà là bản thân các giá trị giống như số nguyên .. Đây là ngữ nghĩa rất giống với
#include <stdio.h>
int main(void) {
42;
}
Đó là hợp lệ nhưng vô nghĩa.
Và rất khó chịu !!!! gõ, "int x = getX" thay vì "x = getX()" sẽ làm việc khá vui vẻ và đặt một số giá trị địa chỉ ngẫu nhiên vào x. –
Tôi ghét C.> _ <[phụ 15 char] – missingfaktor
@Rahul: Đó không phải là một thái độ * rất giống * đa ngôn ngữ! – Tarydon
Lý do cùng 1;
sẽ biên dịch, getchar
chỉ là một địa chỉ để một hàm. Kết quả được đánh giá, sau đó bị loại bỏ. Trong đặc tả ngôn ngữ, nó được gọi là "tuyên bố biểu thức";
C là lạ, mã này biên dịch quá, nhưng nó segfaults mà cho hồ sơ, là segfault nhỏ nhất trong C lịch sử.
main;
Vì lỗi của nó? –
@Xinxua - +1/đồng ý –
Về cơ bản, nó tóm tắt cho dù 'getchar' được phép là macro hay không. Nếu có, mã có thể không chính xác. –