Followers 0

# Why Does Xcode Give My Application A Command Line Argument?

## 7 posts in this topic

So, today I played around a little with my main function and decided to print out the argv and argc arguments in the main function.

This resulted in the following being printed out :

Commandline argument amount : 1.

1. /Users/name/Library/Developer/Xcode/DerivedData/Playground-bdassylsrksorocyjtssfnwfbkpg/Build/Products/Debug/Playground

Input anything to continue.
a
Program ended with exit code: 0


After the '1.' it prints out the command line argument, my question is why does it have that command line argument? And what is it used for?

Here's the code I used for this little program :

#include <iostream>

int main(int argc, const char* argv[]) {

std::cout << "Commandline argument amount : " << argc << "." << std::endl;

for (int i = 0; i < argc; i++)
{
std::cout << std::endl;
std::cout << i + 1 << ". " << argv[i] << std::endl;
}

std::cout << std::endl;
std::cout << "Input anything to continue." << std::endl;
std::string inpt;
std::cin >> inpt;

return 0;
}

0

##### Share on other sites

There is always at least 1 argument -- the first being the command used to invoke the program (if available, or empty if not).

A bit surprised that it isn't just the name of the application, but the entire filepath, but that might just be how Macs work?

0

##### Share on other sites

That's how C++ works. Per the standard, if argc is non-zero argv[0] will be a pointer to the string that "represents the name used to invoke the program." The specifics of what that name looks like are not called out by the standard, but the presence of such a name is standard C++.

Xcode in particular launches your program via its absolute path.

Edited by Josh Petrie
1

##### Share on other sites

There is always at least 1 argument -- the first being the command used to invoke the program (if available, or empty if not).

A bit surprised that it isn't just the name of the application, but the entire filepath, but that might just be how Macs work?

What would happen if the argument would be empty? :P Nothing at all? The application wouldn't launch?

0

##### Share on other sites

The POSIX standard requires the invoking environment pass the name of the program as the first argument.  Mac OS and Linux are both POSIX compliant.  If you test the program on Microsoft Windows, which is not POSIX compliant, you will find the first argument is usually empty.

This is not a language standard and not related to C++.

0

##### Share on other sites

If you test the program on Microsoft Windows, which is not POSIX compliant, you will find the first argument is usually empty.

Actually, on Windows it will be usually filled as expected as well. Especially if you launch it from the command line or Explorer. I think I managed to get an empty argv[0] once when launching a child process myself but that was mostly me not using it as intended. You certainly can end up without a valid argv[0] on Windows but I have never actually seen it in the wild.
0

##### Share on other sites

It can happen on any platform if you invoke a program directly.  Typically it is a value filled out by the shell or the OS.

The C language, languages derived from it, and the POSIX standard do require the first parameter to a program to be the program's name as described above, but it can be blank and the requirement is enforced as policy, not through technical means.

0

## Create an account

Register a new account