Can functions from the C standard library be used in C++?

前端 未结 3 1028
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-25 11:22

Right now I\'m getting familiar with C and the C standard library and I wonder if my knowledge in this area will be useful when I turn to working with C++ at a later time.

相关标签:
3条回答
  • 2020-12-25 11:41

    Yes, C++ was originally designed so that any C library can be easily used in C++. Of course this is slightly less true (in particular, if a C library happens to use some C++ keyword like try or dynamic_cast, it won't work; also, if a callback coded in C++ passed to a C library is raising some exception, you are likely to have a big mess).

    The standard practice to use a C header file in C++ is

     extern "C" {
     #include <some_c_header_file.h>
     };
    

    and most existing C header files are designed to cooperate with C++ by actually containing stuff like

     #ifdef __cplusplus
     extern "C" {
     #endif
    
     //// most of the header material goes here, C style
    
     #ifdef __cplusplus
     }; // end extern "C"
     #endif
    

    In practice, many C standard headers have equivalent C++ headers wrapping things like above (and also in namespace std). Eg C <stdio.h> is C++ <cstdio> -but you often should prefer genuine C++ streams (<iostream>), however printf-like routines are usually more localization friendly mixed with gettext(3).

    However C and C++ are very different languages. You should code in idiomatic C++11 (using standard C++ containers, auto, closures, RAII, smart pointers, rule of five, SFINAE, exceptions, anonymous functions, ...)

    Some standard C functions are not very useful in idiomatic C++. For example, you are unlikely to use directly malloc in genuine C++ (at least prefer new -which is still very low level and no more in the C++ spirit-, more likely use a lot the containers and the smart pointers without dealing manually with heap allocation). But POSIX functions (notably syscalls(2) ....) are quite useful in C++. longjmp is likely to be incompatible with C++ exceptions.

    BTW, C++ has evolved a lot in this century. Don't learn C++98 but at least C++11 (there are tremendous differences between them) and perhaps C++14. Use a recent compiler (GCC or Clang/LLVM); in december 2015, that means GCC 5 at least or Clang/LLVM 3.7 at least. Don't forget to enable all warnings & debug info in the compiler (e.g. g++ -Wall -Wextra -g -std=c++11)

    C++ (that means C++11 at least) is a difficult programming language, considerably more complex than C is. You'll need weeks of reading to learn some of it, and good coding style and discipline is essential (you can easily write very crappy code in C++). Start with Programming: Principles & Practice Using C++

    I believe that if you only know C, reading SICP (and studying a bit of Scheme) before learning C++ is worthwhile.

    The notion of undefined behavior is very important, both in C and probably even more in C++. You absolutely need to understand it (see C.Lattner's blog on it) and avoid it.

    You will also learn a big lot by studying (and perhaps contributing to) some existing free software and its source code. Hence I recommend using Linux.

    0 讨论(0)
  • 2020-12-25 11:46

    I'll just quote a paragraph out of the ISO/IEC N3690(c++ standard).

    17.2 The C standard library

    1 The C++ standard library also makes available the facilities of the C standard library, suitably adjusted to ensure static type safety.

    So simply yes!

    0 讨论(0)
  • 2020-12-25 11:47

    yes .you can use standard c library functions in C++ Examples

        stdio.h   => cstdio   (printf/scanf)
        math.h    => cmath     (sqrt)  
    
    0 讨论(0)
提交回复
热议问题