CS253: Software Development with C++

Fall 2020

Implicit Inclusion

Show Lecture.ImplicitInclusion as a slide show.

CS253 Implicit Inclusion

Dubious Code

Is this code correct? I mean, sure, it’s factually correct, but is it a correct C++ program?

#include <iostream>

using namespace std;

int main() {
    string s = "Han shot first!\n";
    cout << s;
}
Han shot first!

Bad Code

#include <iostream>

using namespace std;

int main() {
    string s = "Han shot first!\n";
    cout << s;
}
Han shot first!

The code is not correct. A std::string was defined, but there is no #include <string>. But, still, it compiled. ☺? ☹?

Not a Cause for Celebration

operator<<

Light Dawns

#include <iostream>

using namespace std;

int main() {
    string s = "Han shot first!\n";
    cout << s;
}
Han shot first!

Solution

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s = "Han shot first!\n";
    cout << s;
}
Han shot first!

Theoretical

Example

Consider this program, compiled on my Macbook Air under macOS:

    % cat c.cc
    #include <cmath>
    int main() {
        return isinf(0.0);
    }
    % g++ c.cc
    % ./a.out
    % g++ --version
    Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
    Apple LLVM version 8.0.0 (clang-800.0.42.1)
    Target: x86_64-apple-darwin15.6.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Example

The same program, compiled on a CSU CS Department computer:

    % cat c.cc
    #include <cmath>
    int main() {
        return isinf(0.0);
    }
    % g++ c.cc
    c.cc: In function ‘int main()’:
    c.cc:3:12: error: ‘isinf’ was not declared in this scope
         return isinf(0.0);
        	^~~~~
    c.cc:3:12: note: suggested alternative:
    In file included from c.cc:1:0:
    /usr/include/c++/7/cmath:612:5: note:   ‘std::isinf’
         isinf(_Tp __x)
         ^~~~~
    % g++ --version
    g++ (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2)

Conclusion

TEST ON THE TARGET MACHINE