Tính năng C nào bị ảnh hưởng bởi / xuất phát từ Tính năng C ++? [đóng cửa]


8

Các tính năng từ Tiêu chuẩn C thực tế, ban đầu là một phần của C, nhưng được phát minh trong / cho C ++ và vì lợi ích của nó, sau đó đã được áp dụng cho C?

Một ví dụ nổi bật là nhận xét một dòng //, xuất phát từ C ++ và sau đó được C.

Bạn có biết thêm các tính năng của Tiêu chuẩn C thực tế, mà rõ ràng hoặc ngầm đến từ sự phát triển của C ++?

Thông tin: Tất nhiên, tôi biết rằng C ++ có nguồn gốc từ C nhưng tôi chỉ nghĩ về những tính năng nào được áp dụng từ sự phát triển của sản phẩm phái sinh của nó, C ++.


4
_BoolKiểu C được lấy cảm hứng từ C ++ của booltôi tin.
Jesper Juhl

2
Có thể khai báo các biến ở các vị trí khác ngoài đỉnh của hàm cũng là C ++ trước, sau này được CI chấp nhận.
Jesper Juhl

2
Tôi nghĩ các nguyên mẫu chức năng đến từ C ++, IIRC.
Ian Abbott

2
Không cho phép "ẩn int" như một kiểu trả về hàm (ngoại trừ main()) là (tôi nghĩ) cũng là điều mà C ++ tiên phong và C sau đó đã áp dụng.
Jesper Juhl

5
Đây dường như không phải là một câu hỏi với một câu trả lời rõ ràng và không có vấn đề rõ ràng nào ở đây.
Caleb

Câu trả lời:


4

Tôi không thể xác nhận rằng chúng chắc chắn bị ảnh hưởng bởi C ++ trực tiếp 1 , nhưng đây là danh sách các tính năng trong C ++ tiêu chuẩn đã được thêm vào trong C99:

  • bình luận dòng đơn (như đã đề cập)
  • chức năng nội tuyến
  • các biến được phép sau khi bắt đầu khối
  • kiểu dữ liệu boolean
  • thư viện toán phức tạp

C11:

  • Công đoàn ẩn danh (C11 cũng cho phép các cấu trúc ẩn danh). Công đoàn ẩn danh đã có trong C ++ tiêu chuẩn. (Cấu trúc ẩn danh vẫn không được phép trong C ++ tiêu chuẩn).

1 Ví dụ BCPL, tiền thân của B, lần lượt là tiền thân của C đã có cùng một cú pháp cho các nhận xét dòng đơn. Một số trong số này có thể đã được hỗ trợ làm phần mở rộng ngôn ngữ trong một số triển khai C trước khi kết hợp với C ++ tiêu chuẩn. Trong những trường hợp này, cả C chuẩn và C ++ tiêu chuẩn có thể đã bị ảnh hưởng bởi cùng một nguồn, thay vì ảnh hưởng lẫn nhau.


1
@KonradRudolph Ẩn danh: union named { struct { int i;}; };Chưa đặt tên : union named { struct { int i;} unnamed; };. Cấu trúc không tên không có tên, nhưng có một biến được đặt tên. Cấu trúc ẩn danh không được đặt tên và không có biến được đặt tên.
eerorika


1
Các hàm nội tuyến tồn tại trong GCC và các trình biên dịch khác trước C ++.
Lee Daniel Crocker

2

Các thuộc tính đã được thêm vào trong C ++ 11 và sẽ được thêm vào trong bản sửa đổi Cx tiêu chuẩn C tiếp theo . Các đề nghị (và ở đây ) cho tính năng này đặc biệt tham chiếu C ++.

Các thuộc tính có thể hữu ích cho việc cung cấp thông tin, ví dụ, giúp trình biên dịch đưa ra chẩn đoán tốt hơn hoặc tối ưu hóa mã được tạo. Nguồn

Thí dụ:

int [[attr1]] i [[attr2, attr3]];

[[attr4(arg1, arg2)]] if (cond)

{
    [[vendor::attr5]] return i;
}

Trong ví dụ này, " thuộc tính attr1 áp dụng cho loại biến i, attr2 và attr3 áp dụng cho chính biến đó, attr4 áp dụng cho câu lệnh if và nhà cung cấp :: attr5 áp dụng cho câu lệnh return. " Nguồn


Thú vị, nhưng "sẽ được thêm" không được đảm bảo.
chux - Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.