Welcome to the Linux Foundation Forum!

Am I C-ing this right?

Hello.

I've just realised that all the headers mentioned in the Manpages are of style: something.h

From what I've been reading, I gather that they are all therefore C headers.

Am I correct?

If so, then what is the merit as an [exclusivley] Linux user in my learning C++?

Comments

  • asedt
    asedt Posts: 96
    The Linux kernel is written in assembly and C. Of course a lot of other software is written in C++ and other languages.

    Java, C and C++ has been on the top of the index for a long time: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html so it's always good to learn.
  • marc
    marc Posts: 647
    Noluk wrote:
    Hello.

    I've just realised that all the headers mentioned in the Manpages are of style: something.h
    From what I've been reading, I gather that they are all therefore C headers.

    Am I correct?
    If so, then what is the merit as an [exclusivley] Linux user in my learning C++?

    I don't reallyl understand your question. Merit? Well, the learning itself! ;)

    Usefulness? As a user... neither of them will be usefull for you. As a developer... depends ;)
  • jabirali
    jabirali Posts: 157
    The C++ language is based on, and backwards-compatible with, the C language. Programs written in C++ can be compiled against libraries written in C without any issues, and C code can be recompiled as a C++ program without adjustments. C++ however enables additional features like object-orientation, namespaces, operator overloading, streams and templates. In addition, it comes with more libraries like STL, the Standard Template Library.

    So if you're learning to program, the basics of C and C++ should be quite similar (except the default way of handling input/output), but I would recommend that you at least familiarize yourself a bit with the features of C++. Even if you're writing purely procedural programs, the default programming paradigm of C, having features like streams and templates available can be quite neat. Having the Standard Template Library available also spares you the trouble of reimplementing common data structures and algorithms, e.g. binary search trees and sorting algorithms, every time you need them for a new datatype.
  • atreyu
    atreyu Posts: 216
    Noluk wrote:
    Hello.

    I've just realised that all the headers mentioned in the Manpages are of style: something.h
    From what I've been reading, I gather that they are all therefore C headers.

    Am I correct?
    If so, then what is the merit as an [exclusivley] Linux user in my learning C++?
    Well, maybe the kernel and most of the GNU utils were not written in C++, but plenty of the applications that run in most Linux distros - which make Linux useful - certainly are (Firefox, MySQL, LibreOffice, etc.).
  • woboyle
    woboyle Posts: 501
    For C++ headers, the .h is optional. You can have headers with, or without the .h for C++, but not for C. C requires the .h extension. So, in C++, you can do this:
    #include <stdio.h> // A C header file
    #include <iostream> // A C++ header
    #include <stdlib.h> // A C, and/or C++ header
    
  • Noluk
    Noluk Posts: 7
    Thanks for your feedback.

    However, to elaborate a bit more, my thoughts were that:
    as [far as I could see] the Kernel writers continue to write it just in C, and they presumably do so because they regard it to be better than C++
    and so shouldn't I just follow their lead and not bother with continuing to try to learn C++?

    If it's not: [arguably] better than C++ (and your replies suggest to me that it is not), then whatever are their reasons for continuing/[prefering] to write it in C?
  • woboyle
    woboyle Posts: 501
    There are other reasons for writing kernel code in C instead of C++, than that people think it is "better" than C++. There are things that C++ does that won't play nice in the down-to-the-metal environment of the kernel, such as virtual functions, etc. It may be possible to write kernel modules in C++, but it would be so restricted that it would end up pretty much just C code.

    Myself, when I design and write seriously complex enterprise applications, C++ is my language of choice. When I write kernel code, I use C.
  • marc
    marc Posts: 647
    Noluk wrote:
    Thanks for your feedback.

    However, to elaborate a bit more, my thoughts were that:
    as [far as I could see] the Kernel writers continue to write it just in C, and they presumably do so because they regard it to be better than C++
    and so shouldn't I just follow their lead and not bother with continuing to try to learn C++?

    If it's not: [arguably] better than C++ (and your replies suggest to me that it is not), then whatever are their reasons for continuing/[prefering] to write it in C?

    They write in C because it's *faster*. That doesn't mean it's better though: it's better for kernel programming as the speed is key to usefulness of the kernel.

    From an application development point of view, C++ is better as it was designed for code reutilization and object oriented programming (usually more understandable by our brain).

    As usual, it's a matter of balance :)

    Regards
  • Noluk
    Noluk Posts: 7
    Marc Deop wrote:
    They write in C because it's *faster*
    What sort of [rough guide] figure would apply to that?
    Would that still be true in the following event:

    Rubberman wrote:
    It may be possible to write kernel modules in C++, but it would be so restricted that it would end up pretty much just C code.
    That is to say:
    Does the C code always compile to faster, more efficient machine code than C++ ?
  • marc
    marc Posts: 647
    The speed not only depends on the language but most of the times C code will be faster than C++ .Note that we are talking here about *SMALL* figures, that is like 1ms faster in calling a function which is nothing from an application point of view but could be important in a kernel thing ;)
  • Noluk
    Noluk Posts: 7
    That helps; thank you for the insight.
  • chekkizhar
    chekkizhar Posts: 182
    First of all there is no rule written that, the Linux users should use the Linux commands and system calls. Noway...

    My friend's grand mother is using Ubuntu and of-course she is also a Linux user.

    As Developer, you are not left to use Linux alone. Whatever you are doing in Linux as a Developer, all are possible with other paid OS [Hope you guessed :-) ] .

    If you google it, you can find easily why c++ came . The Kernel is written in C, it can be even in asm, but very difficult to upgrade/change a single thing.

    I strongly agree with whatever Marc Deop told.

    Basically, its not like [ c > c++ } | [c++ > c ]. Its purely based on, what is objective of that final code output, where they going to deploy and who is going to use.
  • I really don't know what you want to express.

    If u write the code with C:
    #ifdef __cplusplus   /* or  #if defined(__cplusplus) */
    Extern "C" {
    #endif 
    
    /*  your code below */
    
    #ifdef __cplusplus
    }
    #endif
    
    then , the c++ compiler can compile this c program.

    If u write the code with C++:
    #include <pthread.h>  /* this can use a c head file */
    #include <iostream>   /* this is a c++ head file */
    

Categories

Upcoming Training